通过之前的讲解,了解了一些相关原理和基本的控制方法。接下来就可以开始编写“飞机大战”了。
开始之前,先说一说,为什么要以对象化编程,之前的例子里的脚本,都是以过程化编写,而实际开发则以对象化为主。
这里把飞机移动的脚本,按对象化重新编写,右边是原来的脚本。乍一看,对象化好像要复杂一些。进一步观察脚本会发现:
1、A和B部分是实际的流程控制,A要更易于阅读,逻辑也更清晰。
2、C部分信息可复用,而且易于划分模块,对于协同开发优势明显。
2、程序继续编写,C,B 部分的脚本会逐渐增加。A只会有极少量的增加。最终B的脚本行数会趋近于C+A的,甚至多的多。
对象化的优势很明显,所以我们采用对象化为主进行这个游戏的开发。
创建基础类
既然是对象化,首先得创建对象。玩家飞机、敌机、玩家飞机子弹、敌机机子弹、背景、按钮、分数显示……,都是我们需要的对象,这些对象也会有一些共同点,比如玩家飞机、敌机、子弹、背景,都是图片和坐标来创建。当然也会有一些不同,比如玩家飞机子弹往上移动,敌机机子弹往下移动。
那么我们就可以先创建一些基类,需要的时候,继承它在增加一些特性就可以了。
这个游戏最多的素材是图片,那么我们可以把图片加载和显示封装成一个基类 "Base"
class Base(object):
def __init__(self, pygame_screen, postion, image_name):
self.x,self.y = postion #图片左上角坐标(x,y)
self.screen = pygame_screen #Surface对象
self.image = pygame.image.load(image_name) #读取图片
self.w, self.h = self.image.get_size() #获取图片的宽度和高度
把显示文本信息(显示得分、版本信息、作者信息等等)封装成基类 "ShowText"
class ShowText(object): # 文本信息基类
def __init__(self,screen_temp,text,font,color,postion):
self.text = text
self.postion = postion
self.screen = screen_temp
self.font = font #字体
self.FontColor = color #字体颜色
def display(self):
self.fontObj = pygame.font.Font(self.font, 18)
self.showscores = self.fontObj.render(self.text, True, self.FontColor)
self.showscoresObj = self.showscores.get_rect()
self.showscoresObj.center = self.postion
self.screen.blit(self.showscores, self.showscoresObj)
本篇讲解了对象化编程在游戏开发中的优势,并尝试创建基类。接下来会以游戏的各个阶段为主线,来讲解相关对象、函数的创建及调用方法。