""" 坦克大战的需求 1.项目中有那些类 2.类中有哪些方法 1.坦克类 射击 移动类 显示坦克的方法 2.子弹类 移动 显示子弹的方法 3.墙壁类 属性: 是否可以通过 4.爆炸效果类 显示爆炸效果 5.音效类 播放音乐 6.主类 开始游戏 结束游戏 新增功能:加载主窗口 """ #导入pygame模块,time模块,random模块 import pygame,time,random BG_COLOR=pygame.Color(255,255,255) TEXT_COlOR = pygame.Color(255,0,0) SCREEN_HEIGHT=500 SCREEN_WIDTH=700 #主类 class mainGame(): window=None my_tank=None enemyTankList=[] enemyTankCount=5 def __init__(self): pass #开始游戏 def startGame(self): #初始化窗口 pygame.display.init() #设置窗口的大小以及显示 mainGame.window = pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HEIGHT]) #初始化我方坦克 mainGame.my_tank=tank(SCREEN_WIDTH/2,SCREEN_HEIGHT/2) self.creatEnemyTank() pygame.display.set_caption("坦克大战1.0") while True: time.sleep(0.02) #设置窗口的填充色 mainGame.window.fill(BG_COLOR) self.getEvent() mainGame.window.blit(self.getTextFont("剩余坦克数量{}".format(6)),(10,10)) #调用坦克显示的方法 mainGame.my_tank.displayTank() self.blitEnemyTank() if not mainGame.my_tank.stop: mainGame.my_tank.move() pygame.display.update() def creatEnemyTank(self): top = 100 for i in range(5): left = random.randint(0,600) speed = random.randint(1,7) enemy=enemytank(left,top,speed) mainGame.enemyTankList.append(enemy) def blitEnemyTank(self): for enemytank in mainGame.enemyTankList: enemytank.displayTank() 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: 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("发射子弹") if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_UP or event.key == pygame.K_DOWN: mainGame.my_tank.stop = True def getTextFont(self,text): pygame.font.init() font = pygame.font.SysFont('华文行楷',18) text_surface=font.render(text,True,TEXT_COlOR) return text_surface class tank(): #添加具体位置 def __init__(self,left,top): #保存加载的图片 self.imags={ "U":pygame.image.load("imags/p1tankU.gif"), "D":pygame.image.load("imags/p1tankD.gif"), "L": pygame.image.load("imags/p1tankL.gif"), "R": pygame.image.load("imags/p1tankR.gif") } #方向 self.direction = "U" #根据图片的方向获取图片 self.image = self.imags[self.direction] #根据图片获取矩形区域 self.rect = self.image.get_rect() self.rect.left = left self.rect.top = top #速度决定快慢 self.speed = 5 #坦克移动的开关 self.stop = True def move(self): if self.direction == "U": if self.rect.top>0: self.rect.top -= self.speed elif self.direction == "D": if self.rect.top+self.rect.height<SCREEN_HEIGHT: self.rect.top += self.speed elif self.direction == "R": if self.rect.left+self.rect.height<SCREEN_WIDTH: self.rect.left += self.speed elif self.direction == "L": if self.rect.left>0: self.rect.left -= self.speed def shot(self): pass def displayTank(self): #调用blit方法展示 self.image = self.imags[self.direction] mainGame.window.blit(self.image,self.rect) class enemytank(tank): def __init__(self,left,top,speed): self.imags={ "U":pygame.image.load("imags/enemytankU.gif"), "D": pygame.image.load("imags/enemytankD.gif"), "L": pygame.image.load("imags/enemytankL.gif"), "R": pygame.image.load("imags/enemytankR.gif") } self.direction = self.randomDirection() self.image = self.imags[self.direction] self.rect = self.image.get_rect() self.left = left self.top = top self.speed = speed self.flag = True def randomDirection(self): a = random.randint(1,4) if a == 1: return "U" elif a == 2: return "D" elif a== 3: return "L" elif a== 4: return "R" if __name__=="__main__": mainGame().startGame()
老师,不知到为什么我的地方坦克一直显示在左上角,而且一直只有一个