井字棋,英文名叫Tic-Tac-Toe,是一種在3×3格子上進行的連珠遊戲,和五子棋類似,由于棋盤一般不畫邊框,格線排成井字故得名。遊戲需要的工具僅為紙和筆,然後由分别代表O和X的兩個遊戲者輪流在格子裡留下标記(一般來說先手者為X),任意三個标記形成一條直線,則為獲勝。由于井子棋難度低,常用作兒童遊戲。玩過這個遊戲的人都會發現,如果兩個玩家都做出最優選擇,這個遊戲一定會出現平局。别看這個遊戲雖然簡單,但用數學計算它整個過程卻複雜的多,從理論上講“井字棋”一共可能有19683種現象!今天就和大家一起用Scratch把“井字棋”遊戲給作出來。這個遊戲的代碼沒有大家想象的那麼難,隻要大家跟緊思路就沒有任何問題,讓我們一起開始吧(圖1)。
首先我們創建需要的角色和背景。點擊舞台背景在造型中繪制四條線作為棋盤,線條的間距稍微放寬一些,粗細也稍微加粗一些。再寫上X WIN和O WIN兩種結局的背景造型。
完成三個背景造型之後,新建角色,這個角色的造型中需要添加四個不同的造型,分别是兩個正方形的方塊,方塊比棋盤格子稍微小一點。顔色為一白一灰用于遮擋和顯示鼠标焦點。當鼠标移動到棋盤上的格子時候,顔色切換成灰色,默認情況下顔色為白色。另外兩個角色是X和O用來表示棋子。準備好的背景和角色如圖2。
一切就緒後,可以開始編寫代碼了,我們先為棋盤每個格子編号,左下角為1号位,右上角為9号位。使用兩個變量sign_num(用于标記每個方塊的編号)和toggle(用于标記每個方塊的背後的X或者O)。
将角色造型切換成白色方塊,移動到1号位(-115,-112)。套用雙重循環,每次重複執行3次,克隆自己,将X坐标增加115(X和Y的數值是根據棋盤與角色方塊的高寬根據實際情況計算出來的,可以自行調整)。同時将sign_num的值增加1,内層循環結束。将X坐标重新設為-115,恢複到左邊格子的坐标,将Y坐标增加110,角色到了中間一行。3×3次循環結束之後,棋盤中的每個方格都有了一個克隆體(如圖3)。
為了标記這些克隆體,我們新建一個列表cell,一個變量count,默認起始情況下删除cell中的全部内容,将變量count設置為10,重複執行9次,将數字10-19添加入列表中,對應9個位置的角色。列表有兩個作用,第一作為區分方格的數字編号,第二等遊戲時将X和O與列表中的數字進行替換用來記錄棋局,到此第一步結束(如圖4)。
遊戲開始後所有克隆體快速鋪滿棋盤後,初始狀态是所有的方格上都是白色的造型(造型編号=1)。我們移動鼠标開始遊戲,當碰到鼠标指針後切換成灰色造型(造型編号=2),之後分成兩種情況,點擊鼠标落子和沒有操作移開鼠标。
當按下鼠标且該位置沒有棋子時(造型編号=2)可以落子,按照井字棋遊戲的規則,當按下鼠标後輪流打叉(X)和畫圈(O),我們可以通過toggle變量來控制X和O的次序,當toggle為奇數時,當toggle除以2的餘數=1時說明toggle是奇數,切換成O的造型,當toggle為偶數時,切換成X的造型,切換造型之後将列表中格子對應的項替換成X或O。每次鼠标點擊,toggle數值增加1。
當沒有點擊操作,鼠标移開,就将灰色塊恢複成白色塊(如圖5)。
到目前為止,遊戲已經可以操作了,隻是還缺少了最重要的一部分判斷勝利,就是需要判斷是否産生了三連。井字棋不同于五子棋,獲取勝利的局面數量很少,才橫三條、豎三條、斜線兩條共八種可能。我們隻需要将八種方式一一列舉出就可以了,比如當列表的第1項=等2項=第3項的時候,對應方格中的1、2、3号位剛好橫向連成一條線。實際編程時使用“第1項=等2項與等2項=第3項”。再根據方格中的内容來判斷到底是哪一方獲得了勝利。最後由廣播的方式傳遞勝利信息給背景顯示出來。
到這裡,我們的井字棋遊戲也成功完成了,這裡小陳老師留一個問題,在目前井字棋代碼中我隻判斷了赢和輸,如果最終的結局是平局該怎麼用代碼表示呢?剩下整個問題就交給大家了。一起動腦思考一下吧,期待你們的答案。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!