From 2083d33b39562b9c22da5f0d651560f6b070b3e1 Mon Sep 17 00:00:00 2001 From: Cooper Date: Fri, 10 Dec 2021 13:32:42 +0000 Subject: [PATCH 1/3] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20Plan?= =?UTF-8?q?ewar.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Planewar.py | 684 ---------------------------------------------------- 1 file changed, 684 deletions(-) delete mode 100644 Planewar.py diff --git a/Planewar.py b/Planewar.py deleted file mode 100644 index d4c8259..0000000 --- a/Planewar.py +++ /dev/null @@ -1,684 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Created on Tue Nov 16 21:31:30 2021 - -@author: angelshare -""" - -import pygame -import time -import random -import pickle - -width = 901 -height = 897 -score = 0 -enemy_list = [] -bullet_list = [] -supply_list = [] -horizontal_speed = 3 -vertical_speed = 3 - -# game status -start = 0 -restart = -1 - -main_menu = 1 -newgame_menu = 2 -loadgame_menu = 3 -settings_menu = 4 -volume_menu = 5 -gamelevel_menu = 6 -end_menu = 7 - -game_status = main_menu -class Base(object): - """所有类的基类""" - - def __init__(self, screen_temp, x, y, image_name): - self.x = x - self.y = y - self.screen = screen_temp - self.image = pygame.image.load(image_name).convert_alpha() - self.w = self.image.get_rect().size[0] - self.h = self.image.get_rect().size[1] - - -class BasePlane(Base): - """飞机基类""" - global bullet_list - global enemy_list - global width, height - - def __init__(self, plane_type, screen_temp, x, y, image_name, picture_num, HP_temp, authority): - Base.__init__(self, screen_temp, x, y, image_name) # plane_type飞机类型 - self.bullet_list = [] # 存储发射出去的子弹的引用 - self.plane_type = plane_type # 飞机类型标示 - self.hp = HP_temp # 飞机hp - self.authority = authority - self.time = 0 - # self.fire_bullet_count = 0#飞机已发射子弹计数 - - def display(self): - global score - if self.hp > 0: - self.screen.blit(self.image, (self.x, self.y)) - self.hit() - else: - if self.time < 100: - explode_image = pygame.image.load('image/explode/explode2.png').convert_alpha() - self.screen.blit(self.image, (self.x, self.y)) - self.screen.blit(explode_image, (self.x, self.y)) - self.time += 1 - else: - if self.authority == 'enemy' and self.hp <= 0: - enemy_list.remove(self) - score += 1 - for item in self.bullet_list: - if not item.judge(): - self.bullet_list.remove(item) - - def hit(self): - if bullet_list and self.hp: - for bullet in bullet_list: - if bullet.authority != self.authority: - if bullet.x < self.x + self.w and bullet.x > self.x and bullet.y < self.y + self.h and bullet.y > self.y: - self.hp -= bullet.damage - bullet.damage = 0 - bullet.visible = False - - def pos_check(self): - if self.x < 0: - self.x = self.w - elif self.x > width: - self.x = 0 - if self.authority == 'player': - if self.y < 0: - self.y = 0 - elif self.y > height - self.h: - self.y = height - self.h - if self.authority == 'enemy' and self.y > height: - enemy_list.remove(self) - - -class EnemyPlane(BasePlane): - def __init__(self, screen_temp): - random_num_x = random.randint(12, 418) - random_num_y = random.randint(-50, -40) - self.direction = "left" - BasePlane.__init__(self, 0, screen_temp, random_num_x, random_num_y, "image/enemyplane/enemyplane1.png", 4, 1, "enemy") - - def move(self): - self.pos_check() - self.fire() - if self.hp > 0: - if self.direction == 'right': - self.x += 1 - elif self.direction == 'left': - self.x -= 1 - if self.x > 430: - self.direction = 'left' - elif self.x < 0: - self.direction = 'right' - self.y += 3 - - def fire(self): - if len(self.bullet_list) != 0: - if self.y - 14 - 80 > self.bullet_list[-1].y: - self.bullet_list.append(Bullet(self.screen, self.x, self.y + 60, 'enemy')) - else: - self.bullet_list.append(Bullet(self.screen, self.x, self.y + 60, 'enemy')) - - -class PlayerPlane(BasePlane): - global supply_size - def __init__(self, screen_temp, player_no): - #x = self.screen.get_width()/2 # 默认玩家出现在最下面最中间 - #y = self.screen.get_height() - x = 400 - y = 200 - BasePlane.__init__(self, 3, screen_temp, x, y, "image/plane/plane1.png", 4, 10, "player") #super().__init__() - self.player_no = player_no - self.level = 1 - self.exp = 0 - self.hp_amount = 100 - self.move_dict = {'horizontal': 0, 'vertical': 0, 'space': 0} - - def levelup(self): - self.level += 1 - - def move(self, horizontal_speed, vertical_speed): - self.pos_check() - if self.move_dict['horizontal'] != 0 and self.move_dict['vertical'] != 0: - self.x += horizontal_speed * self.move_dict['horizontal'] - self.y += vertical_speed * self.move_dict['vertical'] - elif self.move_dict['horizontal'] != 0: - self.x += horizontal_speed * self.move_dict['horizontal'] - elif self.move_dict['vertical'] != 0: - self.y += vertical_speed * self.move_dict['vertical'] - if self.move_dict['space'] == 1: - if len(self.bullet_list) != 0: - if self.y - 14 - 80 > self.bullet_list[-1].y: - self.bullet_list.append(Bullet(self.screen, self.x, self.y, 'player')) - else: - self.bullet_list.append(Bullet(self.screen, self.x, self.y, 'player')) - - -class Bullet(Base): - def __init__(self, screen_temp, x, y, authority): - self.x = x + 40 - self.y = y - 20 - self.screen = screen_temp - self.image = pygame.image.load("image/bullet/bullet2.png") - self.authority = authority - self.damage = 1 - self.visible = True - if self.authority == 'enemy': - self.image = pygame.transform.rotate(self.image, 180) - - def display(self): - if self.visible: - self.screen.blit(self.image, (self.x, self.y)) - - def judge(self): - if 0 < self.y < 797: - return True - else: - return False - - def move(self): - if self.authority == 'player': - self.y -= 8 - elif self.authority == 'enemy': - self.y += 8 - - -class PlayerBullet(Bullet): - global bullet_type - - -class EnemyBullet(Bullet): - global bullet_type - - -class Game(object): - def __init__(self, screen, player_list, enemy_list): - self.player_list = player_list - self.enemy_list = enemy_list - - # 保存游戏 - def save_game(self): - with open('save.dat', 'wb') as f: - pickle.dump(self, f) - - # 读取游戏 - def load_game(self): - with open('save.dat', 'rb+') as f: - model = pickle.load(f) - return model - - -# 标签 -class Label(object): - def __init__(self, screen, x, y, w, h): - self.x = x - self.y = y - self.w = w - self.h = h - self.screen = screen - - def display(self, text, size=32): - font = pygame.font.SysFont('Times New Romans', size) # 设置字体及大小 - textSurf = font.render(text, True, (0, 0, 0)) - textRect = textSurf.get_rect() - textRect.center = ((self.x + (self.w / 2)), (self.y + (self.h / 2))) - self.screen.blit(textSurf, textRect) # 绘制标签 - - -# 按钮 -class Button(object): - def __init__(self, screen, x, y, w, h, text): - self.x = x - self.y = y - self.w = w - self.h = h - self.text = text - self.screen = screen - - def display(self): - mouse_pos = pygame.mouse.get_pos() - if mouse_pos[0] < self.x + self.w and mouse_pos[0] > self.x and mouse_pos[1] < self.y + self.h and mouse_pos[ - 1] > self.y: - pygame.draw.rect(self.screen, (178, 178, 178), - (self.x, self.y, self.w, self.h)) # 鼠标进入按钮,颜色设置为(178,178,178) - else: - pygame.draw.rect(self.screen, (128, 128, 128), - (self.x, self.y, self.w, self.h)) # 鼠标离开按钮,颜色设置为(128,128,128) - font = pygame.font.SysFont('宋体', 32) # 设置字体及大小 - textSurf = font.render(self.text, True, (0, 0, 0)) - textRect = textSurf.get_rect() - textRect.center = ((self.x + (self.w / 2)), (self.y + (self.h / 2))) - self.screen.blit(textSurf, textRect) # 绘制按钮 - - def click(self): - mouse_pos = pygame.mouse.get_pos() - if mouse_pos[0] < self.x + self.w and mouse_pos[0] > self.x and mouse_pos[1] < self.y + self.h and mouse_pos[ - 1] > self.y: - return True - - -class Supply(Base): - def __init__(self, screen_temp, x, y, image_name, supply_type): - super().__init__(screen_temp, x, y, image_name) - - def display(self): - self.screen.blit(self.image, (self.x, self.y)) - - def move(self): - self.y += 1 - - -def sum_bullet(player_list, enemy_list): - global bullet_list - for item in player_list: - bullet_list.extend(item.bullet_list) - for item in enemy_list: - bullet_list.extend(item.bullet_list) - return bullet_list - - -def create_enemy(screen): - global width - global enemy_list - if len(enemy_list) < 5: - enemy_list.append(EnemyPlane(screen)) - - -def game_fail(): - pass - - -def pause(player): - button_list = [Button(player.screen, 160, 200, 160, 100, 'BackToGame'), - Button(player.screen, 160, 300, 160, 100, 'BackToMenu'), - Button(player.screen, 160, 400, 160, 100, 'Save'), - Button(player.screen, 160, 500, 160, 100, 'Exit')] - isPause = True - while isPause: - for item in button_list: - item.display() - for event in pygame.event.get(): - if event.type == pygame.QUIT: - pygame.quit() - elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: - if button_list[0].click(): - isPause = False - break - elif button_list[1].click(): - game_status = main_menu - elif button_list[2].click(): - pass - elif button_list[3].click(): - pygame.quit() - quit() - - elif event.type == event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: - isPause = False - break - controller_num = pygame.joystick.get_count() - if (controller_num != 0): - controller = pygame.joystick.Joystick(0) - controller.init() - if controller.get_button(7): - isPause = False - pygame.display.update() - time.sleep(0.01) - - -def ai_save_data(): - pass - - -# 自动游戏,ai控制移动和开火 -def ai_control(player, event): - '''model = load_model('lstm_300.h5', custom_objects={'r2': r2}) - player.move_dict['horizontal'] = model.predict(test_x)''' - pass - - -# 键盘控制移动和开火 -# 玩家一:WASD+空格 -# 玩家二:方向键+小键盘回车键 -def key_control(player, event): - global isPause - if event.type == pygame.KEYDOWN: - if player: - if player.player_no == 0: - if event.key == pygame.K_a: - player.move_dict['horizontal'] = -1 - if event.key == pygame.K_d: - player.move_dict['horizontal'] = 1 - if event.key == pygame.K_w: - player.move_dict['vertical'] = -1 - if event.key == pygame.K_s: - player.move_dict['vertical'] = 1 - if event.key == pygame.K_SPACE: - player.move_dict['space'] = 1 - elif player.player_no == 1: - if event.key == pygame.K_LEFT: - player.move_dict['horizontal'] = -1 - if event.key == pygame.K_RIGHT: - player.move_dict['horizontal'] = 1 - if event.key == pygame.K_UP: - player.move_dict['vertical'] = -1 - if event.key == pygame.K_DOWN: - player.move_dict['vertical'] = 1 - if event.key == pygame.K_KP_ENTER: - player.move_dict['space'] = 1 - if event.key == pygame.K_ESCAPE: # 按下ESC键暂停游戏 - pause(player) - - elif event.type == pygame.KEYUP and player: - if player.player_no == 0: - if event.key == pygame.K_a: - player.move_dict['horizontal'] = 0 - if event.key == pygame.K_d: - player.move_dict['horizontal'] = 0 - if event.key == pygame.K_w: - player.move_dict['vertical'] = 0 - if event.key == pygame.K_s: - player.move_dict['vertical'] = 0 - if event.key == pygame.K_SPACE: - player.move_dict['space'] = 0 - elif player.player_no == 1: - if event.key == pygame.K_LEFT: - player.move_dict['horizontal'] = 0 - if event.key == pygame.K_RIGHT: - player.move_dict['horizontal'] = 0 - if event.key == pygame.K_UP: - player.move_dict['vertical'] = 0 - if event.key == pygame.K_DOWN: - player.move_dict['vertical'] = 0 - if event.key == pygame.K_KP_ENTER: - player.move_dict['space'] = 0 - - -# 手柄控制移动和开火 -# 左摇杆+A(Xbox)/×(Playstation)/B(Nintendo) -def joystick_control(player, controller): - if abs(controller.get_axis(0)) > 0.1: - player.move_dict['horizontal'] = controller.get_axis(0) - else: - player.move_dict['horizontal'] = 0 - if abs(controller.get_axis(0)) > 0.1: - player.move_dict['vertical'] = controller.get_axis(1) - else: - player.move_dict['vertical'] = 0 - if controller.get_button(0): - player.move_dict['space'] = 1 - else: - player.move_dict['space'] = 0 - if controller.get_button(7): - pause(player) - - -def main(): - global width, height - global score - global enemy_list - global bullet_list - global supply_list - - pygame.init() # 初始化pygame - bg_size = width, height = 512,768 - screen = pygame.display.set_mode(bg_size) # 显示窗口 - pygame.display.set_caption("飞机大战") - - - #创建一个背景图片,路径需做出背景图片放入文件夹中填入路径,haven't finished - background = pygame.image.load("image/background/background1.jpg").convert() - - score_label = Label(screen, width - 120, 0, 120, 30) - pygame.joystick.init() - controller_num = pygame.joystick.get_count() - if controller_num != 0: - controller = [] - for i in range(controller_num): - controller.append(pygame.joystick.Joystick(i)) - controller[i].init() - game_mode = 'single' - game_volume = 2 - button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'New Game'), - Button(screen, width / 2 - 80, 450, 160, 100, 'Continue'), - Button(screen, width / 2 - 80, 550, 160, 100, 'Settings'), - Button(screen, width / 2 - 80, 650, 160, 100, 'Exit')] - pygame.mixer.init() - sound = pygame.mixer.Sound("music/bgm.wav") # 播放 - sound.set_volume(game_volume / 10) # 设置声音 - sound.play() # 播放音乐 - - game_status = main_menu - game_level = 3 - pygame.display.update() - while True: - if game_status is end_menu: - label1 = Label(screen, width / 2 - 120, height / 2 - 200, 240, 120) - label2 = Label(screen, width / 2 - 60, height / 2 - 30, 120, 60) - button1 = Button(screen, width / 2 - 80, height / 2 + 100, 160, 100, 'Restart') - button2 = Button(screen, width / 2 - 80, height / 2 + 250, 160, 100, 'Back') - while True: - if game_status is not end_menu: - break - label1.display('Game Over!', 72) - label2.display('Your Score:' + str(score)) - button1.display() - button2.display() - pygame.display.update() - for event in pygame.event.get(): - if event.type == pygame.QUIT: - pygame.quit() - elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: - if button1.click(): - game_status = start - score = 0 - break - elif button2.click(): - game_status = main_menu - button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'New Game'), - Button(screen, width / 2 - 80, 450, 160, 100, 'Continue'), - Button(screen, width / 2 - 80, 550, 160, 100, 'Settings'), - Button(screen, width / 2 - 80, 650, 160, 100, 'Exit')] - break - screen.blit(background, (0, 0)) - label = Label(screen, width / 2 - 120, height / 2 - 200, 240, 120) - label.display('Plane War', 72) - for button in button_list: - button.display() - for event in pygame.event.get(): - if event.type == pygame.QUIT: - pygame.quit() - elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: - if game_status is main_menu: - if button_list[0].click(): # newgame - button_list.clear() - button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'Single Player'), - Button(screen, width / 2 - 80, 500, 160, 100, 'Double Player'), - Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] - game_status = newgame_menu - continue - elif button_list[1].click(): # load game 未实现 - # game = Game.load_game() - pass - elif button_list[2].click(): # setting - button_list.clear() - button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'Volume'), - Button(screen, width / 2 - 80, 500, 160, 100, 'Level'), - Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] - game_status = settings_menu - continue - elif button_list[3].click(): # exit - pygame.quit() - elif game_status is newgame_menu: - if button_list[0].click(): # single game - game_status = start - game_mode = 'single' - break - elif button_list[1].click(): # double game - game_status = start - game_mode = 'double' - break - elif button_list[2].click(): # back to main menu - button_list.clear() - button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'New Game'), - Button(screen, width / 2 - 80, 450, 160, 100, 'Continue'), - Button(screen, width / 2 - 80, 550, 160, 100, 'Settings'), - Button(screen, width / 2 - 80, 650, 160, 100, 'Exit')] - game_status = main_menu - continue - elif game_status is loadgame_menu: - pass - elif game_status is settings_menu: - if button_list[0].click(): # volume - button_list.clear() - button_list = [Button(screen, width / 2 - 80, 300, 160, 100, "nowVolume:" + str(game_volume)), - Button(screen, width / 2 - 80, 450, 160, 100, 'increase'), - Button(screen, width / 2 - 80, 550, 160, 100, 'decrease'), - Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] - game_status = volume_menu - continue - elif button_list[1].click(): # level - button_list.clear() - button_list = [Button(screen, width / 2 - 80, 300, 160, 100, "nowLevel:" + str(game_level)), - Button(screen, width / 2 - 80, 450, 160, 100, 'increase'), - Button(screen, width / 2 - 80, 550, 160, 100, 'decrease'), - Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] - game_status = gamelevel_menu - continue - elif button_list[2].click(): # back to main menu - button_list.clear() - button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'New Game'), - Button(screen, width / 2 - 80, 450, 160, 100, 'Continue'), - Button(screen, width / 2 - 80, 550, 160, 100, 'Settings'), - Button(screen, width / 2 - 80, 650, 160, 100, 'Exit')] - game_status = main_menu - continue - elif game_status is volume_menu: - if button_list[0].click(): - if game_volume >= 4: - button_list[0].text = "('^`)" - else: - button_list[0].text = "O(^_^)O" - if button_list[1].click(): # increase - if game_volume + 1 <= 5: - game_volume = game_volume + 1 - sound.set_volume(game_volume / 10) - button_list[0].text = "nowVolume:" + str(game_volume) - elif button_list[2].click(): # decrease - if game_volume - 1 >= 0: - game_volume = game_volume - 1 - sound.set_volume(game_volume / 10) - button_list[0].text = "nowVolume:" + str(game_volume) - elif button_list[3].click(): # back - button_list.clear() - button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'Volume'), - Button(screen, width / 2 - 80, 500, 160, 100, 'Level'), - Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] - game_status = settings_menu - continue - elif game_status is gamelevel_menu: - if button_list[0].click(): - if game_level >= 4: - button_list[0].text = "('^`)" - else: - button_list[0].text = "O(^_^)O" - if button_list[1].click(): # increase - if game_level + 1 <= 5: - game_level = game_level + 1 - button_list[0].text = "nowLevel:" + str(game_level) - elif button_list[2].click(): # decrease - if game_level - 1 > 0: - game_level = game_level - 1 - button_list[0].text = "nowLevel:" + str(game_level) - elif button_list[3].click(): # back - button_list.clear() - button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'Volume'), - Button(screen, width / 2 - 80, 500, 160, 100, 'Level'), - Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] - game_status = settings_menu - continue - - if game_status is start: - horizontal_speed = 10 - game_level - vertical_speed = 10 - game_level - print(horizontal_speed) - if game_mode == 'single': - player_list = [PlayerPlane(screen, player_no=0)] - else: - player_list = [PlayerPlane(screen, player_no=0), - PlayerPlane(screen, player_no=1)] - - button_pause_text = "Pause" - game_pause = False - button_pause = Button(screen, width - 120, 30, 120, 30, button_pause_text) - - while True: - if game_status is main_menu: - print("main menu") - break - button_pause = Button(screen, width - 120, 30, 120, 30, button_pause_text) - pygame.display.update() - screen.blit(background, (0, 0)) - button_pause.display() - score_label.display('Score:' + str(score)) - - # Game(screen, player_list, enemy_list) - # Game.load_game() - - for player in player_list: - player.display() - create_enemy(screen) - for enemy in enemy_list: - enemy.display() - enemy.move() - bullet_list = [] - bullet_list = sum_bullet(player_list, enemy_list) - # bullet_del_list = [] - for item in bullet_list: - if item.judge(): - item.display() - item.move() - ''' else: - bullet_del_list.append(item) - for item in bullet_del_list: - bullet_list.remove(item)''' - for event in pygame.event.get(): - if event.type == pygame.QUIT: - pygame.quit() - if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: - if button_pause.click(): - pause(player_list[0]) - break - - for player in player_list: - key_control(player, event) - if player_list[0].hp <= 0: - player_list.clear() - enemy_list.clear() - pygame.display.update() - game_status = end_menu - break - - if controller_num != 0: - joystick_control(player_list[0], controller[0]) - - for player in player_list: - player.move(horizontal_speed, vertical_speed) - time.sleep(0.01) - pygame.display.update() - pygame.display.update() - time.sleep(0.02) - - - -if __name__ == "__main__": - main() -- Gitee From 9a6995977a6ae92eb4a2fc75d68fd8c88b98abd3 Mon Sep 17 00:00:00 2001 From: Cooper Date: Fri, 10 Dec 2021 13:33:24 +0000 Subject: [PATCH 2/3] Add several functions --- Planewar.py | 783 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 783 insertions(+) create mode 100644 Planewar.py diff --git a/Planewar.py b/Planewar.py new file mode 100644 index 0000000..ec2434d --- /dev/null +++ b/Planewar.py @@ -0,0 +1,783 @@ +# -*- coding: utf-8 -*- +""" +Created on Tue Nov 16 21:31:30 2021 + +@author: angelshare +""" + +import pygame +import time +import random +import pickle + +width = 512 +height = 768 +score = 0 +enemy_list = [] +bullet_list = [] +supply_list = [] +horizontal_speed = 3 +vertical_speed = 3 + +# game status +start = 0 +restart = -1 + +main_menu = 1 +newgame_menu = 2 +loadgame_menu = 3 +settings_menu = 4 +volume_menu = 5 +gamelevel_menu = 6 +end_menu = 7 + +game_status = main_menu +class Base(object): + """所有类的基类""" + + def __init__(self, screen_temp, x, y, image_name): + self.x = x + self.y = y + self.screen = screen_temp + self.image = pygame.image.load(image_name).convert_alpha() + self.w = self.image.get_rect().size[0] + self.h = self.image.get_rect().size[1] + + +class BasePlane(Base): + """飞机基类""" + global bullet_list + global enemy_list + global width, height + + def __init__(self, plane_type, screen_temp, x, y, image, picture_num, HP_temp, authority): + Base.__init__(self, screen_temp, x, y, image) # plane_type飞机类型 + self.bullet_list = [] # 存储发射出去的子弹的引用 + self.plane_type = plane_type # 飞机类型标示 + self.hp = HP_temp # 飞机hp + self.authority = authority + self.time = 0 + # self.fire_bullet_count = 0#飞机已发射子弹计数 + self.explode_image = [pygame.transform.scale(pygame.image.load('image/explode/explode1.png').convert_alpha(), (self.w, self.h)), + pygame.transform.scale(pygame.image.load('image/explode/explode2.png').convert_alpha(), (self.w, self.h)), + pygame.transform.scale(pygame.image.load('image/explode/explode3.png').convert_alpha(), (self.w, self.h))] + + def display(self): + global score + if self.hp > 0: + self.screen.blit(self.image, (self.x, self.y)) + self.hit() + else: + if self.time < 10: + self.screen.blit(self.image, (self.x, self.y)) + self.screen.blit(self.explode_image[0], (self.x, self.y)) + self.time += 1 + elif self.time < 20: + self.screen.blit(self.image, (self.x, self.y)) + self.screen.blit(self.explode_image[1], (self.x, self.y)) + self.time += 1 + elif self.time < 30: + self.screen.blit(self.image, (self.x, self.y)) + self.screen.blit(self.explode_image[2], (self.x, self.y)) + self.time += 1 + else: + if self.authority == 'enemy' and self.hp <= 0: + enemy_list.remove(self) + score += 1 + for item in self.bullet_list: + if not item.judge(): + self.bullet_list.remove(item) + + def hit(self): + if bullet_list and self.hp: + for bullet in bullet_list: + if bullet.authority != self.authority: + if bullet.x < self.x + self.w and bullet.x > self.x and bullet.y < self.y + self.h and bullet.y > self.y: + self.hp -= bullet.damage + bullet.damage = 0 + bullet.visible = False + if supply_list and self.hp: + for supply in supply_list: + if self.authority == 'player': + if supply.x < self.x + self.w and supply.x + supply.w > self.x and supply.y < self.y + self.h and supply.y + supply.h > self.y: + self.hp += supply.capacity + if self.hp > self.hp_amount: + self.hp = self.hp_amount + supply.capacity = 0 + supply.visible = False + + def pos_check(self): + if self.x < 0: + self.x = self.w + elif self.x > width: + self.x = 0 + if self.authority == 'player': + if self.y < 0: + self.y = 0 + elif self.y > height - self.h: + self.y = height - self.h + if self.authority == 'enemy' and self.y > height: + enemy_list.remove(self) + + +class EnemyPlane(BasePlane): + def __init__(self, screen_temp): + image_list = ["image/enemyplane/enemyplane1.png", "image/enemyplane/enemyplane2.png", "image/enemyplane/enemyplane3.png"] + random_num_x = random.randint(12, 418) + random_num_y = random.randint(-100, -10) + self.direction = "left" + BasePlane.__init__(self, 0, screen_temp, random_num_x, random_num_y, image_list[random.randint(0, 2)], 4, 1, "enemy") + + def move(self): + self.pos_check() + self.fire() + if self.hp > 0: + if self.direction == 'right': + self.x += 1 + elif self.direction == 'left': + self.x -= 1 + if self.x > 430: + self.direction = 'left' + elif self.x < 0: + self.direction = 'right' + self.y += 3 + + def fire(self): + if len(self.bullet_list) != 0: + if self.y - 14 - 80 > self.bullet_list[-1].y: + self.bullet_list.append(Bullet(self.screen, self.x, self.y + 60, 'enemy')) + else: + self.bullet_list.append(Bullet(self.screen, self.x, self.y + 60, 'enemy')) + +class BossPlane(BasePlane): + def __init__(self, screen_temp): + BasePlane.__init__(self, 0, screen_temp, 0, -100, "image/enemyplane/enemyplane4.png", 4, 20, "enemy") + self.x = width / 2 - self.w / 2 + self.bar = Bar(screen_temp, int(width * 0.1), int(height * 0.1), int(width * 0.8), int(height * 0.02)) + + def move(self): + self.fire() + if self.y < 100: + self.y += 1 + + def fire(self): + if len(self.bullet_list) != 0: + if self.y - 14 + 50 > self.bullet_list[-1].y: + self.bullet_list.append(Bullet(self.screen, self.x, self.y + 60, 'enemy')) + self.bullet_list.append(Bullet(self.screen, self.x + self.w / 2, self.y + 60, 'enemy')) + else: + self.bullet_list.append(Bullet(self.screen, self.x, self.y + 60, 'enemy')) + self.bullet_list.append(Bullet(self.screen, self.x + self.w / 2, self.y + 60, 'enemy')) + +class PlayerPlane(BasePlane): + global supply_size + def __init__(self, screen_temp, x, y, player_no): + self.image_list = ["image/plane/plane1.png", "image/plane/plane2.png", "image/plane/plane3.png", "image/plane/plane4.png"] + BasePlane.__init__(self, 3, screen_temp, x - 40, y - 100, self.image_list[0], 4, 100, "player") #super().__init__() + self.player_no = player_no + self.level = 0 + self.levelup_flag = False + self.levelup_time = 0 + self.exp = 0 + self.hp_amount = 100 + self.move_dict = {'horizontal': 0, 'vertical': 0, 'space': 0} + self.levelup_image = [pygame.transform.scale(pygame.image.load('image/levelup/1.png').convert_alpha(), (self.w, self.h)), + pygame.transform.scale(pygame.image.load('image/levelup/2.png').convert_alpha(), (self.w, self.h)), + pygame.transform.scale(pygame.image.load('image/levelup/3.png').convert_alpha(), (self.w, self.h)), + pygame.transform.scale(pygame.image.load('image/levelup/4.png').convert_alpha(), (self.w, self.h))] + + + def levelup(self): + if(score <= 150): + if int(score / 50) > self.level : + self.level = int(score / 50) + self.levelup_flag = True + self.image = pygame.image.load(self.image_list[self.level]).convert_alpha() + if self.levelup_flag: + if self.levelup_time < 20: + self.screen.blit(self.image, (self.x, self.y)) + self.screen.blit(self.levelup_image[0], (self.x, self.y)) + self.levelup_time += 1 + elif self.levelup_time < 40: + self.screen.blit(self.image, (self.x, self.y)) + self.screen.blit(self.levelup_image[1], (self.x, self.y)) + self.levelup_time += 1 + elif self.levelup_time < 60: + self.screen.blit(self.image, (self.x, self.y)) + self.screen.blit(self.levelup_image[2], (self.x, self.y)) + self.levelup_time += 1 + elif self.levelup_time < 80: + self.screen.blit(self.image, (self.x, self.y)) + self.screen.blit(self.levelup_image[3], (self.x, self.y)) + self.levelup_time += 1 + else: + self.levelup_flag = False + self.levelup_time = 0 + + def move(self, horizontal_speed, vertical_speed): + self.levelup() + self.pos_check() + if self.move_dict['horizontal'] != 0 and self.move_dict['vertical'] != 0: + self.x += horizontal_speed * self.move_dict['horizontal'] + self.y += vertical_speed * self.move_dict['vertical'] + elif self.move_dict['horizontal'] != 0: + self.x += horizontal_speed * self.move_dict['horizontal'] + elif self.move_dict['vertical'] != 0: + self.y += vertical_speed * self.move_dict['vertical'] + if self.move_dict['space'] == 1: + if len(self.bullet_list) != 0: + if self.y - 14 - 80 > self.bullet_list[-1].y: + self.bullet_list.append(Bullet(self.screen, self.x, self.y, 'player')) + else: + self.bullet_list.append(Bullet(self.screen, self.x, self.y, 'player')) + + +class Bullet(Base): + def __init__(self, screen_temp, x, y, authority): + self.x = x + 40 + self.y = y - 20 + self.screen = screen_temp + self.image = pygame.image.load("image/bullet/bullet2.png") + self.authority = authority + self.damage = 1 + self.visible = True + if self.authority == 'enemy': + self.image = pygame.transform.rotate(self.image, 180) + + def display(self): + if self.visible: + self.screen.blit(self.image, (self.x, self.y)) + + def judge(self): + if 0 < self.y < 797: + return True + else: + return False + + def move(self): + if self.authority == 'player': + self.y -= 8 + elif self.authority == 'enemy': + self.y += 8 + +class Supply(Base): + def __init__(self, screen_temp): + random_num_x = random.randint(12, 418) + random_num_y = random.randint(-100, -10) + super().__init__(screen_temp, random_num_x, random_num_y, "image/supply/hpsupply.png") + self.capacity = random.randint(1, 20) + self.visible = True + + def display(self): + if self.visible: + self.screen.blit(self.image, (self.x, self.y)) + + def judge(self): + if self.y < 797: + return True + else: + return False + + def move(self): + self.y += 1 + +class Game(object): + def __init__(self, screen, player_list, enemy_list): + self.player_list = player_list + self.enemy_list = enemy_list + + # 保存游戏 + def save_game(self): + with open('save.dat', 'wb') as f: + pickle.dump(self, f) + + # 读取游戏 + def load_game(self): + with open('save.dat', 'rb+') as f: + model = pickle.load(f) + return model + +# 血条 +class Bar(object): + def __init__(self, screen, x, y, w, h): + self.x = x + self.y = y + self.w = w + self.h = h + self.screen = screen + + def display(self, percent): + pygame.draw.rect(self.screen, (178, 178, 178), (self.x, self.y, self.w, self.h)) + pygame.draw.rect(self.screen, (255, 0, 0), (self.x, self.y, self.w * percent, self.h)) + +# 标签 +class Label(object): + def __init__(self, screen, x, y, w, h): + self.x = x + self.y = y + self.w = w + self.h = h + self.screen = screen + + def display(self, text, size=32): + font = pygame.font.SysFont('Times New Romans', size) # 设置字体及大小 + textSurf = font.render(text, True, (0, 0, 0)) + textRect = textSurf.get_rect() + textRect.center = ((self.x + (self.w / 2)), (self.y + (self.h / 2))) + self.screen.blit(textSurf, textRect) # 绘制标签 + + +# 按钮 +class Button(object): + def __init__(self, screen, x, y, w, h, text): + self.x = x + self.y = y + self.w = w + self.h = h + self.text = text + self.screen = screen + + def display(self): + mouse_pos = pygame.mouse.get_pos() + if mouse_pos[0] < self.x + self.w and mouse_pos[0] > self.x and mouse_pos[1] < self.y + self.h and mouse_pos[ + 1] > self.y: + pygame.draw.rect(self.screen, (178, 178, 178), + (self.x, self.y, self.w, self.h)) # 鼠标进入按钮,颜色设置为(178,178,178) + else: + pygame.draw.rect(self.screen, (128, 128, 128), + (self.x, self.y, self.w, self.h)) # 鼠标离开按钮,颜色设置为(128,128,128) + font = pygame.font.SysFont('宋体', 32) # 设置字体及大小 + textSurf = font.render(self.text, True, (0, 0, 0)) + textRect = textSurf.get_rect() + textRect.center = ((self.x + (self.w / 2)), (self.y + (self.h / 2))) + self.screen.blit(textSurf, textRect) # 绘制按钮 + + def click(self): + mouse_pos = pygame.mouse.get_pos() + if mouse_pos[0] < self.x + self.w and mouse_pos[0] > self.x and mouse_pos[1] < self.y + self.h and mouse_pos[ + 1] > self.y: + return True + +def sum_bullet(player_list, enemy_list): + global bullet_list + for item in player_list: + bullet_list.extend(item.bullet_list) + for item in enemy_list: + bullet_list.extend(item.bullet_list) + return bullet_list + + +def create_enemy(screen): + global enemy_list + if len(enemy_list) < 5: + enemy_list.append(EnemyPlane(screen)) + +def create_supply(screen): + global supply_list + if len(supply_list) < 1: + supply_list.append(Supply(screen)) + +def game_fail(): + pass + + +def pause(player): + button_list = [Button(player.screen, 160, 200, 160, 100, 'BackToGame'), + Button(player.screen, 160, 300, 160, 100, 'BackToMenu'), + Button(player.screen, 160, 400, 160, 100, 'Save'), + Button(player.screen, 160, 500, 160, 100, 'Exit')] + isPause = True + while isPause: + for item in button_list: + item.display() + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: + if button_list[0].click(): + isPause = False + break + elif button_list[1].click(): + game_status = main_menu + elif button_list[2].click(): + pass + elif button_list[3].click(): + pygame.quit() + quit() + + elif event.type == event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: + isPause = False + break + controller_num = pygame.joystick.get_count() + if (controller_num != 0): + controller = pygame.joystick.Joystick(0) + controller.init() + if controller.get_button(7): + isPause = False + pygame.display.update() + time.sleep(0.01) + + +def ai_save_data(): + pass + + +# 自动游戏,ai控制移动和开火 +def ai_control(player, event): + '''model = load_model('lstm_300.h5', custom_objects={'r2': r2}) + player.move_dict['horizontal'] = model.predict(test_x)''' + pass + + +# 键盘控制移动和开火 +# 玩家一:WASD+空格 +# 玩家二:方向键+小键盘回车键 +def key_control(player, event): + global isPause + if event.type == pygame.KEYDOWN: + if player: + if player.player_no == 0: + if event.key == pygame.K_a: + player.move_dict['horizontal'] = -1 + if event.key == pygame.K_d: + player.move_dict['horizontal'] = 1 + if event.key == pygame.K_w: + player.move_dict['vertical'] = -1 + if event.key == pygame.K_s: + player.move_dict['vertical'] = 1 + if event.key == pygame.K_SPACE: + player.move_dict['space'] = 1 + elif player.player_no == 1: + if event.key == pygame.K_LEFT: + player.move_dict['horizontal'] = -1 + if event.key == pygame.K_RIGHT: + player.move_dict['horizontal'] = 1 + if event.key == pygame.K_UP: + player.move_dict['vertical'] = -1 + if event.key == pygame.K_DOWN: + player.move_dict['vertical'] = 1 + if event.key == pygame.K_KP_ENTER: + player.move_dict['space'] = 1 + if event.key == pygame.K_ESCAPE: # 按下ESC键暂停游戏 + pause(player) + + elif event.type == pygame.KEYUP and player: + if player.player_no == 0: + if event.key == pygame.K_a: + player.move_dict['horizontal'] = 0 + if event.key == pygame.K_d: + player.move_dict['horizontal'] = 0 + if event.key == pygame.K_w: + player.move_dict['vertical'] = 0 + if event.key == pygame.K_s: + player.move_dict['vertical'] = 0 + if event.key == pygame.K_SPACE: + player.move_dict['space'] = 0 + elif player.player_no == 1: + if event.key == pygame.K_LEFT: + player.move_dict['horizontal'] = 0 + if event.key == pygame.K_RIGHT: + player.move_dict['horizontal'] = 0 + if event.key == pygame.K_UP: + player.move_dict['vertical'] = 0 + if event.key == pygame.K_DOWN: + player.move_dict['vertical'] = 0 + if event.key == pygame.K_KP_ENTER: + player.move_dict['space'] = 0 + + +# 手柄控制移动和开火 +# 左摇杆+A(Xbox)/×(Playstation)/B(Nintendo) +def joystick_control(player, controller): + if abs(controller.get_axis(0)) > 0.1: + player.move_dict['horizontal'] = controller.get_axis(0) + else: + player.move_dict['horizontal'] = 0 + if abs(controller.get_axis(0)) > 0.1: + player.move_dict['vertical'] = controller.get_axis(1) + else: + player.move_dict['vertical'] = 0 + if controller.get_button(0): + player.move_dict['space'] = 1 + else: + player.move_dict['space'] = 0 + if controller.get_button(7): + pause(player) + + +def main(): + global width, height + global score + global enemy_list + global bullet_list + global supply_list + + pygame.init() # 初始化pygame + bg_size = width, height + screen = pygame.display.set_mode(bg_size) # 显示窗口 + pygame.display.set_caption("飞机大战") + + + #创建一个背景图片,路径需做出背景图片放入文件夹中填入路径 + background = pygame.image.load("image/background/background1.jpg").convert() + + score_label = Label(screen, width - 120, 0, 120, 30) + pygame.joystick.init() + controller_num = pygame.joystick.get_count() + if controller_num != 0: + controller = [] + for i in range(controller_num): + controller.append(pygame.joystick.Joystick(i)) + controller[i].init() + game_mode = 'single' + game_volume = 2 + button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'New Game'), + Button(screen, width / 2 - 80, 450, 160, 100, 'Continue'), + Button(screen, width / 2 - 80, 550, 160, 100, 'Settings'), + Button(screen, width / 2 - 80, 650, 160, 100, 'Exit')] + pygame.mixer.init() + sound = pygame.mixer.Sound("music/bgm.wav") # 播放 + sound.set_volume(game_volume / 10) # 设置声音 + sound.play() # 播放音乐 + + game_status = main_menu + game_level = 3 + pygame.display.update() + while True: + if game_status is end_menu: + label1 = Label(screen, width / 2 - 120, height / 2 - 200, 240, 120) + label2 = Label(screen, width / 2 - 60, height / 2 - 30, 120, 60) + button1 = Button(screen, width / 2 - 80, height / 2 + 100, 160, 100, 'Restart') + button2 = Button(screen, width / 2 - 80, height / 2 + 250, 160, 100, 'Back') + while True: + if game_status is not end_menu: + break + label1.display('Game Over!', 72) + label2.display('Your Score:' + str(score)) + button1.display() + button2.display() + pygame.display.update() + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: + if button1.click(): + game_status = start + score = 0 + break + elif button2.click(): + game_status = main_menu + button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'New Game'), + Button(screen, width / 2 - 80, 450, 160, 100, 'Continue'), + Button(screen, width / 2 - 80, 550, 160, 100, 'Settings'), + Button(screen, width / 2 - 80, 650, 160, 100, 'Exit')] + break + screen.blit(background, (0, 0)) + label = Label(screen, width / 2 - 120, height / 2 - 200, 240, 120) + label.display('Plane War', 72) + for button in button_list: + button.display() + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: + if game_status is main_menu: + if button_list[0].click(): # newgame + button_list.clear() + button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'Single Player'), + Button(screen, width / 2 - 80, 500, 160, 100, 'Double Player'), + Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] + game_status = newgame_menu + continue + elif button_list[1].click(): # load game 未实现 + # game = Game.load_game() + pass + elif button_list[2].click(): # setting + button_list.clear() + button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'Volume'), + Button(screen, width / 2 - 80, 500, 160, 100, 'Level'), + Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] + game_status = settings_menu + continue + elif button_list[3].click(): # exit + pygame.quit() + elif game_status is newgame_menu: + if button_list[0].click(): # single game + game_status = start + game_mode = 'single' + break + elif button_list[1].click(): # double game + game_status = start + game_mode = 'double' + break + elif button_list[2].click(): # back to main menu + button_list.clear() + button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'New Game'), + Button(screen, width / 2 - 80, 450, 160, 100, 'Continue'), + Button(screen, width / 2 - 80, 550, 160, 100, 'Settings'), + Button(screen, width / 2 - 80, 650, 160, 100, 'Exit')] + game_status = main_menu + continue + elif game_status is loadgame_menu: + pass + elif game_status is settings_menu: + if button_list[0].click(): # volume + button_list.clear() + button_list = [Button(screen, width / 2 - 80, 300, 160, 100, "nowVolume:" + str(game_volume)), + Button(screen, width / 2 - 80, 450, 160, 100, 'increase'), + Button(screen, width / 2 - 80, 550, 160, 100, 'decrease'), + Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] + game_status = volume_menu + continue + elif button_list[1].click(): # level + button_list.clear() + button_list = [Button(screen, width / 2 - 80, 300, 160, 100, "nowLevel:" + str(game_level)), + Button(screen, width / 2 - 80, 450, 160, 100, 'increase'), + Button(screen, width / 2 - 80, 550, 160, 100, 'decrease'), + Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] + game_status = gamelevel_menu + continue + elif button_list[2].click(): # back to main menu + button_list.clear() + button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'New Game'), + Button(screen, width / 2 - 80, 450, 160, 100, 'Continue'), + Button(screen, width / 2 - 80, 550, 160, 100, 'Settings'), + Button(screen, width / 2 - 80, 650, 160, 100, 'Exit')] + game_status = main_menu + continue + elif game_status is volume_menu: + if button_list[0].click(): + if game_volume >= 4: + button_list[0].text = "('^`)" + else: + button_list[0].text = "O(^_^)O" + if button_list[1].click(): # increase + if game_volume + 1 <= 5: + game_volume = game_volume + 1 + sound.set_volume(game_volume / 10) + button_list[0].text = "nowVolume:" + str(game_volume) + elif button_list[2].click(): # decrease + if game_volume - 1 >= 0: + game_volume = game_volume - 1 + sound.set_volume(game_volume / 10) + button_list[0].text = "nowVolume:" + str(game_volume) + elif button_list[3].click(): # back + button_list.clear() + button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'Volume'), + Button(screen, width / 2 - 80, 500, 160, 100, 'Level'), + Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] + game_status = settings_menu + continue + elif game_status is gamelevel_menu: + if button_list[0].click(): + if game_level >= 4: + button_list[0].text = "('^`)" + else: + button_list[0].text = "O(^_^)O" + if button_list[1].click(): # increase + if game_level + 1 <= 5: + game_level = game_level + 1 + button_list[0].text = "nowLevel:" + str(game_level) + elif button_list[2].click(): # decrease + if game_level - 1 > 0: + game_level = game_level - 1 + button_list[0].text = "nowLevel:" + str(game_level) + elif button_list[3].click(): # back + button_list.clear() + button_list = [Button(screen, width / 2 - 80, 350, 160, 100, 'Volume'), + Button(screen, width / 2 - 80, 500, 160, 100, 'Level'), + Button(screen, width / 2 - 80, 700, 160, 100, 'Back')] + game_status = settings_menu + continue + + if game_status is start: + horizontal_speed = 10 - game_level + vertical_speed = 10 - game_level + #print(horizontal_speed) + if game_mode == 'single': + player_list = [PlayerPlane(screen, width / 2, height, player_no=0)] + bar_list = [Bar(screen, int(width * 0.1), int(height * 0.9), int(width * 0.8), int(height * 0.02))] + else: + player_list = [PlayerPlane(screen, width / 3, height, player_no=0), + PlayerPlane(screen, width / 3 * 2, height, player_no=1)] + bar_list = [Bar(screen, int(width * 0.1), int(height * 0.9), int(width * 0.35), int(height * 0.02)), + Bar(screen, int(width * 0.55), int(height * 0.9), int(width * 0.35), int(height * 0.02))] + button_pause_text = "Pause" + game_pause = False + button_pause = Button(screen, width - 120, 30, 120, 30, button_pause_text) + boss_num = 0 + + while True: + if game_status is main_menu: + print("main menu") + break + button_pause = Button(screen, width - 120, 30, 120, 30, button_pause_text) + pygame.display.update() + screen.blit(background, (0, 0)) + button_pause.display() + score_label.display('Score:' + str(score)) + + # Game(screen, player_list, enemy_list) + # Game.load_game() + + for i in range(len(player_list)): + player_list[i].display() + bar_list[i].display(player_list[i].hp / player_list[i].hp_amount) + + create_enemy(screen) + create_supply(screen) + if int(score / 100) > boss_num: + enemy_list.append(BossPlane(screen)) + boss_num += 1 + for enemy in enemy_list: + enemy.display() + enemy.move() + if isinstance(enemy, BossPlane): + enemy.bar.display(enemy.hp / 20) + for supply in supply_list: + supply.display() + supply.move() + bullet_list = [] + bullet_list = sum_bullet(player_list, enemy_list) + # bullet_del_list = [] + for item in bullet_list: + if item.judge(): + item.display() + item.move() + for supply in supply_list: + if not supply.judge(): + supply_list.remove(supply) + ''' else: + bullet_del_list.append(item) + for item in bullet_del_list: + bullet_list.remove(item)''' + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: + if button_pause.click(): + pause(player_list[0]) + break + + for player in player_list: + key_control(player, event) + if player_list[0].hp <= 0: + player_list.clear() + enemy_list.clear() + supply_list.clear() + pygame.display.update() + game_status = end_menu + break + + if controller_num != 0: + joystick_control(player_list[0], controller[0]) + + for player in player_list: + player.move(horizontal_speed, vertical_speed) + time.sleep(0.01) + pygame.display.update() + pygame.display.update() + time.sleep(0.02) + +if __name__ == "__main__": + main() -- Gitee From 3e2d8d661bf0a197b1e57838981bfdcf72f57e4a Mon Sep 17 00:00:00 2001 From: Cooper Date: Fri, 10 Dec 2021 13:34:02 +0000 Subject: [PATCH 3/3] Add some images. --- image/levelup/1.png | Bin 0 -> 30090 bytes image/levelup/2.png | Bin 0 -> 28811 bytes image/levelup/3.png | Bin 0 -> 10478 bytes image/levelup/4.png | Bin 0 -> 8446 bytes image/supply/hpsupply.png | Bin 0 -> 9904 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 image/levelup/1.png create mode 100644 image/levelup/2.png create mode 100644 image/levelup/3.png create mode 100644 image/levelup/4.png create mode 100644 image/supply/hpsupply.png diff --git a/image/levelup/1.png b/image/levelup/1.png new file mode 100644 index 0000000000000000000000000000000000000000..97e83a13dff43feef3917af2e9808332f6e8a681 GIT binary patch literal 30090 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 literal 0 HcmV?d00001 diff --git a/image/levelup/2.png b/image/levelup/2.png new file mode 100644 index 0000000000000000000000000000000000000000..56e084e823e176a44aabf91287848521fb685584 GIT binary patch literal 28811 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 MQbVyy-Yn>U02-GKjsO4v literal 0 HcmV?d00001 diff --git a/image/levelup/3.png b/image/levelup/3.png new file mode 100644 index 0000000000000000000000000000000000000000..bb4997c5d959d12911c0bba577c811308fa69ab8 GIT binary patch literal 10478 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

&3C2GuCH!kE3 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 F`#(Gz#;*VX literal 0 HcmV?d00001 diff --git a/image/supply/hpsupply.png b/image/supply/hpsupply.png new file mode 100644 index 0000000000000000000000000000000000000000..689af434a840ae513a7677a8f1a4e1cbb2923630 GIT binary patch literal 9904 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�ZG!NWPitca88;h-3~1I~#p^_{VenG;p&M5F2$ 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