class Game(): def __init__(self): pygame.init() self.lifes = [ pyg.image.load("lifes.png"), pyg.image.load("lifes.png"), pyg.image.load("lifes.png"), pyg.image.load("lifes.png"), pyg.image.load("lifes.png") ] self.isgame = True self.moving_flag = True self.win = pygame.display.set_mode((500, 600)) pygame.display.set_caption("Space Invadors") self.ship = Ship(self.win) self.barrier_1 = Barrier(100, 450, self.win) self.barrier_2 = Barrier(300, 450, self.win) self.enemys = [Enemy(self.win, x, 100) for x in range(30, 425, 55)] self.enemys += [Enemy(self.win, x, 225) for x in range(20, 435, 45)] self.count = 0 def get_min_y(self, barrier, xc): mas = [(y if xc == x else 700) for x, y in barrier] try: return min(mas) except Exception as e: print(e) def find_enemy(self, enemyes): mi = 550 mx = 0 for enemy in enemyes: if enemy.x > mx: mx = enemyes.index(enemy) if enemy.x < mi: mi = enemyes.index(enemy) return (mx, mi) def run(self): bullets = [] ship_bullets = [] while self.isgame: pygame.time.delay(70) for event in pygame.event.get(): if event.type == pygame.QUIT: self.isgame = False keys = pygame.key.get_pressed() self.win.fill((0, 0, 0)) tmp = self.ship.action(keys) self.barrier_1.draw() self.barrier_2.draw() font = pygame.font.SysFont(None, 40) text = font.render(f"Score: {self.count}", True, (255, 255, 255)) self.win.blit(text, (160, 10)) i = 0 for x in range(5, (23 + 5) * len(self.lifes), 28): self.win.blit(self.lifes[i], (x, 2)) i += 1 max_en, min_en = self.find_enemy(self.enemys) if self.enemys[max_en].x + 5 < 450 and self.moving_flag: for enemy in self.enemys: tmp_2 = enemy.move(5) if tmp_2 and len(bullets) < 30: bullets.append(tmp_2) elif self.enemys[min_en].x - 5 > 10: for enemy in self.enemys: tmp_2 = enemy.move(-5) if tmp_2 and len(bullets) < 30: bullets.append(tmp_2) self.moving_flag = False else: self.moving_flag = True for enemy in self.enemys: tmp_2 = enemy.move(0) if tmp_2 and len(bullets) < 30: bullets.append(tmp_2) if tmp and len(bullets) < 15: bullets.append(tmp) for bullet in bullets: try: bullets.index(bullet) except: continue bullet.shot(bullet.x, bullet.y) matrix = [self.barrier_1.pixels, self.barrier_2.pixels] for pix in range(len(matrix[0])): min_y_1 = self.get_min_y(matrix[0], matrix[0][pix][0]) min_y_2 = self.get_min_y(matrix[1], matrix[1][pix][0]) try: bullets.index(bullet) except: continue if matrix[0][pix][0] == bullet.x and bullet.y in range( 450, 550) and bullet.speed < 0: try: bullets.pop(bullets.index(bullet)) self.barrier_1.pixels[self.barrier_1.pixels.index( (matrix[0][pix][0], min_y_1))] = (-10, 650) except: pass elif matrix[1][pix][0] == bullet.x and bullet.y in range( 450, 550) and bullet.speed < 0: try: bullets.pop(bullets.index(bullet)) self.barrier_2.pixels[self.barrier_2.pixels.index( (matrix[1][pix][0], min_y_1))] = (-10, 650) except: pass for enemy in self.enemys: if bullet.x in range(enemy.x, enemy.x + 26) and bullet.y in range( enemy.y, enemy.y + 26): try: index = bullets.index(bullet) except: continue if bullet.speed > 0: enemy.hit() if enemy.live <= 0: self.enemys.pop(self.enemys.index(enemy)) self.count += 1 bullets.pop(bullets.index(bullet)) if self.count == 18: self.end() if bullet.x in range(self.ship.x, self.ship.x + 37) and bullet.y in range( self.ship.y, self.ship.y + 52): try: index = bullets.index(bullet) except: continue tmp = self.ship.hit() self.lifes.pop(-1) bullets.pop(bullets.index(bullet)) if tmp == "game over": self.end() if bullet.y < 600 and bullet.y > 0: bullet.y -= bullet.speed else: bullets.pop(bullets.index(bullet)) pygame.display.update() def end(self): self.win.fill((0, 0, 0)) font = pygame.font.SysFont(None, 40) text = font.render("GAME OVER", True, (255, 50, 50)) self.win.blit(text, (160, 300)) pygame.display.update() pygame.time.wait(2000) pygame.quit()
class Game: def __init__(self): pg.init() self.settings = Settings() self.screen = pg.display.set_mode(size=(self.settings.screen_width, self.settings.screen_height)) pg.display.set_caption("Alien Invasion") ship_image = pg.image.load('images/ship.bmp') self.ship_height = ship_image.get_rect().height self.hs = 0 self.sound = Sound(bg_music="sounds/crazy-space.wav") title = pg.image.load('images/title.bmp') # alein1 = pg.image.load('images/'alien00.bmp'') x = 200 y = 150 self.screen.blit(title, (x, y)) ali0 = pg.image.load('images/ali00.png') x = 500 y = 330 self.screen.blit(ali0, (x, y)) myfont = pg.font.SysFont("monospace", 25) label1 = myfont.render("=10 PTS", 1, (230, 230, 230)) self.screen.blit(label1, (560, 340)) ali1 = pg.image.load('images/ali10.png') x = 500 y = 380 self.screen.blit(ali1, (x, y)) myfont = pg.font.SysFont("monospace", 25) label1 = myfont.render("=20 PTS", 1, (230, 230, 230)) self.screen.blit(label1, (560, 390)) ali2 = pg.image.load('images/ali20.png') x = 500 y = 430 self.screen.blit(ali2, (x, y)) myfont = pg.font.SysFont("monospace", 25) label1 = myfont.render("=40 PTS", 1, (230, 230, 230)) self.screen.blit(label1, (560, 440)) ufo = pg.image.load('images/ufo00.png') x = 500 y = 480 self.screen.blit(ufo, (x, y)) myfont = pg.font.SysFont("monospace", 25) label1 = myfont.render("=???", 1, (230, 230, 230)) self.screen.blit(label1, (560, 490)) self.sound.play() self.sound.pause_bg() self.play_button = self.aliens = self.stats = self.sb = self.ship = None self.restart() def play2(self): pg.init() self.settings = Settings() self.screen = pg.display.set_mode(size=(self.settings.screen_width, self.settings.screen_height)) pg.display.set_caption("Alien Invasion") title = pg.image.load('images/title.bmp') # alein1 = pg.image.load('images/'alien00.bmp'') x = 200 y = 150 self.screen.blit(title, (x, y)) ali0 = pg.image.load('images/ali00.png') x = 500 y = 330 self.screen.blit(ali0, (x, y)) myfont = pg.font.SysFont("monospace", 25) label1 = myfont.render("=10 PTS", 1, (230, 230, 230)) self.screen.blit(label1, (560, 340)) ali1 = pg.image.load('images/ali10.png') x = 500 y = 380 self.screen.blit(ali1, (x, y)) myfont = pg.font.SysFont("monospace", 25) label1 = myfont.render("=20 PTS", 1, (230, 230, 230)) self.screen.blit(label1, (560, 390)) ali2 = pg.image.load('images/ali20.png') x = 500 y = 430 self.screen.blit(ali2, (x, y)) myfont = pg.font.SysFont("monospace", 25) label1 = myfont.render("=40 PTS", 1, (230, 230, 230)) self.screen.blit(label1, (560, 440)) ufo = pg.image.load('images/ufo00.png') x = 500 y = 480 self.screen.blit(ufo, (x, y)) myfont = pg.font.SysFont("monospace", 25) label1 = myfont.render("=???", 1, (230, 230, 230)) self.screen.blit(label1, (560, 490)) self.hs = self.stats.high_score self.sound = Sound(bg_music="sounds/crazy-space.wav") self.sound.play() self.sound.pause_bg() self.restart() def restart(self): self.play_button = Button(settings=self.settings, screen=self.screen, msg="Play") self.hs_button = scorebutton(settings=self.settings, screen=self.screen, msg="HIGH SCORES") self.stats = GameStats(settings=self.settings) self.sb = Scoreboard(game=self, sound=self.sound) self.settings.init_dynamic_settings() self.barrier = Barrier(ship_height=self.ship_height, game=self) self.ufo = Ufos(ship_height=self.ship_height, game=self) self.aliens = Aliens(ship_height=self.ship_height, game=self) self.ship = Ship(aliens=self.aliens, sound=self.sound, game=self, ufo=self.ufo) self.aliens.add_ship(ship=self.ship) self.stats.high_score = self.hs self.sb.prep_high_score() def scores(self): myfont = pg.font.SysFont("monospace", 60) label = myfont.render("HIGH SCORES", 1, (171, 130, 255)) self.screen.blit(label, (420, 50)) score_display = myfont.render(str(self.hs), 1, (171, 130, 255)) self.screen.blit(score_display, (570, 150)) def play(self): while True: gf.check_events(stats=self.stats, play_button=self.play_button, ship=self.ship, sound=self.sound, hs_button=self.hs_button) if self.stats.game_active: self.ship.update() self.aliens.update() self.ufo.update() self.barrier.update() if not self.stats.hs_active: self.hs_button.draw_button() else: self.screen.fill(self.settings.bg_color) self.scores() if not self.stats.game_active: self.play_button.draw() self.hs_button.draw_button() self.sound.pause_bg() else: if not self.sound.playing_bg: self.sound.unpause_bg() self.screen.fill(self.settings.bg_color) self.ship.draw() self.aliens.draw() self.sb.show_score() self.ufo.draw() self.barrier.draw() pg.display.flip() def reset(self): if self.stats.ships_left > 0: self.stats.ships_left -= 1 self.sb.prep_ships() self.aliens.empty() self.aliens.create_fleet() self.ufo.empty() self.ufo.create_fleet() self.ship.center_ship() time.sleep(0.5) self.ship.timer = Ship.timer else: self.stats.game_active = False self.sound.pause_bg() self.hs = self.stats.high_score self.play2() with open("score.txt", 'a') as f: f.write(f'The high score was {self.hs}\n')