本篇内容主要讲解“Python如何实现小游戏pong”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何实现小游戏pong”吧!
游戏动图:
源码
建议先仔细阅读一下,然后再往后看 DE8UG 对源码的分析。
from random import choice, random
from turtle import *
from freegames import vector
def value():
"Randomly generate value between (-5, -3) or (3, 5)."
return (3 + random() * 2) * choice([1, -1])
ball = vector(0, 0)
aim = vector(value(), value())
state = {1: 0, 2: 0}
def move(player, change):
"Move player position by change."
state[player] += change
def rectangle(x, y, width, height):
"Draw rectangle at (x, y) with given width and height."
up()
goto(x, y)
down()
begin_fill()
for count in range(2):
forward(width)
left(90)
forward(height)
left(90)
end_fill()
def draw():
"Draw game and move pong ball."
clear()
rectangle(-200, state[1], 10, 50)
rectangle(190, state[2], 10, 50)
ball.move(aim)
x = ball.x
y = ball.y
up()
goto(x, y)
dot(10)
update()
if y < -200 or y > 200:
aim.y = -aim.y
if x < -185:
low = state[1]
high = state[1] + 50
if low <= y <= high:
aim.x = -aim.x
else:
return
if x > 185:
low = state[2]
high = state[2] + 50
if low <= y <= high:
aim.x = -aim.x
else:
return
ontimer(draw, 50)
setup(420, 420, 370, 0)
hideturtle()
tracer(False)
listen()
onkey(lambda: move(1, 20), 'w')
onkey(lambda: move(1, -20), 's')
onkey(lambda: move(2, 20), 'i')
onkey(lambda: move(2, -20), 'k')
draw()
done()
运行
复制上述代码到一个 py 为后缀的文件,命名 pong.py.
在文件所在目录打开控制台:运行pip install freegames
,然后运行python pong.py
分析
这个游戏代码是一个第三方库 freegames 的一部分。从最上面导入依赖部分可以看出,主要是依赖于 turtle 这个库。
from turtle import *
的最后是个*,表示导入了 turtle 里面所有东西,一般是不建议导入太多内容的,一是可能加载太多没用的代码,二是可能出现同名的类或函数。目前这只是个小游戏,后面也用到不少 turtle 里面的函数,所以这么写勉强可以接受。
往下看,整个代码用到很多函数,只要是 import 没有明确导入的,以及非本 python 文件写的函数,其实都是这个*带来的 turtle 内部函数了。如果你不知道神马意思,记得我我课程里介绍过超全的在线文档吗?https://devdocs.io,你只需要搜一下turtle就可以看到相关解释了。
导入依赖部分还导入了 freegames 库里面一些工具类和函数:from freegames import vector,看单词就可以知道是个向量,用来表示坐标。
接下来就是自定义的函数和游戏中要用到的全局变量。我们只要根据游戏中有哪些角色,他们该怎么移动,以及有哪些数据的变化,就可以很好的理解代码了。
这个游戏里是两类角色,一个小球,旁边两个挡板。小球上下左右移动,遇到上下的墙,以及左右的挡板会反弹,挡板可以根据键盘操作上下移动。
小球的移动是随机的,所以先来个 value 函数,随机给出一定范围的移动坐标。
接下来表示游戏中的主要变量,小球,移动坐标,角色状态。其中,小球初始位置为中间,aim 表示移动的位置,所以坐标结合上面的 value 随机函数给出,接下来的状态用来表示左右挡板的上下移动,用字典的 key 表示左右两个玩家 1 和 2.
move 函数修改两个玩家的上下坐标,玩家的键盘绑定在代码最后的 onkey 中给出,即左边玩家为 w/s,右边玩家为 i/k,分别用来移动左右挡板。
rectangle 函数用来绘制左右玩家,通过参数 x,y 绘制坐标,width 和 height 绘制宽和高。
draw 函数是主要运行函数,函数最底下是一个定时器,不断循环这个函数,直到小球出局。函数内部每次先用 clear 刷新,然后绘制左右玩家。接下来随机移动小球,小球是在规定好的范围内移动,碰到上下边界需要反弹,即更改 y 坐标。接下来用 x 坐标分别和左右两个玩家的挡板进行判断,当小球的 y 坐标在挡板范围内,相当于球被拍子击中,需要反弹,即更换 x 坐标的正负号。否则小球出局,游戏结束。
到此,相信大家对“Python如何实现小游戏pong”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/219844.html