48 井字遊戲
(2018/12/21)
井字遊戲,也就是圈叉遊戲,是大家從小玩到大的遊戲,也好像沒有看過在makecode下,有人設計這個遊戲,所以這次我們就來玩玩井字遊戲,它也是繼上次【貪吃蛇遊戲】後,又讓我花很多腦筋完成的作品。
設計想法
畫面規劃
A方的起始位置在(1,0),亮不閃爍的燈;B方的起始位置在(3,0),亮閃爍的燈,來和A方有所區別!
按A鍵,A、B方的燈會向下移動,到最下方時,就會移到上方,形成一個循環。
按B鍵,A、B方的燈會向右移動,到最右方時,就會移到左方,形成一個循環。
按A+B鍵,代表下在選好的位置上。當A下完後,自動切換B方下,同樣B方下完後,會自動切換A來下。
先贏三局者為勝
數理的應用
建立一個【位置】陣列來儲存井字遊戲中,九宮格各位置的值
各儲存格的值
此位置陣列一開始各位置(位置(0)~位置(8))的值設為0
若此格被A方下了後,其值設為1
若此格被B方下了後,其值設為-1
A、B方下手時,若發現該格的值不是0,就代表該格已經被下過了,就會要求重新再下一次
如何判斷A方或B方贏?
九宮格中一共有8種情形會構成一條線
第1線:位置(0)-位置(1)-位置(2)
第2線:位置(3)-位置(4)-位置(5)
第3線:位置(6)-位置(7)-位置(8)
第4線:位置(0)-位置(3)-位置(6)
第5線:位置(1)-位置(4)-位置(7)
第6線:位置(2)-位置(5)-位置(8)
第7線:位置(0)-位置(4)-位置(8)
第8線:位置(2)-位置(4)-位置(6)
如果以上8條線的任一條線的3個位置的值加起來
其值等於3,代表A方完成一直線
其值等於-3,代表B方完成一直線
有了以上認識後,就可以來寫程式了
程式內容:
程式一開始
建立A方及B方角色變數
B方要設閃爍
建立一個【位置】陣列,其值都為0
一開始A方先下,所以把B方亮度設為0
另外,將【下手次數】設為1;【A贏次數】、【B贏次數】設為0
按A鍵、按B鍵程式
按A鍵,A方或B方的燈會往下移動,到最下方時會移到上方來
按B鍵,A方或B方的燈會往右移動,到最右方時會移到左方來
按A+B鍵程式
用來控制A方及B方下手的程式,由於接下來程式長,切開成3個函式來說明
將所在位置的坐標值轉換成一個數值來表示
轉換公式:A方(或B方)轉換值=X*1+Y*3
【A方下手位置】的函式
A方(或B方)轉換值<4,此區域為不可下手的區域
A方(或B方)轉換值=4,代表A方或B方下在(1,1)的位置
先判斷此格有沒有人下過了,(=0,代表還沒下過)
若沒有人下過,就把位置(0)存成1,代表A方下過了
建立一個新的角色(用陣列角色)來占據此格
A方回到起始位置,並隱藏
B方顯示出來
A方下手成功,【下手次數】增加1
其他各格的作法相同(由於各格作法相同,可以採用含變數的迴圈來處理)
【B方下手位置】的函式,同上說明(但將位置的值,從0存成-1)
【判斷誰贏了】的函式
先設定8條成直線的變數
如果其中一條線的值為3,代表A方贏了
重新再來一局
把位置的陣列值再全部設為0
把占據九宮格的陣列角色全部刪除
屏幕顯示A (代表A贏了)
如果其中一條線的值為-3,代表B方贏了,程式說明同上
先贏三局者為勝
利用第1行(x=0)的下方3顆燈代表A方所勝的局數
利用第5行(x=4)的下方3顆燈代表B方所勝的局數
完成,完整程式如附件