最近通过python实现2048小游戏的开发,在开发过程中遇到了一些问题,发现了自己的不足之处,特此进行简单的反思。
一.状态机:
状态机是表示有限个状态以及这些状态之间转移和动作等行为的数学模型,状态机的最常见表示即:当前状态(b)+事件(y)的组合之处下一个状态(c),2048下游戏的主逻辑就可以分为五状态以及六种动作组成的状态机,利用状态机的思想,可以更快的完善游戏的逻辑构成,构思游戏流程。2048状态机如下:
二.矩阵与转置
在开发2048小游戏的时候,整个棋盘是一个4*4的矩阵,在开始进行游戏上下左右操作的编码的时候,我是通过一个父方法,然后继承了四个子方法分别对应上下左右四种操作,后来在网上查看别人的代码的时候,发现通过矩阵的转置与逆转,可以直接从左移得到其余三个方向的移动操作,大大的减少代码量。
def invert(field): #矩阵逆转 return [row[::-1] for row in field] def transpose(field): #矩阵转置 return [list(row) for row in zip(*field)] def move(self, direction): def move_row_left(row): #一行向左合并 moves = {} moves['Left'] = lambda field: [move_row_left(row) for row in field] moves['Right'] = lambda field: invert(moves['Left'](invert(field))) moves['Up'] = lambda field: transpose(moves['Left'](transpose(field))) moves['Down'] = lambda field: transpose(moves['Right'](transpose(field))) if direction in moves: if self.move_is_possible(direction): self.field = moves[direction](self.field) self.spawn() return True else: return False