温馨提示×

温馨提示×

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

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

Python如何实现小游戏​pong

发布时间:2021-12-17 17:36:58 来源:亿速云 阅读:189 作者:iii 栏目:大数据

本篇内容主要讲解“Python如何实现小游戏pong”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

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

AI