项目描述
项目描述:
贪吃蛇是一款比较经典的游戏,相信很多朋友们在自己手机上都玩过。
贪吃蛇通过“上”,“下”,“左”,“右”四个方向来控制蛇的移动,贪吃蛇每吃到一个食物,身体长度就会增长一次,当蛇撞到墙壁或者自己身体的时候,游戏就会结束。
本文基于Python,进行贪吃蛇游戏demo复盘。
项目配置
turtle库:创建游戏窗体与键盘按键的监听工作。
freegames库:贪吃蛇的绘制工作
random库:导入随机函数进行随机坐标的生成工作
项目流程
在该贪吃蛇项目中,设计需要由整体到细节,
1.首先定义游戏窗体。
2.定义完游戏窗体后需要定义游戏的几个关键元素:
3.然后定义元素之间的关联关系:
基于以上分析开始建立游戏demo
导入游戏需要使用的模块,函数与类。
from random import randrange
from freegames import vector,square
import turtle
定义游戏中蛇,食物,移动距离等元素的位置坐标。
food=vector(0,0)
snake=[vector(10,0)]
position=vector(0,-10)
定义change()函数,用于改变蛇的移动方向。
def change(x,y):
position.x=x
position.y=y
定义is_inside()函数,判断蛇头是否在窗体内。
def is_inside(head):
return -200 < head.x <190 and -200 < head.y < 190
定义move()函数,用于实现蛇的移动以及判断蛇是否吃到食物。
实现蛇的移动,判断蛇是否吃到食物
def move():
#确定蛇头的位置
head = snake[-1].copy()
#移动一步
head.move(position)
#判断蛇的头部是否在边缘或者蛇的身体中
if not is_inside(head) or head in snake:
#如果在,判断成立,绘制蛇头颜色,说明游戏结束
square(head.x,head.y,9,'red')
turtle.update()
return
#更新蛇的位置
snake.append(head)
#如果蛇吃到食物
if head==food:
#每吃到一次记录下的蛇的长度,同时也相当于游戏的得分
print('Snake:',len(snake))
#随机生成下一个食物元素x,y的坐标
food.x == randrange(-15, 15) * 10
food.y == randrange(-15, 15) * 10
else:
#清除蛇走过的坐标
snake.pop(0)
#清空蛇走过的位置
turtle.clear()
#循环遍历蛇的坐标
for body in snake:
#绘制黑色的蛇
square(body.x,body.y,9,'black')
#绘制绿色食物
square(food.x,food.y,9,'green')
turtle.update()
#定时不断执行move函数,直到蛇碰到窗体边缘或者自己身体,函数中断,游戏中断
turtle.ontimer(move,100)
创建程序入口,如设置程序的窗口大小。
使用move()函数实现蛇的移动效果,用按键监听实现控制蛇的移动方向。
if __name__ == '__main__':
#定义窗体
turtle.setup(420,420,370,0)
turtle.hideturtle()
turtle.tracer(False)
#调用定义的函数
move()
#事件监听器
turtle.listen()
#监听键盘的“上”,“下”,“左”,“右”事件
turtle.onkey(lambda: change(10,0),'Right')
turtle.onkey(lambda: change(-10, 0), 'Left')
turtle.onkey(lambda: change(0, 10), 'Up')
turtle.onkey(lambda: change(0, -10), 'Down')
turtle.done()
项目演示