我们从整体到局部地设计这个游戏。
首先,整个游戏过程可以简化如下:
开始->进行->结束
再想具体一点,可以变成这样:
开始->初始化->进行->游戏失败或者胜利->结束
思考一下 进行 这一步,可以变成:
棋盘处于某个状态->滑动->棋盘变成另一个状态->滑动->...
改写一下,加上判断条件,如下:
while 未结束:
随机出现一个数字
滑动
更改棋盘状态
具体一下随机出现一个数字这一步,有:
if 当前棋盘有剩余空位:
在空位中随机出现数字2或4
再思考一下滑动这一步,有:
接收到滑动
if(该方向可以滑动):
更改棋盘状态
再具体思考一下更改棋盘状态这一步,可得:
接收到滑动
for 序列 in 棋盘作平行于该方向的切分:
序列中元素合并
其中序列中元素合并步骤具体为:
合并相同元素,合并后的元素置于滑动方向上的格子
将元素顶格在滑动方向上
注意这一步在具体实现时可以同时进行。具体如下:
# 在滑动方向的反方向开始遍历序列,这里假设滑动方向是从左向右
for 元素 in 反序序列:
if 元素不为空:
if 左边存在相隔n个零的相同元素(n>=0):
自身数值翻倍
计分
被合并的格子置空
while 右边元素为空:
自身右移一格
其中计分的规则是:
总分=总分+合并后该元素的值
回到一开始判断未结束步骤,具体地:
if 棋盘上存在格子的值为1024:
游戏状态=胜利
elif 棋盘上存在剩余空格 或者 棋盘上依然存在可以合并的元素:
游戏状态=未结束
else:
游戏状态=失败
初始化步骤具体为:
棋盘上随机一格置2
综上,可以写出整体的游戏设计思路:
游戏状态=未结束
棋盘上随机一格置2
while 游戏状态=未结束:
if 当前棋盘有剩余空位:
在空位中随机出现数字2或4
接收到滑动
if(该方向可以滑动):
for 序列 in 棋盘作平行于该方向的切分:
for 元素 in 反序序列:
if 元素不为空:
if 左边存在相隔n个零的相同元素(n>=0):
自身数值翻倍
总分=总分+合并后该元素的值
被合并的格子置空
while 右边元素为空:
自身右移一格
if 棋盘上存在格子的值为1024:
游戏状态=胜利
elif 棋盘上存在剩余空格 或者 棋盘上依然存在可以合并的元素:
游戏状态=未结束
else:
游戏状态=失败
好了,说完思路,接下来将采用python实现。