作者:看那个码农
公众号:看那个码农
1.项目简介
贪吃蛇是一款比较经典的游戏,相信很多朋友们在自己手机上都玩过。
贪吃蛇通过“上”,“下”,“左”,“右”四个方向来控制蛇的移动,
贪吃蛇每吃到一个食物,身体长度就会增长一次,当蛇撞到墙壁或者自己身体的时候,游戏就会结束
故此,本文基于Python,进行贪吃蛇游戏demo复盘
2.项目配置
- Python3.x
- turtle库
- freegames库
- random库
-
turtle库来实现创建游戏窗体与键盘按键的监听工作。
-
freegames库是进行贪吃蛇的绘制工作。
-
random库是用来导入随机函数进行随机坐标的生成工作。
3.项目流程
1.项目分析
在该贪吃蛇项目中,我们需要由整体到细节,
-
首先定义游戏窗体,
-
定义完游戏窗体后需要定义游戏的几个关键元素:蛇,食物,移动距离
-
然后定义元素之间的关联关系,
比如:
- 不断移动的蛇,
- 随机出现的食物
- 蛇吃了食物后就会增长
- 蛇碰到墙或者自己的身体,游戏就会结束
基于以上分析开始建立demo
2.导入游戏需要使用的模块,函数与类。
from random import randrange
from freegames import vector,square
import turtle
3.定义游戏中蛇,食物,以及移动距离等元素的位置坐标。
food=vector(0,0)
snake=[vector(10,0)]
position=vector(0,-10)
4.定义change()函数,用于改变蛇的移动方向。
def change(x,y):
position.x=x
position.y=y
5.定义is_inside()函数,判断蛇头是否在窗体内。
def is_inside(head):
return -200 < head.x <190 and -200 < head.y < 190
6.定义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)
7.创建程序入口
创建程序入口,如设置程序的窗口大小。
使用move()函数实现蛇的移动效果,用按键监听实现控制蛇的移动方向
if __name__ == '__main__':
#定义窗体
turtle.setup(420,420,370,0)
turtle.title("看那个码农之贪吃蛇")
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()
4.项目演示结果
5.项目思考总结
其实从整个demo来看,demo的代码数量不多,但是相比一般的贪吃蛇小游戏demo做了很多画龙点睛之处,
本demo专注于对
- 贪吃蛇的移动,
- 贪吃蛇是否吃到食物,
- 贪吃蛇的绘制
三个方向进行考虑,
合理运用了turtle库进行键盘按键的事件监听以及贪吃蛇游戏的窗口的定于与绘制,
运用freegames库进行贪吃蛇的绘制工作,
运用random库处理demo中的随机事件,如食物的生成。
总的来说,Python代码的强大不止于此,更有很多精彩的库与模块等待者开发者们去发现与使用。
人生苦短,我用Python。
如果你觉得这篇内容对你有帮助的话:
1、点赞支持下吧,让更多的人也能看到这篇内容
2、关注公众号:看那个码农,我们一起学习一起进步。
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情