本篇内容主要讲解“Python如何实现小游戏pong”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何实现小游戏pong”吧!
游戏动图:
建议先仔细阅读一下,然后再往后看 DE8UG 对源码的分析。
from random import choice, randomfrom turtle import *from freegames import vectordef 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] += changedef 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”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/howiewang/blog/4452652