用python编写1024游戏 (1)

我们从整体到局部地设计这个游戏。

首先,整个游戏过程可以简化如下:

开始->进行->结束

再想具体一点,可以变成这样:

开始->初始化->进行->游戏失败或者胜利->结束

思考一下 进行 这一步,可以变成:

棋盘处于某个状态->滑动->棋盘变成另一个状态->滑动->...

改写一下,加上判断条件,如下:

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实现。