长寿网站制作,北京好用的h5建站,中企网站建设,在线做网站 自动生成手机版文章目录 一、游戏运行效果二、代码实现2.1 项目搭建2.2 加载我方坦克2.3 加载敌方坦克2.4 添加爆炸效果2.5 坦克大战之音效处理 三、完整代码 一、游戏运行效果
二、代码实现 坦克大战游戏 2.1 项目搭建
本游戏主要分为两个对象#xff0c;分别是我方坦克和敌方坦克。用户可… 文章目录 一、游戏运行效果二、代码实现2.1 项目搭建2.2 加载我方坦克2.3 加载敌方坦克2.4 添加爆炸效果2.5 坦克大战之音效处理 三、完整代码 一、游戏运行效果
二、代码实现 坦克大战游戏 2.1 项目搭建
本游戏主要分为两个对象分别是我方坦克和敌方坦克。用户可以通过控制我方的坦克来摧毁敌方的坦克保护自己的“家”把所有的敌方坦克消灭完达到胜利。敌方的坦克在初始的时候是默认 5 个的这可以自己设置当然如果我方坦克被敌方坦克的子弹打中游戏结束。从面向对象分析该项目有以下类组成
主类主要包括开始游戏、结束游戏的功能。
class MainGame():def __init__(self):pass# 开始游戏def startGame(self):pass# 结束游戏def endGame(self):pass坦克类主要包括坦克的创建、显示、移动及射击的功能。
class Tank():def __init__(self):pass# 移动def move(self):pass# 射击def shot(self):pass# 展示坦克的方法def displayTank(self):pass我方坦克类继承坦克类主要包括创建、与敌方坦克的碰撞方法。
# 我方坦克
class MyTank(Tank):def __init__(self):pass敌方坦克类继承坦克类主要包括创建、与我方坦克碰撞方法。
# 敌方坦克
class EnemyTank(Tank):def __init__(self):pass子弹类主要包括子弹的创建、显示及移动的功能。
# 子弹类
class Bullet():def __init__(self):pass# 移动def move(self):pass# 展示子弹的方法def displayBullet(self):pass墙壁类主要包括墙壁的创建、显示的功能。
class Wall():def __init__(self):pass# 展示墙壁的方法def displayWall(self):pass爆炸效果类主要展示爆炸效果。
class Explode():def __init__(self):pass# 展示爆炸效果的方法def displayExplode(self):pass音效类主要播放音乐。
class Music():def __init__(self):pass# 播放音乐def play(self):pass显示游戏窗口
在游戏设计的前期要先创建游戏的界面也就是要为所设计的游戏创建一个窗口。 【示例】显示游戏窗口
def startGame(self):# 加载主窗口# 初始化窗口pygame.display.init()# 设置窗口的大小及显示MainGame.window pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])# 设置窗口的标题pygame.display.set_caption(坦克大战1.03)while True:# 给窗口设置填充色MainGame.window.fill(BG_COLOR)pygame.display.update()
MainGame().startGame()运行效果
添加提示文字 在运行代码时会发现创建的窗口没有任何提示。然而在实际中希望窗口提示敌方坦克的数量因此需要在现有窗口进行必须的改进添加敌方坦克数量提示。
# 文字显示
def getTextSuface(self, text):pygame.font.init() # 字体初始化font pygame.font.SysFont(kaiti, 16)# 绘制文字信息textSurface font.render(text, True, TEXT_COLOR)return textSurface2.2 加载我方坦克
通过加载一张图片来表示游戏中的坦克此坦克代表我方坦克完善坦克类。
class Tank():# 添加距离左边left 距离上边topdef __init__(self, left, top):# 保存加载的图片self.images {U: pygame.image.load(img/p1tankU.gif),D: pygame.image.load(img/p1tankD.gif),L: pygame.image.load(img/p1tankL.gif),R: pygame.image.load(img/p1tankR.gif),}# 方向self.direction L# 根据当前图片的方向获取图片 surfaceself.image self.images[self.direction]# 根据图片获取区域self.rect self.image.get_rect()# 设置区域的left 和topself.rect.left leftself.rect.top top添加事件监听
上面创建的坦克还不能动显示不是创建游戏的目的因此要给创建的坦克赋予“生命”。添加事件监听控制上、下、左、右四个方向键实现针对不同的键改变坦克的方向及移动功能点击关闭退出游戏。
实现退出方法
# 结束游戏def endGame(self):print(游戏结束)exit() # 退出游戏坦克类中添加移动开关属性按下上、下、左、右四个方向键修改坦克的方向及开关状态按下关闭键调用关闭方法退出游戏。
# 获取程序期间所有事件(鼠标事件键盘事件)def getEvent(self):# 获取所有事件eventList pygame.event.get()# 遍历事件for event in eventList:# 判断按下的键是关闭还是键盘按下# 如果按的是退出关闭窗口if event.type pygame.QUIT:self.endGame()# 如果是键盘的按下if event.type pygame.KEYDOWN:# 判断按下的是上、下、左、右if event.key pygame.K_LEFT:print(按下左键坦克向左移动)elif event.key pygame.K_RIGHT:print(按下右键坦克向右移动)elif event.key pygame.K_UP:print(按下上键坦克向上移动)elif event.key pygame.K_DOWN:print(按下左键坦克向下移动)按下上、下、左、右之后控制台上会打印对应的信息。
随机生成敌方坦克
初始化敌方坦克随机在不同坐标生成敌方坦克。
# 敌方坦克
class EnemyTank(Tank):def __init__(self, left, top, speed):super(EnemyTank, self).__init__(left, top)# 加载图片集self.images {U: pygame.image.load(img/enemy1U.gif),D: pygame.image.load(img/enemy1D.gif),L: pygame.image.load(img/enemy1L.gif),R: pygame.image.load(img/enemy1R.gif),}# 随机生成方向self.direction self.randDirection()self.image self.images[self.direction] # 根据方向获取图片self.rect self.image.get_rect() # 获取区域self.rect.left, self.rect.top left, top # 对left和top赋值self.speed speed # 速度self.flag True # 坦克移动开关self.step 50 # 敌方坦克步数2.3 加载敌方坦克
在MainGame类中创建敌方坦克 def createEnemyTank(self): # 初始化敌方坦克, 将敌方坦克添加到列表中top 100for i in range(self.enemyTankCount): # 生成指定敌方坦克数量left random.randint(0, 600)speed random.randint(1, 4)enemy EnemyTank(left, top, speed)MainGame.enemyTankList.append(enemy)在敌方坦克类中实现敌方坦克的随机移动 def randMove(self): # 坦克的随机方向移动if self.step 0: # 步数小于0, 随机改变方向self.direction self.randDirection()self.step 50 # 步数复位else:self.move()self.step - 1在开始游戏方法加载敌方坦克
self.creatEnemyTank()我方坦克发射子弹 在子弹类中初始化子弹每个子弹在不同的方向发射会有不同的运动轨迹每个子弹在坦克方向上的不同子弹发射的坐标也会有所不同。需要计算四个不同方向上的子弹发射坐标。 def __init__(self, tank):self.image pygame.image.load(img/enemymissile.gif) # 图片加载self.direction tank.direction # 子弹的方向self.rect self.image.get_rect() # 获取区域if self.direction U: # 子弹的left和top与方向有关self.rect.left tank.rect.left tank.rect.width / 2 - self.rect.width / 2self.rect.top tank.rect.top - self.rect.heightelif self.direction D:self.rect.left tank.rect.left tank.rect.width / 2 - self.rect.width / 2self.rect.top tank.rect.top tank.rect.heightelif self.direction L:self.rect.left tank.rect.left - self.rect.width / 2 - self.rect.width / 2self.rect.top tank.rect.top tank.rect.width / 2 - self.rect.width / 2elif self.direction R:self.rect.left tank.rect.left tank.rect.widthself.rect.top tank.rect.top tank.rect.width / 2 - self.rect.width / 2self.speed 5 # 子弹的速度self.live True # 子弹的状态敌方坦克随机发射子弹
def shot(self):num random.randint(1,1000)if num 20:return Bullet(self)我方法子弹与敌方坦克的碰撞检测 在游戏开发中通常把显示图像的对象叫做精灵 Spire精灵需要有两个属性 image 要 显示的图像rect 图像要显示在屏幕的位置。 在 Pygame 框架中使用 pygame. sprite 模块中的内置函数可以实现碰撞检测。代码如 下
pygame.sprite.collide_rect(first, second) #返回布尔值pygame.sprite.Sprite 是 pygame 精灵的基类一般来说总是需要写一个自己的精灵类继承 pygame.sprite.Sprite。让坦克类、子弹类都继承编写的精灵类。 在子弹类中增加我方子弹碰撞敌方坦克的方法如果发生碰撞修改我方子弹及敌方坦克 live 属性的状态值。
#新增我方子弹碰撞敌方坦克的方法
def hitEnemyTank(self):for eTank in MainGame.EnemyTank_list:if pygame.sprite.collide_rect(eTank,self):self.live FalseeTank.live False2.4 添加爆炸效果
在我方子弹碰撞敌方坦克的方法中如果检测到碰撞产生爆炸类并将爆炸效果添加到爆炸列表。
#新增我方子弹碰撞敌方坦克的方法
def hitEnemyTank(self):for eTank in MainGame.EnemyTank_list:if pygame.sprite.collide_rect(eTank,self):#产生一个爆炸效果explode Explode(eTank)#将爆炸效果加入到爆炸效果列表MainGame.Explode_list.append(explode)self.live FalseeTank.live False我方坦克的消亡 子弹类中新增敌方子弹与我方坦克的碰撞。如果发生碰撞修改敌方子弹、我方坦克的状态及产生爆炸效果。 添加敌方子弹到窗口中时候如果子弹还活着显示子弹、调用子弹移动并判断敌方子弹是否与我方坦克发生碰撞。 def blitEnemyBullet(self): # 循环敌方子弹列表, 并展示for enemyBullet in MainGame.enemyBulletList:if enemyBullet.live:enemyBullet.displayBullet()enemyBullet.move()enemyBullet.enemyBullet_hit_myTank()enemyBullet.hitWall() # 检测敌方坦克子弹是否碰撞else:MainGame.enemyBulletList.remove(enemyBullet)子弹不能穿墙 子弹类中新增方法子弹与墙壁的碰撞如果子弹与墙壁碰撞修改子弹的状态墙壁的生命值减少如果墙壁的生命值小于等于零时候修改墙壁的状态。
坦克不能穿墙 如果坦克与墙壁碰撞则坦克不能继续移动需要修改坦克的坐标为移动之前的。因此在坦克类中新增属性 oldLeft、oldTop 记录移动之前的坐标新增 stay()、hitWalls()方法。 def hitWall(self):for wall in MainGame.WallList: # 循环遍历墙壁列表if pygame.sprite.collide_rect(self, wall): # 检测子弹是否碰撞墙壁self.live False # 修改子弹状态wall.hp - 1 # 碰撞后墙壁生命值减少if wall.hp 0:wall.live False双方坦克之间的碰撞检测 如果我方坦克碰撞到敌方坦克则我方坦克再不能继续移动。同理如果敌方坦克碰撞到 我方坦克也不能继续移动。 在我方坦克类中新增我方坦克与敌方坦克碰撞的方法。
class MyTank(Tank):def __init__(self, left, top):super(MyTank, self).__init__(left, top)def myTank_hit_enemyTank(self):for enemyTank in MainGame.enemyTankList:if pygame.sprite.collide_rect(self, enemyTank):self.stay()我方坦克移动后调用是否与敌方坦克发生碰撞。在敌方坦克类中新增敌方坦克碰撞我方坦克的方法。敌方坦克添加到窗口时候调用是否与我方坦克碰撞。 def blitEnemyBullet(self): # 循环敌方子弹列表, 并展示for enemyBullet in MainGame.enemyBulletList:if enemyBullet.live:enemyBullet.displayBullet()enemyBullet.move()enemyBullet.enemyBullet_hit_myTank()enemyBullet.hitWall() # 检测敌方坦克子弹是否碰撞else:MainGame.enemyBulletList.remove(enemyBullet)2.5 坦克大战之音效处理
music 是 pygame 中控制流音频的 pygame 模块音乐模块与 pygame.mixer 紧密相连pygame.mixer 是一个用来处理声音的模块其含义为“混音器”。游戏中对声音的处理一般包括制造声音和播放声音两部分。使用 pygame.mixer.music.load()加载一个播放音乐的文件pygame.mixer.music.play() 开始播放音乐流。
初始化音效类
class Music():def __init__(self, filename):self.filename filenamepygame.mixer.init()pygame.mixer.music.load(self.filename) # 加载音乐# 音乐播放def play(self):pygame.mixer.music.play()music.play()创建坦克时添加音效和在我方坦克发射子弹时添加音效。
三、完整代码
注意因为代码过长且含音频和图片不方便复制可使用下方码云链接直接下载就好啦 https://gitee.com/bow-elongation/tank-battle.git
# 导入模块
import pygame, time, random
from pygame.sprite import Sprite
SCREEN_WIDTH 800 # 宽度
SCREEN_HEIGHT 500 # 高度
BG_COLOR pygame.Color(0, 0, 0) # 颜色
TEXT_COLOR pygame.Color(255, 0, 0) # 字体颜色class Baseitem(Sprite):def __init__(self, color, width, height):pygame.sprite.Sprite.__init__(self)# 坦克类
class MainGame():window Nonemy_tank NoneenemyTankList [] # 敌方坦克列表enemyTankCount 5 # 敌方坦克数量myBulletList [] # 我方坦克子弹列表enemyBulletList [] # 敌方坦克子弹列表explodeList [] # 爆炸效果列表WallList [] # 墙壁列表def __init__(self):pass# 开始游戏def startGame(self):pygame.display.init() # 加载主窗口MainGame.window pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT]) # 设置窗口大小并显示self.createMytank()self.createEnemyTank() # 初始化敌方坦克self.createWall() # 初始化墙壁# 窗口标题设置pygame.display.set_caption(坦克大战)while True:time.sleep(0.02)# 颜色填充MainGame.window.fill(BG_COLOR)# 获取事件self.getEvent()# 绘制文字MainGame.window.blit(self.getTextSuface(敌方坦克剩余数量%d % len(MainGame.enemyTankList)), (10, 10))if MainGame.my_tank and MainGame.my_tank.live:MainGame.my_tank.displayTank() # 展示我方坦克else:del MainGame.my_tank # 删除我方坦克MainGame.my_tank Noneself.blitEnemyTank() # 展示敌方坦克self.blitMyBullet() # 我方坦克子弹self.blitEnemyBullet() # 展示敌方子弹self.blitExplode() # 爆炸效果展示self.blitWall() # 展示墙壁if MainGame.my_tank and MainGame.my_tank.live:if not MainGame.my_tank.stop:MainGame.my_tank.move() # 调用坦克移动方法MainGame.my_tank.hitWall()MainGame.my_tank.myTank_hit_enemyTank()pygame.display.update()def blitWall(self):for wall in MainGame.WallList:if wall.live:wall.displayWall()else:MainGame.WallList.remove(wall)def createWall(self): # 初始化墙壁for i in range(6):wall Wall(i * 145, 220)MainGame.WallList.append(wall)def createMytank(self): # 初始化我方坦克MainGame.my_tank MyTank(350, 300)music Music(img/start.wav) # 创建音乐对象music.play() # 播放音乐def createEnemyTank(self): # 初始化敌方坦克, 将敌方坦克添加到列表中top 100for i in range(self.enemyTankCount): # 生成指定敌方坦克数量left random.randint(0, 600)speed random.randint(1, 4)enemy EnemyTank(left, top, speed)MainGame.enemyTankList.append(enemy)def blitEnemyTank(self):for enemyTank in MainGame.enemyTankList:if enemyTank.live: # 判断敌方坦克状态enemyTank.displayTank()enemyTank.randMove() # 调用子弹移动enemyTank.hitWall()if MainGame.my_tank and MainGame.my_tank.live:enemyTank.enemyTank_hit_myTank()enemyBullet enemyTank.shot() # 敌方坦克射击if enemyBullet: # 判断敌方坦克子弹是否为NoneMainGame.enemyBulletList.append(enemyBullet) # 存储敌方坦克子弹else:MainGame.enemyTankList.remove(enemyTank)def blitExplode(self):for expolde in MainGame.explodeList:if expolde.live:expolde.displayExplode()else:MainGame.explodeList.remove(expolde)def blitMyBullet(self): # 循环我方子弹列表, 并展示for myBullet in MainGame.myBulletList:if myBullet.live: # 判断子弹的状态myBullet.displayBullet()myBullet.move()myBullet.myBullet_hit_enemyTank()myBullet.hitWall() # 检测我方坦克子弹是否碰撞else:MainGame.myBulletList.remove(myBullet)def blitEnemyBullet(self): # 循环敌方子弹列表, 并展示for enemyBullet in MainGame.enemyBulletList:if enemyBullet.live:enemyBullet.displayBullet()enemyBullet.move()enemyBullet.enemyBullet_hit_myTank()enemyBullet.hitWall() # 检测敌方坦克子弹是否碰撞else:MainGame.enemyBulletList.remove(enemyBullet)# 结束游戏def endGame(self):print(游戏结束)exit() # 退出游戏# 文字显示def getTextSuface(self, text):pygame.font.init() # 字体初始化font pygame.font.SysFont(kaiti, 16)# 绘制文字信息textSurface font.render(text, True, TEXT_COLOR)return textSurface# 事件获取def getEvent(self):# 获取所有事件for event in pygame.event.get():if event.type pygame.QUIT:# 退出游戏self.endGame()# 键盘按键if event.type pygame.KEYDOWN:if not MainGame.my_tank: # 当我方坦克不存在时, 按下Esc键重生if event.key pygame.K_ESCAPE:self.createMytank()if MainGame.my_tank and MainGame.my_tank.live:# 上、下、左、右键的判断if event.key pygame.K_LEFT:MainGame.my_tank.direction LMainGame.my_tank.stop Falseprint(左键, 坦克向左移动)elif event.key pygame.K_RIGHT:MainGame.my_tank.direction RMainGame.my_tank.stop Falseprint(右键, 坦克向右移动)elif event.key pygame.K_UP:MainGame.my_tank.direction UMainGame.my_tank.stop Falseprint(上键, 坦克向上移动)elif event.key pygame.K_DOWN:MainGame.my_tank.direction DMainGame.my_tank.stop Falseprint(下键, 坦克向下移动)elif event.key pygame.K_SPACE:print(发射子弹)if len(MainGame.myBulletList) 3: # 可以同时发射子弹数量的上限myBullet Bullet(MainGame.my_tank)MainGame.myBulletList.append(myBullet)music Music(img/fire.wav)music.play()# 松开键盘, 坦克停止移动if event.type pygame.KEYUP:# 只有松开上、下、左、右键时坦克才停止, 松开空格键坦克不停止if event.key pygame.K_UP or event.key pygame.K_DOWN or event.key pygame.K_LEFT or event.key pygame.K_RIGHT:if MainGame.my_tank and MainGame.my_tank.live:MainGame.my_tank.stop True# 坦克类
class Tank(Baseitem):def __init__(self, left, top):# 保存加载的图片self.images {U: pygame.image.load(img/p1tankU.gif),D: pygame.image.load(img/p1tankD.gif),L: pygame.image.load(img/p1tankL.gif),R: pygame.image.load(img/p1tankR.gif),}self.direction L # 方向self.image self.images[self.direction] # 根据图片方向获取图片self.rect self.image.get_rect() # 根据图片获取区域self.rect.left, self.rect.top left, topself.speed 5 # 移动速度self.stop True # 坦克移动开关self.live Trueself.OldLeft self.rect.leftself.OldTop self.rect.top# 移动def move(self):self.OldLeft self.rect.leftself.OldTop self.rect.top# 判断坦克方向进行移动if self.direction L:if self.rect.left 0:self.rect.left - self.speedelif self.direction U:if self.rect.top 0:self.rect.top - self.speedelif self.direction D:if self.rect.top self.rect.height SCREEN_HEIGHT:self.rect.top self.speedelif self.direction R:if self.rect.left self.rect.height SCREEN_WIDTH:self.rect.left self.speed# 射击def shot(self):return Bullet(self)def stay(self):self.rect.left self.OldLeftself.rect.top self.OldTopdef hitWall(self):for wall in MainGame.WallList:if pygame.sprite.collide_rect(self, wall):self.stay()# 展示坦克的方法def displayTank(self):# 获取展示对象self.image self.images[self.direction]# 调用blit展示MainGame.window.blit(self.image, self.rect)# 我方坦克
class MyTank(Tank):def __init__(self, left, top):super(MyTank, self).__init__(left, top)def myTank_hit_enemyTank(self):for enemyTank in MainGame.enemyTankList:if pygame.sprite.collide_rect(self, enemyTank):self.stay()# 敌方坦克
class EnemyTank(Tank):def __init__(self, left, top, speed):super(EnemyTank, self).__init__(left, top)# 加载图片集self.images {U: pygame.image.load(img/enemy1U.gif),D: pygame.image.load(img/enemy1D.gif),L: pygame.image.load(img/enemy1L.gif),R: pygame.image.load(img/enemy1R.gif),}# 随机生成方向self.direction self.randDirection()self.image self.images[self.direction] # 根据方向获取图片self.rect self.image.get_rect() # 获取区域self.rect.left, self.rect.top left, top # 对left和top赋值self.speed speed # 速度self.flag True # 坦克移动开关self.step 50 # 敌方坦克步数def enemyTank_hit_myTank(self):if pygame.sprite.collide_rect(self, MainGame.my_tank):self.stay()def randDirection(self):nums random.randint(1, 4) # 生成1~4的随机整数if nums 1:return Uelif nums 2:return Delif nums 3:return Lelif nums 4:return Rdef randMove(self): # 坦克的随机方向移动if self.step 0: # 步数小于0, 随机改变方向self.direction self.randDirection()self.step 50 # 步数复位else:self.move()self.step - 1def shot(self): # 重写shot方法num random.randint(1, 100)if num 10:return Bullet(self)# 子弹类
class Bullet(Baseitem):def __init__(self, tank):self.image pygame.image.load(img/enemymissile.gif) # 图片加载self.direction tank.direction # 子弹的方向self.rect self.image.get_rect() # 获取区域if self.direction U: # 子弹的left和top与方向有关self.rect.left tank.rect.left tank.rect.width / 2 - self.rect.width / 2self.rect.top tank.rect.top - self.rect.heightelif self.direction D:self.rect.left tank.rect.left tank.rect.width / 2 - self.rect.width / 2self.rect.top tank.rect.top tank.rect.heightelif self.direction L:self.rect.left tank.rect.left - self.rect.width / 2 - self.rect.width / 2self.rect.top tank.rect.top tank.rect.width / 2 - self.rect.width / 2elif self.direction R:self.rect.left tank.rect.left tank.rect.widthself.rect.top tank.rect.top tank.rect.width / 2 - self.rect.width / 2self.speed 5 # 子弹的速度self.live True # 子弹的状态# 移动def move(self):if self.direction U:if self.rect.top 0:self.rect.top - self.speedelse:self.live False # 修改子弹的状态elif self.direction R:if self.rect.left self.rect.width SCREEN_WIDTH:self.rect.left self.speedelse:self.live False # 修改子弹的状态elif self.direction D:if self.rect.top self.rect.height SCREEN_HEIGHT:self.rect.top self.speedelse:self.live False # 修改子弹的状态elif self.direction L:if self.rect.left 0:self.rect.left - self.speedelse:self.live False # 修改子弹的状态def hitWall(self):for wall in MainGame.WallList: # 循环遍历墙壁列表if pygame.sprite.collide_rect(self, wall): # 检测子弹是否碰撞墙壁self.live False # 修改子弹状态wall.hp - 1 # 碰撞后墙壁生命值减少if wall.hp 0:wall.live False# 子弹展示def displayBullet(self):# 将图片加载到窗口MainGame.window.blit(self.image, self.rect)def myBullet_hit_enemyTank(self):for enemyTank in MainGame.enemyTankList:if pygame.sprite.collide_rect(enemyTank, self):enemyTank.live Falseself.live Falseexplode Explode(enemyTank)MainGame.explodeList.append(explode)def enemyBullet_hit_myTank(self):if MainGame.my_tank and MainGame.my_tank.live:if pygame.sprite.collide_rect(MainGame.my_tank, self):explode Explode(MainGame.my_tank) # 爆炸对象MainGame.explodeList.append(explode) # 将爆炸对象添加到爆炸列表中self.live False # 修改敌方子弹的状态MainGame.my_tank.live False # 我方坦克的状态# 墙壁类
class Wall():def __init__(self, left, top):self.image pygame.image.load(img/steels.gif) # 加载墙壁图片self.rect self.image.get_rect() # 获取区域self.rect.left, self.rect.top left, top # 设置left, topself.live True # 存活状态self.hp 3 # 设置墙壁生命值# 展示墙壁def displayWall(self):MainGame.window.blit(self.image, self.rect)# 爆炸类
class Explode():def __init__(self, tank):self.rect tank.rectself.images [pygame.image.load(img/blast0.gif),pygame.image.load(img/blast1.gif),pygame.image.load(img/blast2.gif),pygame.image.load(img/blast3.gif),pygame.image.load(img/blast4.gif),]self.step 0self.image self.images[self.step]self.live True# 爆炸效果def displayExplode(self):if self.step len(self.images):self.image self.images[self.step]self.step 1MainGame.window.blit(self.image, self.rect) # 添加到主窗口else:self.live Falseself.step 0# 音效类
class Music():def __init__(self, filename):self.filename filenamepygame.mixer.init()pygame.mixer.music.load(self.filename) # 加载音乐# 音乐播放def play(self):pygame.mixer.music.play()if __name__ __main__:MainGame().startGame()