坦克大战3
1.游戏初始化
def run_game():
pygame.init()
pygame.mixer.init()
view_manager = ViewManager()
screen = pygame.display.set_mode((view_manager.screen_width,view_manager.screen_height))
pygame.display.set_caption('坦克大战')
pv.menus = Menu(view_manager,screen)
gf.game_start(view_manager,screen)
clock = pygame.time.Clock()
while(True):
clock.tick(36)
gf.check_events(screen,view_manager,pv.player)
gf.update_screen(screen,view_manager,pv.player)
pygame.display.flip()
run_game()
2.加载资源类
class ViewManager:
"""加载所有游戏图片,声音等资源文件"""
def __init__(self):
self.screen_width = 1200
self.screen_height = 800
self.font=[]
self.font.append(pygame.font.Font('res/font/msyhbd.ttf', 36))
self.font.append(pygame.font.Font('res/font/msyh.ttf', 24))
self.sounds=[]
self.sounds.append(pygame.mixer.Sound('res/sound/fire.wav'))
self.sounds.append(pygame.mixer.Sound('res/sound/bomb.wav'))
self.menuback=[]
self.menuback.append(pygame.image.load('res/images/map/menuback.jpg'))
self.menuback.append(pygame.image.load('res/images/map/failureback.jpg'))
self.menu=[]
self.menu.append(pygame.image.load('res/images/menu/btn_start.png'))
self.menu.append(pygame.image.load('res/images/menu/btn_restart.png'))
self.map=[]
self.map.append(pygame.image.load('res/images/map/0.jpg'))
self.map.append(pygame.image.load('res/images/map/1.jpg'))
self.player_body = []
self.player_body.append(pygame.image.load('res/images/player/0/up.png'))
self.player_body.append(pygame.image.load('res/images/player/0/down.png'))
self.player_body.append(pygame.image.load('res/images/player/0/left.png'))
self.player_body.append(pygame.image.load('res/images/player/0/right.png'))
self.monster_body = []
self.monster_body.append(pygame.image.load('res/images/monster/0/up.png'))
self.monster_body.append(pygame.image.load('res/images/monster/0/down.png'))
self.monster_body.append(pygame.image.load('res/images/monster/0/left.png'))
self.monster_body.append(pygame.image.load('res/images/monster/0/right.png'))
self.bullet = []
self.bullet.append(pygame.image.load('res/images/bullet_1.png'))
self.bullet.append(pygame.image.load('res/images/bullet_2.png'))
self.bomb = []
self.bomb.append(pygame.image.load('res/images/bomb_1.png'))
self.bomb.append(pygame.image.load('res/images/bomb_2.png'))
self.bomb.append(pygame.image.load('res/images/bomb_3.png'))
self.bomb.append(pygame.image.load('res/images/bomb_4.png'))
self.bomb.append(pygame.image.load('res/images/bomb_5.png'))
self.bomb.append(pygame.image.load('res/images/bomb_6.png'))
3.菜单
class Menu:
"""菜单画面"""
def __init__(self,view_manager,screen):
self.view = view_manager
self.scr = screen
rect = self.view.menu[0].get_rect()
lx = int(self.view.screen_width / 2 - rect.width / 2)
ly = int(self.view.screen_height / 3)
width = rect.width
height = rect.height
self.btn_start_rect = (lx,ly,width,height)
self.btn_restart_rect=(lx,ly,width,height)
'''绘制开始菜单'''
def start(self):
self.scr.blit(self.view.menuback[0],(0,0))
self.scr.blit(self.view.menu[0],(self.btn_start_rect[0],self.btn_start_rect[1]))
'''处于开始按钮'''
def isin_start_btn(self,p):
x,y=p
return gf.inrect(x,y,self.btn_start_rect)
'''绘制失败菜单'''
def gameover(self):
self.scr.blit(self.view.menuback[1],(0,0))
self.scr.blit(self.view.menu[1],(self.btn_start_rect[0],self.btn_start_rect[1]))
'''处于失败再来一次按钮'''
def isin_restart_btn(self,p):
x,y=p
return gf.inrect(x,y,self.btn_restart_rect)
4.创建玩家坦克,敌对坦克,战斗场景
def game_start(view_manager,screen):
pv.lastmakemonstersnum-=1
if pv.lastmakemonstersnum <= 0:
pv.lastmakemonstersnum = 1
pv.keydownnum = 0
pv.player = Player(view_manager,screen)
pv.monsters = []
pv.fire = Fire(view_manager,screen)
5.处理事件
def check_events(screen,view_manager,player):
'''响应按键和鼠标事件'''
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
return
if pv.runstate == pv.RUN_STATE_MENU:
if event.type == pygame.MOUSEBUTTONUP:
mp = pygame.mouse.get_pos()
print(mp)
if pv.menus.isin_start_btn(mp) == True:
pv.runstate = pv.RUN_STATE_RUN
return
if pv.runstate == pv.RUN_STATE_OVER:
if event.type == pygame.MOUSEBUTTONUP:
mp = pygame.mouse.get_pos()
print(mp)
if pv.menus.isin_restart_btn(mp) == True:
game_start(view_manager,screen)
pv.gatenum-=1
pv.runstate = pv.RUN_STATE_RUN
return
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
player.fire(screen,view_manager)
if event.key == pygame.K_UP:
player.move = pv.MOVE_UP
player.lastmove = pv.MOVE_UP
pv.keydownnum+=1
if event.key == pygame.K_DOWN:
player.move = pv.MOVE_DOWN
player.lastmove = pv.MOVE_DOWN
pv.keydownnum+=1
if event.key == pygame.K_LEFT:
player.move = pv.MOVE_LEFT
player.lastmove = pv.MOVE_LEFT
pv.keydownnum+=1
if event.key == pygame.K_RIGHT:
player.move = pv.MOVE_RIGHT
player.lastmove = pv.MOVE_RIGHT
pv.keydownnum+=1
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
pv.keydownnum-=1
if event.key == pygame.K_DOWN:
pv.keydownnum-=1
if event.key == pygame.K_LEFT:
pv.keydownnum-=1
if event.key == pygame.K_RIGHT:
pv.keydownnum-=1
if pv.keydownnum <= 0 or pv.keydownnum > 4 :
pv.keydownnum = 0
player.move = pv.MOVE_STAND
6.更新游戏画面
def update_screen(screen,view_manager,player):
'''处理更新游戏界面的方法'''
'''开始菜单'''
if pv.runstate == pv.RUN_STATE_MENU:
pv.menus.start()
return
'''战队失败'''
if pv.runstate == pv.RUN_STATE_OVER:
pv.menus.gameover()
return
'''战斗场景'''
if pv.runstate == pv.RUN_STATE_RUN:
pv.fire.show(view_manager,screen,player,pv.monsters)
return
python坦克大战(4)玩家坦克和敌对坦克