2021应用马拉松参赛笔记【2】

参赛作品构思之一:扫雷变身病毒追踪

扫雷是大家非常熟悉的游戏,早在上世纪90年代,在Windows3.0中就预装了扫雷游戏,在那个游戏种类贫乏的年代,扫雷在挑战着我们的脑力与耐心的同时,也带给我们无穷的乐趣。

扫雷游戏应该归为棋盘游戏,假设考虑做一个最小规格的游戏,在9x9的棋盘上随机分布了9颗雷。考虑到App Inventor的实现能力,核心组件必然是画布,另外需要两个显示剩余雷数和游戏耗时的标签,仅此而已。

扫雷游戏的技术实现将围绕着两个长度为81的列表展开,一个列表用于保存雷的分布,在游戏初始化时,随机生成该列表,我们姑且称其为“雷表”。另一个列表用于保存每个格子中的数字,这个数字代表该格子周围有几颗雷,我们称这个列表为“数表”,在雷表生成之后,可以逐一求出数表中每个列表项的值。

有了这两个列表,接下来要考虑画布坐标(x,y)与棋盘列与行(X,Y)之间的对应关系。这是一个简单的线性关系,假设画布尺寸为270x270,每个行列的宽、高均为30,则换算关系为:

列数 X = 就低取整(x/30)+ 1

行数 Y = 就低取整(y/30)+ 1

当然,两行或两列交界处需要事先作出考虑,例如,当x=30时,如果将该点算作第一列,则上述公式就不适合了,需要将(x/30)替换为((x-1)/30)。

除了坐标与行列的转换关系,还需要考虑一维列表中的列表项索引值与行列之间的换算关系,假设列表项索引值为N,则:

N = (Y-1)*9 + X

有了这两个换算关系,就可以处理画布的点击事件了。在画布的点击事件中,携带了触点的x、y坐标,由x、y坐标可以求出触点所在的行Y、列X,进而求出列表项索引值N,由N可知触点所在的格子中是否有雷(依据雷表),如果有雷,则游戏结束,如果没有雷,则可知该格子周围的雷数。如果雷数为零,则打开周围格子,并在这些格子中标注雷数(依据数表);如果这些格子中仍然后雷数为0个格子,则继续打开其周围的格子,并标注数字,以此类推。

接下来考虑雷的标记,当判定某个格子有雷时,在windows游戏中,是通过点击鼠标右键来实现标记功能的,但在手机应用中,右键事件被长按事件所代替,因此,要利用画布的长按事件,来实现雷的标记。

这些问题解决之后,余下的就是一些细节问题了,如,计算剩余雷数、累计游戏耗时、在画布上做标记,等等。其中在画布上做标记,可以用字符来替代图案,如用黑色星号(*)表示已经触发的雷,用绿色井号(#)表示已标注的雷,用不同颜色的数字表示周围的雷数,等等。

最后,就是将游戏命名为“追踪病毒”,也可手工绘制一个红色的冠状病毒的图案(画布具有绘制多边形的功能),来替代上述的黑色星号,以增加游戏的趣味性。

以上是关于参赛作品的设想,不过,这样简单地把雷替换为病毒,显得缺少创新性,不过,考虑到重在参与,也不失为一个选择。

(未完待续)

(0)

相关推荐