tank

筅森魡賤 提交于 2019-12-03 01:35:41
''' 新增功能: 优化:1.如果子弹碰到墙壁,让子弹消失 2.最多可以发射3颗子弹,不能一直发射 ''' #导入pygame模块 import pygame,time,random SCREEN_WIDTH=700 SCREEN_HEIGHT=500 BG_COLOR=pygame.Color(0,0,0) TEXT_COLOR=pygame.Color(255,0,0) class MainGame(): window=None my_tank=None #存储敌方坦克的列表 enemyTankList=[] #定义敌方坦克的数量 enemyTankCount=5 #存储我方子弹的列表 myBulletList=[] def __init__(self): pass #开始游戏 def startGame(self): #加载主窗口 #初始化窗口 pygame.display.init() #设置窗口的大小及显示 MainGame.window=pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HEIGHT]) #初始化我方坦克 MainGame.my_tank=Tank(350,250) #初始化敌方坦克,并将敌方坦克添加到列表中 self.createEnemyTank() #设置窗口的标题 pygame.display.set_caption('坦克大战1.03') while True: #使用坦克移动的速度慢一点 time.sleep(0.02) #给窗口设置填充色 MainGame.window.fill(BG_COLOR) #获取事件 self.getEvent() #绘制文字 MainGame.window.blit(self.getTextSuface('敌方坦克剩余数量%d'%len(MainGame.enemyTankList)),(10,10)) #调用坦克显示的方法 MainGame.my_tank.displayTank() #循环遍历敌方坦克列表,展示敌方坦克 self.blitEnemyTank() #循环遍历显示我方坦克的子弹 self.blitMyBullet() #调用移动方法 #如果坦克的开关是开启,才可以移动 if not MainGame.my_tank.stop: MainGame.my_tank.move() pygame.display.update() # 初始化敌方坦克,并将敌方坦克添加到列表中 def createEnemyTank(self): top=100 #循环生成敌方坦克 for i in range(MainGame.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: enemyTank.displayTank() enemyTank.randMove() #循环遍历我方子弹存储列表 def blitMyBullet(self): for myBullet in MainGame.myBulletList: #判断当前的子弹是否是活着状态,如果是则进行显示及移动, if myBullet.live: myBullet.displayBullet() # 调用子弹的移动方法 myBullet.move() # 否则在列表中删除 else: MainGame.myBulletList.remove(myBullet) #结束游戏 def endGame(self): print('谢谢使用,欢迎再次使用') exit() #左上角文字的绘制 def getTextSuface(self,text): #初始化字体模块 pygame.font.init() #查看所有的字体名称 # print(pygame.font.get_fonts()) #获取字体Font对象 font=pygame.font.SysFont('kaiti',18) #绘制文字信息 textSurface=font.render(text,True,TEXT_COLOR) return textSurface #获取事件 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: #切换方向 MainGame.my_tank.direction='L' #修改坦克的开关状态 MainGame.my_tank.stop=False # MainGame.my_tank.move() print('按下左键,坦克向左移动') elif event.key == pygame.K_RIGHT: #切换方向 MainGame.my_tank.direction='R' #修改坦克的开关状态 MainGame.my_tank.stop=False # MainGame.my_tank.move() print('按下右键,坦克向右移动') elif event.key == pygame.K_UP: #切换方向 MainGame.my_tank.direction='U' #修改坦克的开关状态 MainGame.my_tank.stop=False # MainGame.my_tank.move() print('按下上键,坦克向上移动') elif event.key == pygame.K_DOWN: #切换方向 MainGame.my_tank.direction='D' #修改坦克的开关状态 MainGame.my_tank.stop=False # MainGame.my_tank.move() print('按下左键,坦克向下移动') elif event.key == pygame.K_SPACE: print('发射子弹') #如果当前我方子弹列表的大小 小于等于3时候才可以创建 if len(MainGame.myBulletList)0: self.rect.left -= self.speed elif self.direction == 'U': if self.rect.top>0: self.rect.top -= self.speed elif self.direction == 'D': if self.rect.top+self.rect.height0: self.rect.top-=self.speed else: #修改子弹的状态 self.live=False elif self.direction == 'R': if self.rect.left+self.rect.width0: self.rect.left-=self.speed else: #修改子弹的状态 self.live=False #展示子弹的方法 def displayBullet(self): #将图片surface加载到窗口 MainGame.window.blit(self.image,self.rect) 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 if __name__=='__main__': MainGame().startGame() # MainGame().getTextSuface()
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!