掌控板之猜拳小游戏

2020-09-12 14:03:42 电脑报 2020年34期

陈新龙

我们已经学习了不少掌控板的小实验,学到了OLED显示图片、文字和简单动画的方法;通过给掌控板写入程序,制作一些有趣的小游戏。

今天我们结合图案显示和逻辑判断做一个猜拳小游戏。当玩家按下A键和B键,OLED屏幕的两边会随机出现石头剪刀布,程序会进行逻辑判断显示胜方。

通过这个实例,你可以学习掌控板的按键功能、OLED显示图片功能,以及利用逻辑自动判断猜拳结果。这样可以综合利用我们学过的知识,制作一个完整的猜拳游戏。

首先设置图像显示,猜拳的石头剪刀布图片在mPython软件中已内置,不需要我们外部导入,直接“获取内部图像”从图片素材库中选择石头(小)、剪刀(小)、布(小)。设置在屏幕不同的位置显示图片,注意OLED显示清空和OLED显示生效(如图1)。

接下来我们需要设计一下游戏进行的步骤。两个玩家参与游戏,一个按下A键,屏幕显示一个随机图案,另外一个玩家按下B键,显示一个随机图案,程序来判断输赢。

这中间需要解决几个问题,首先输出随机图案;其次系统如何知道出拳情况并开始进行判断;各种出拳情况如何进行正确的判断。下面看看解决这三个问题的思路吧。

第一,是设置随机图案,引入一个随机数变量用它来设置随机图案的显示。当按下一个键的时候(A或者B),设计一个变量为1到3之间的随机数,根据随机数和规则来显示图片,A键设置变量为X,B键设置变量为Y,具体代码如图2。

第二, 什么时候才让系统进行胜负判断呢?按照日常经验来看,只有A键和B键都按下,并且两方都正常显示图像后才可以进行猜拳判断。还记得为了设置随机图片时增加的变量X和Y吗?出拳后X和Y都是1到3的随机数(1是石头2是剪刀3是布),这样在程序开始时,我们可以设置X和Y变量都是0,只有当X和Y都不为0的时候才执行判断(如图3)。

接着就引出第三个问题了,如何能够进行正确的判断呢?不能单纯比较X和Y的数字大小,我们需要根据数字对应的猜拳结果,石头剪刀布之间的循环胜负来判断,一共有九种关系(如表)。

根据胜负关系表格需要多条判断,程序如图4。

在逻辑判断中我们使用了直接的方法,每种情况单独判断,没有使用判断的嵌套,这样代码比较长,但不容易出错适合初学者。

我们做出来的游戏是给别人玩的,在实现基本功能后还需要从用户的角度去优化游戏体验。当游戏开始时,增加一个界面,简单说明游戏名称和操作方法(如图5)。

增加按下P键表示游戏开始,当触摸P键后,游戏初始化,X和Y的值为0,OLED的内容全部清空。自定义xianshi函数用于图像的显示,并且增加两个有参变量J和K,J代表变量X的值,K代表坐标X轴的位置,方便内置图像的显示。

新增自定义函数,将参数J和K传入函數中,当J=1的时候在K的位置上显示石头,当J=2的时候在K的位置显示剪刀,当J=3的时候在K的位置显示布。这里增加有参变量主要是为了能够节约代码总量,只需要传入参数就可以把两边图案都显示出来,方便又轻松(如图6)。

总的来说猜拳小游戏在程序设计上还是有点难度的,主要是将已经学过的知识点综合运用在游戏编写中。在完成基本功能后,尽可能地优化流程并减少代码量。这样可以锻炼自己的归纳整理能力,提高程序设计的能力。