更多课程 选择中心

Python培训
美国上市教育机构

400-111-8989

Python培训

Python实战【用Python写游戏第六节】面向对象的游戏设计

  • 发布:Python培训
  • 来源:Crossin的编程教室
  • 时间:2019-03-27 16:50

欢迎大家来到Python自学教程实战篇,我们上一讲已经可以让飞机发射子弹了,但只有一颗这是为什么呢?多颗子弹怎么实现呢?这节课我们就来看看,用面向对象进行游戏设计,实现多颗子弹在游戏中的运动,一起来看看吧:

Python实战【用Python写游戏第六节】面向对象的游戏设计

在游戏中,我们多加几颗子弹就会发现,需要用好几个变量去分别记录它们的xy坐标,在主循环中判断每一颗子弹的状态。你可以用list把程序写得稍稍不那么复杂,但这还没完。别忘了你打飞机的对手--敌机还没有加入到游戏。到时候你又需要更多的变量去记录它们的坐标,去判断它们的状态,去处理敌机、子弹、玩家飞机之间的关系。想想都觉得头大。

于是乎,我之前煞费苦心讲解的面向对象就该派上用场了。我要把子弹相关的东西都封装在一起。

先看看目前子弹相关的有哪些东西:x、y坐标,一张图片,好像就这么多。然后,还有一段处理子弹运动状态的代码。来建一个Bullet类,把x、y、image作为成员变量,再提供一个叫做move的成员函数,处理子弹的运动。

#定义一个Bullet类,封装子弹相关的数据和方法

class Bullet:

def __init__(self):

#初始化成员变量,x,y,image

self.x = 0

self.y = -1

self.image = pygame.image.load('bullet.png').convert_alpha()

def move(self):

#处理子弹的运动

if self.y < 0:

mouseX, mouseY = pygame.mouse.get_pos()

self.x = mouseX - self.image.get_width() / 2

self.y = mouseY - self.image.get_height() / 2

else:

self.y -= 5

代码的内容基本和之前一样,只是改为了面向对象的写法。如果你对__init__,self这些字眼感到陌生的话,请发送数字47到50,回顾一下关于python面向对象的课程。

接下来,程序主体就可以瘦身了。在原本加载子弹图片、初始化位置的地方,直接创建一个Bullet的实例。

bullet = Bullet()

在主循环中处理子弹运动的地方,调用Bullet的move方法。

bullet.move()

绘制子弹的时候,从bullet实例中取数据。

screen.blit(bullet.image, (bullet.x, bullet.y))

就这么简单。

运行程序看看效果是否正常。相比昨天,游戏的功能没有任何进展,但在结构上清晰了许多。之后,可以放心地添加更多子弹和敌机,而不会导致代码变成一坨。

恭喜您在Python自学的道路上又坚持了一天,我们目前学习的知识比之前的要复杂一些,但是也比之前的有趣多了,所以希望大家跟上我们的步伐,继续加油!

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:Python实战【用Python写游戏第五节】游戏中的运动
下一篇:Python实战【用Python写游戏第七节】多变的宿敌

【Git第八节】移除文件

【Python实战】四行Python代码就能知道你那的天气,你敢信?

Python实战【用Python写游戏第十三节】exe打包

Python实战【用Python写游戏第十二节】屡败屡战

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省