1、蛇的生成
为了方便确定点的坐标将蛇和游戏的网格界面全部设定为一个点类其中包含点的位置,点的大小由屏幕大小除以行数和列数确定。
class Point: def __init__(self, row=0, col=0): self.row = row self.col = col def copy(self): return Point(self.row, self.col)
首先确定蛇头的位置在屏幕的中心,然后设置一个蛇队列的空队列
2、蛇的移动
每次蛇头移动前将蛇头的位置复制到队列中,如果没有吃到食物将队列中最后一个元素删除,如果吃到食物就不删除队列最后一个元素,实现蛇头和蛇身的联动移动。如果此时direct方向是向上或者向下才能实现向左向右,同理方向是向左向右才能实现向上或者向下,如果direct是向左蛇头的横坐标减一、direct是向右蛇头的横坐标加一、direct是向上蛇头的纵坐标减一、direct是向下蛇头的纵坐标加一
3、食物的生成
食物生成函数用一个死循环嵌套,设置点的位置为0~行数和0~列数中的随机数,检测食物的位置是否与蛇身蛇头重合,如果重合将重新生成食物,直到不与蛇头和蛇身重合才返回食物位置。
4、碰撞检测
判断蛇头是否与蛇身和屏幕边界重合
#判断蛇是否撞边界
if head.col < 0 or head.row < 0 or head.row >= ROW or head.col >= COL: dead = True # 判断蛇是否撞蛇身 for snake in snakes: if snake.row == head.row and snake.col == head.col: dead = True break
如果相撞就结束游戏
5、转向逻辑
设置一个转向逻辑的标志位:direct,转向逻辑中获取按钮的按下向上、向下、向左、向右的事件,如果此时direct方向是向上或者向下才能实现向左向右,同理方向是向左向右才能实现向上或者向下,如果direct是向左蛇头的横坐标减一、direct是向右蛇头的横坐标加一、direct是向上蛇头的纵坐标减一、direct是向下蛇头的纵坐标加一