飞机大战(pygame)开发实录三

通过之前的讲解,了解了一些相关原理和基本的控制方法。接下来就可以开始编写“飞机大战”了。

开始之前,先说一说,为什么要以对象化编程,之前的例子里的脚本,都是以过程化编写,而实际开发则以对象化为主。
对象化、过程化脚本比较

这里把飞机移动的脚本,按对象化重新编写,右边是原来的脚本。乍一看,对象化好像要复杂一些。进一步观察脚本会发现:
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)

本篇讲解了对象化编程在游戏开发中的优势,并尝试创建基类。接下来会以游戏的各个阶段为主线,来讲解相关对象、函数的创建及调用方法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容