Scratch 製作井字棋遊戲_風聞
壹零社-最新鲜的互联网产业资讯2021-08-27 10:40
井字棋,英文名叫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項”。再根據方格中的內容來判斷到底是哪一方獲得了勝利。最後由廣播的方式傳遞勝利信息給背景顯示出來。
到這裏,我們的井字棋遊戲也成功完成了,這裏小陳老師留一個問題,在目前井字棋代碼中我只判斷了贏和輸,如果最終的結局是平局該怎麼用代碼表示呢?剩下整個問題就交給大家了。一起動腦思考一下吧,期待你們的答案。