python小游戏代码分析_Python随身听-源码分析-经典小游戏

周六了,让我们一起读点代码放松一下吧!

今天要给大家看的代码是一段游戏的代码,贪吃蛇。

游戏动图:

源码

建议先仔细阅读一下,然后再往后看 DE8UG 对源码的分析。

from turtle import *

from random import randrange

from freegames import square, vector

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

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)

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')

move()

done()

运行

复制上述代码到一个 py 为后缀的文件,命名 snake.py.

在文件所在目录打开控制台:运行pip install freegames,然后运行python snake.py

分析

这个游戏代码是一个第三方库 freegames 的一部分。从最上面导入依赖部分可以看出,主要是依赖于 turtle 这个库。

from turtle import *的最后是个*,表示导入了 turtle 里面所有东西,一般是不建议导入太多内容的,一是可能加载太多没用的代码,二是可能出现同名的类或函数。目前这只是个小游戏,后面也用到不少 turtle 里面的函数,所以这么写勉强可以接受。

往下看,整个代码用到很多函数,只要是 import 没有明确导入的,以及非本 python 文件写的函数,其实都是这个*带来的 turtle 内部函数了。如果你不知道神马意思,记得我我课程里介绍过超全的在线文档吗?https://devdocs.io,你只需要搜一下turtle就可以看到相关解释了。

导入依赖部分还导入了 freegames 库里面一些工具类和函数:from freegames import square, vector,看单词就可以知道一个画框框,表示蛇以及食物。一个是个向量,用来表示坐标。

接下来是向量表示的食物 food,向量列表表示的蛇 snake,以及表示移动目标的 aim。

贪吃蛇,顾名思义是一个贪吃的蛇,当然要四处游动,且添加一些限制。所以有了函数 change,inside 和 move。分别表示根据箭头移动,判断是坐标是否合法,以及移动。

最复杂的是移动函数。这里的逻辑流程为:取到蛇头,走一个位置 aim,判断坐标是否合法,不合法标红并退出,合法继续往后走。给蛇追加新的蛇头坐标,这时候需要判断是否吃到食物,即坐标相同,相同则绘制新蛇头,否则弹出刚刚追加的坐标。接下来用 clear 清理屏幕,绘制整条蛇和新的食物。更新一下,然后 ontimer 定时继续移动的操作。

最后一大段代码主要是设置绘图环境,添加键盘的移动响应。在 onkey 函数里用了 lambda 函数绑定了最上面的 change 函数,修改不同方向移动后的 aim 坐标。

接下来就是启动游戏,开始玩了 😊

ok,这就是本周六的源码分析了,祝你阅读愉快。目前在 Python 随身听的微信栏目里,已经从周一到周日安排了:技术精选,基础学习,Python 练习,项目连载,难点问答,源码分析,DE8UG 杂谈这些栏目,欢迎围观。有任何想法建议疑问欢迎留言,明天见~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值