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方所勝的局數

    • 完成,完整程式如附件