学习在micro:bit上做一个井字游戏
设计想法
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方)转换值=X1+Y3
A方下手位置的函式
A方(或B方)转换值<
4,此区域为不可下手的区域
A方(或B方)转换值=4,代表A方或B方下在(1,1)的位置
先判断此格有没有人下过了,(=0,代表还没下过)
若没有人下过,就把位置(0)存成1,代表A方下过了
建立一个新的角色,用数组角色来占据此格
A方回到起始位置,并隐藏
B方显示出来
A方下手成功,下手次数增加1
其他各格的作法相同
B方下手位置的函式,同上说明
判断谁赢了的函式
先设定8条成直线的变量
如果其中一条线的值为3,代表A方赢了
重新再来一局
把位置的数组值再全部设为0
把占据九宫格的数组角色全部删除
屏幕显示A (代表A赢了)
如果其中一条线的值为-3,代表B方赢了,程序说明同上
先赢三局者为胜
利用第1行(x=0)的下方3颗灯代表A方所胜的局数
利用第5行(x=4)的下方3颗灯代表B方所胜的局数
完成。