温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python如何实现小游戏​pong

发布时间:2021-12-17 17:36:58 阅读:199 作者:iii 栏目:大数据
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本篇内容主要讲解“Python如何实现小游戏pong”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/howiewang/blog/4452652

AI

开发者交流群×