大家好,给大家分享一下python贪吃蛇游戏代码详解外加中文,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!
Source code download: 本文相关源码
贪吃蛇、迷宫、扫雷这些游戏可以是非常经典,伴随着很多人的童年回忆。
那么,你是否想过自己是试一下呢?
就以我们熟知的贪吃蛇为例,我们已经对这款游戏的主题和玩法已经非常清楚了,通过方向键控制蛇的移动,每当吃到一颗食物蛇就会变长,如果撞到墙则游戏结束python turtle画三角形的树。
它并不像我们大多数情况下使用python那样,np.linespace、plt.plot、tf.Session,它更像是LeetCode上面的算法题,需要你从零开始去实现一款游戏,用心去思考游戏实现过程中的每个细节。而在这个过程中对人的提升会非常迅速。
下面就以贪吃蛇这个游戏为例,介绍它的源码和实现过程。
首先,导入需要的模块,
from turtle import *
from random import randrange
from freegames import square, vector
其中 turtle 是一款绘图工具,主要为了实现游戏的前端的用户交互功能, freegames 包含了一些开发游戏会用到的基本元素, random 是Python中用于生成随机数的库,在生产新食物的过程中会遇到。
然后,就初始化一些变量,分别用于存储食物、蛇的状态,
food = vector(0, 0)
snake = [vector(10, 0)]
aim = vector(0, -10)
下面就是初始化蛇的位置,已经定义蛇对于键盘方向键的响应,朝着指定的方向移动,
def change(x, y):
"Change snake direction."
aim.x = x
aim.y = y
setup(420, 420, 370, 0)
hideturtle()
tracer(False)
listen()
onkey(lambda: change(10, 0), 'Right')
onkey(lambda: change(-10, 0), 'Left')
onkey(lambda: change(0, 10), 'Up')
onkey(lambda: change(0, -10), 'Down')
接下来,我们需要判断蛇是否在边界框以内,如果在,则继续移动,否则终止,
def inside(head):
"Return True if head inside boundaries."
return -200 < head.x < 190 and -200 < head.y < 190
最后,就是整个游戏的串联逻辑,不断移动蛇、不断判断当前状态,然后选择是否继续移动,
def move():
"Move snake forward one segment."
head = snake[-1].copy()
head.move(aim)
if not inside(head) or head in snake:
square(head.x, head.y, 9, 'red')
update()
return
snake.append(head)
if head == food:
print('Snake:', len(snake))
food.x = randrange(-15, 15) * 10
food.y = randrange(-15, 15) * 10
else:
snake.pop(0)
clear()
for body in snake:
square(body.x, body.y, 9, 'black')
square(food.x, food.y, 9, 'green')
update()
ontimer(move, 100)
到此为止了,经典的贪吃蛇游戏就完成了。整款游戏的纯代码不足50行。但是有很多需要开发者无思考和琢磨的点,对于Python学习者也是一个很大的提升。
文章到这里就结束了,喜欢的话希望一键三连!!