Python随身听 源码说明 经典小游戏​ flappy bird

来源:互联网 编辑:wan玩得好手游小编更新:2024-11-09 08:22:42 人气:

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

今天要给巨匠看的代码仍然是一段游戏的代码,上一周是贪吃蛇,此次换个口味:Flappy Bird。

游戏动图:

源码

建议先当真阅读一下,然后再往后看 DE8UG 对源码的说明。

from random import *
from turtle import *
from freegames import vector

bird = vector(0, 0)
balls = []
score = 0

def tap(x, y):
"Move bird up in response to screen tap."
up = vector(0, 30)
bird.move(up)

def inside(point):
"Return True if point on screen."
return -200 200 and -200 200

def draw(alive):
"Draw screen objects."
clear()
goto(bird.x, bird.y)

if alive:
dot(10, 'green')
else:
dot(10, 'red')

for ball in balls:
goto(ball.x, ball.y)
dot(20, 'black')

update()

def move():
"Update object positions."
global score
bird.y -= 5

for ball in balls:
ball.x -= 3

if randrange(10) == 0:
y = randrange(-199, 199)
ball = vector(199, y)
balls.append(ball)

while len(balls) > 0 and not inside(balls[0]):
balls.pop(0)
score += 1
print(f'get {score} scores')

if not inside(bird):
draw(False)
return

for ball in balls:
if abs(ball - bird) 15:
draw(False)
return

draw(True)

# 在鸟的位置,绘制分数
goto(bird.x, bird.y)
write(score, font=('Arial', 30, 'normal'))

ontimer(move, 50)

setup(420, 420, 370, 0)
hideturtle()
up()
tracer(False)
onscreenclick(tap)
move()
done()

运行

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

在文件地点名目翻开操作台:运行pip install freegames,然后运行python flappy.py

说明

查抄一个 py 文件中的源码,最开始可以对他们进行区域划分。一般有这么几个区域:

  • 导进
  • 全局变量
  • 函数
  • 调用流程

我们可以先大体看几个区域的变量和函数定义,然后从调用流程进手,一步步的说明代码。

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

from turtle import *的最后是个*,暗示导进了 turtle 里面所有东西,通常为不建议导进太多内容的,一是可能加载太多没用的代码,二是可能呈现同名的类或函数。今朝这只是个小游戏,后面也用到许多 turtle 里面的函数,所以这么写牵强可以接受。

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

导进依靠部分还导进了 freegames 库里面一些东西类和函数:from freegames import vector,看单词便可以晓得是个向量,用来暗示坐标。

接下来是几个函数:tap,inside,draw,move。

Flappy Bird, 是一个几年前一位越南开发者做的游戏,风行一时,容易上瘾,褒贬不一。DE8UG 认为这是一个不错的游戏,今朝我们看到的这个 python 代码,虽然没有把小鸟和阻碍物完全描述出来,但是从学习和文娱角度来看,已足够了。

故事很简单:一个小鸟,需要不休拍动同党往前飞,同时回避阻碍物。

针对小鸟和阻碍物的行为,就不难理解这几个函数了。

tap 暗示扇动同党,我们用点击屏幕来模拟飞行。

inside 揣摸阻碍物是不是在屏幕内。

draw 用来绘制小鸟和阻碍物,这里其实都是点,不同的是小鸟为绿色暗示畸形,红色暗示掉败。阻碍物都用黑色暗示。这里有个传进的参数 alive,用来按照小鸟的死活来绘制不同的颜色。同时,绘制阻碍物时,留心用 goto 调整不同的位置,以绘制出不同位置的阻碍物小球。

move 函数的功能就比力多了,首先要有小鸟的主动落落,暗示假如不扇动同党就会掉到地上死翘翘了。然后需要绘制黑色小球暗示阻碍物。这里阻碍物相对小鸟是往左移动的,所以 x 设置为-3(函数最后有 ontimer(move, 50)暗示按时移动)。接下来是随机模拟不同位置的阻碍物,这里主要是纵坐标 y 在屏幕内的变化。接下来揣摸假如阻碍物已不再屏幕内,就从列表里面移除。我这里添加了一个 score 变量,在顺利回避了阻碍以后,用来累计分数。以后揣摸 bird 的位置假如不在屏幕内,就给上面的 draw 函数添加参数 False,然后 return 退出。一切畸形的话,就循环揣摸所有的阻碍物,揣摸小鸟和阻碍物的位置是不是小与一个阈值,这里写的 15。当小于这个值,暗示相撞,小鸟就死翘翘了。最后在鸟的位置,绘制分数,这会是一个动态刷新的过程。

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

ok,这就是本周六的源码说明了,祝你阅读愉快。

今朝在 Python 随身听的微信栏目里,已从周一到周日安置了:技术精选,基础学习,Python 操演,项目连载,难点问答,源码说明,DE8UG 杂谈这些栏目,欢迎围不雅。

有任何想法建议疑问欢迎留言,将来 来日见~

相关阅读:

Python随身听-源码说明-经典小游戏


欢迎玩家到【wan玩得好手游】查看最新变态版手游攻略,只需要在百度输入【wan玩得好手游】就可以浏览最新上线送满vip的变态手游攻略了,更多有关BT手游的攻略和资讯,敬请关注玩得好手游!

更多...

热门推荐

更多...

相关文章