友情提示:380元/半年,儿童学编程,就上码丁实验室。
之前的课程用Python编写了一个井字游戏,今天在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方)转换值=X*1+Y*3
【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方所胜的局数
完成。
参考完整程序
https://sites.google.com/site/wenyumaker2/02micro-bit-yan-jiu/48-jing-zi-you-xi/microbit-%E4%BA%95%E5%AD%97%E9%81%8A%E6%88%B2.hex?attredirects=0&d=1