class Game: """ docstring """ def __init__(self, box, sc_width, sc_height): self.box = box self.name_projectil = "laser" self.name_player = "" self.player = Player(self, sc_width, sc_height, self.name_player, "ship3") self.all_monsters = pygame.sprite.Group() self.event = Event(self, sc_width, sc_height) self.sc_width = sc_width self.sc_height = sc_height self.keybord = {} self.total_degat = 0 self.is_running = False self.is_boss = False self.time = 0 self.PLAYERS = {} self.total_game = 0 self.last_ammo_update = pygame.time.get_ticks() self.tab = PRINT_NUM_PROJECTIL def start(self): self.is_running = True self.PLAYERS = lecture("/items/player.data") self.player.total = self.PLAYERS[self.name_player]["score_total"] self.player.lv = self.PLAYERS[self.name_player]["lv"] self.player.xp = self.PLAYERS[self.name_player]["xp"] self.player.xp_max = 1000 * self.player.lv if self.player.lv != 1: self.player.pv_max = 200 + (200 * self.player.lv / 100) self.name_projectil = self.player.power_up(self.name_projectil) if self.player.lv < 2: self.spawn_monster("ship2") else: self.event.spawn_super_monster("ship4") def game_over(self): save_player = self.PLAYERS[self.name_player] save_player["score_total"] += self.player.score save_player["pt_last_partie"] = self.player.score save_player["time_in_game"] += self.time save_player["lv"] = self.player.lv save_player["xp"] = self.player.xp save_score("/items/player.data", self.name_player, save_player["score_total"], save_player["pt_last_partie"], save_player["time_in_game"], save_player["lv"], save_player["xp"]) self.player.re_init() self.is_boss = False self.is_running = False self.all_monsters = pygame.sprite.Group() self.event.all_boss = pygame.sprite.Group() self.event.reset_percent() def spawn_monster(self, ship_image): monster = Monster(self, self.sc_width, self.sc_height, ship_image) # on l'ajoute a notre groupe de monstre self.all_monsters.add(monster) def weapon_screen(self, screen): myfont = pygame.font.SysFont('roboto', 10) for elem in PRINT_NUM_PROJECTIL: item = PRINT_NUM_PROJECTIL[elem] title_disp = item["title_display"] screen.blit(item["image"], item["coord_img"]) screen.blit( myfont.render(title_disp["num"], title_disp["bool"], title_disp["color"]), item["coord_disp"]) def weapon_choice(self, screen, name): for key, item in enumerate(ITEMS_SHIP.keys()): if name == item and key < 3: pos = key * 40 pygame.draw.rect(screen, (100, 100, 100, 128), (215 + pos, 5, 30, 30)) pygame.draw.rect(screen, (250, 250, 250), (215 + pos, 5, 30, 30), 2) self.weapon_screen(screen) def out_of_ammo(self, screen): if self.player.magasin <= 0: font = pygame.font.SysFont("roboto", 30) warn_ammo = font.render("Out Of Ammo Wait ...", True, (250, 10, 10)) screen.blit(warn_ammo, (self.sc_width / 2 - warn_ammo.get_width() / 2, self.sc_height / 2 - warn_ammo.get_height() - 20)) # Timer d'attente pour rechargement munition now = pygame.time.get_ticks() if now - self.last_ammo_update > 10000: self.last_ammo_update = now # Rechargement aléatoire mun = random.randint(5, 20) self.player.magasin = mun def start_game(self, screen): self.box.active = False # injecte l'image de l'player screen.blit(self.player.image, (self.player.rect.x, self.player.rect.y)) self.event.update_bar(screen) self.player.shielding(screen) # affichage des armes self.weapon_screen(screen) # affichage de l'arme utilisée self.weapon_choice(screen, self.name_projectil) if self.is_boss == False: for mob in self.all_monsters: mob.fire("ship", "laser") mob.move_projectil(-1, self.player) mob.update_pv(screen, (mob.rect.x + mob.image.get_width())) mob.move_left() mob.kamikaze_monster() mob.all_projectils.draw(screen) mob.all_explosions.draw(screen) mob.all_explosions.update() for gain_load in mob.all_gains: screen.blit(gain_load, mob.spawn_gain_rect) self.player.collid(mob.spawn_gain_rect, mob.all_gains, mob.qte, mob.name) self.player.move_projectil(1, mob) for boss in self.event.all_boss: boss.spawn(screen) # Affichage PV et Magasin self.player.draw_life_bar(screen, 10, 5) self.player.draw_munition_bar(screen, 10, 25) self.player.draw_xp_bar(screen, 10, 45) self.event.all_boss.draw(screen) # on verifie si les touches sont apuyées ou pas if self.keybord.get( pygame.K_RIGHT ) and self.player.rect.x + self.player.rect.width < screen.get_width( ) - 40: self.player.move_right() elif self.keybord.get(pygame.K_LEFT) and self.player.rect.x > 25: self.player.move_left() if self.keybord.get( pygame.K_DOWN ) and self.player.rect.y + self.player.rect.height < screen.get_height( ) - self.player.image.get_height(): self.player.move_down() elif self.keybord.get(pygame.K_UP) and self.player.rect.y > 75: self.player.move_up() if self.keybord.get(pygame.K_SPACE): if self.player.magasin > 0: bulletSound = mixer.Sound("assets/sounds/laser.wav") bulletSound.set_volume(0.02) self.name_projectil = self.player.power_up(self.name_projectil) self.player.fire("ship", self.name_projectil, bulletSound) else: bulletSound = mixer.Sound("assets/sounds/alarm.wav") bulletSound.set_volume(0.02) bulletSound.stop() bulletSound.play() # Out of ammo: self.out_of_ammo(screen) if self.keybord.get(pygame.K_1): self.name_projectil = "laser" self.name_projectil = self.player.power_up(self.name_projectil) elif self.keybord.get(pygame.K_2): self.name_projectil = "lightning" self.name_projectil = self.player.power_up(self.name_projectil) elif self.keybord.get(pygame.K_3): self.name_projectil = "plasma" self.name_projectil = self.player.power_up(self.name_projectil) self.player.all_projectils.draw(screen) self.player.all_explosions.draw(screen) self.player.all_explosions.update() self.all_monsters.draw(screen)