def pause(self): pause_text = interface.Label(700, 200, 400, 200, None, self.color['background']) pause_text.add_text("GAME PAUSED", 70, "Fonts/Comic_Kings.ttf", (236, 240, 241)) replay = interface.Button(350, 500, 300, 100, self.draw_map, (244, 208, 63), (247, 220, 111)) replay.add_text("RESTART", 60, "Fonts/arfmoochikncheez.ttf", self.color['background']) resume = interface.Button(750, 500, 300, 100, None, (88, 214, 141), (171, 235, 198)) resume.add_text("RESUME", 60, "Fonts/arfmoochikncheez.ttf", self.color['background']) exit = interface.Button(1150, 500, 300, 100, close, (241, 148, 138), (245, 183, 177)) exit.add_text("QUIT", 60, "Fonts/arfmoochikncheez.ttf", self.color['background']) mandav = interface.Label(width - 270, height + ground - 70, 300, 100, None, self.color['background']) mandav.add_text("MANDAV", 60, "Fonts/arfmoochikncheez.ttf", (113, 125, 126)) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: close() if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: close() if event.key == pygame.K_p: return if event.key == pygame.K_ESCAPE: return if event.type == pygame.MOUSEBUTTONDOWN: if replay.isActive(): replay.action() if resume.isActive(): return if exit.isActive(): exit.action() replay.draw() resume.draw() exit.draw() pause_text.draw() mandav.draw() pygame.display.update() clock.tick(60)
def level_failed(self): level_failed_text = interface.Label(700, 100, 400, 200, None, self.color['background']) level_failed_text.add_text("LEVEL FAILED!", 80, "Fonts/Comic_Kings.ttf", (236, 240, 241)) score_text = interface.Label(750, 300, 300, 100, None, self.color['background']) score_text.add_text("SCORE: " + str(self.score), 55, "Fonts/Comic_Kings.ttf", (236, 240, 241)) replay = interface.Button(500, 500, 300, 100, self.draw_map, (244, 208, 63), (247, 220, 111)) replay.add_text("TRY AGAIN", 60, "Fonts/arfmoochikncheez.ttf", self.color['background']) exit = interface.Button(1000, 500, 300, 100, close, (241, 148, 138), (245, 183, 177)) exit.add_text("QUIT", 60, "Fonts/arfmoochikncheez.ttf", self.color['background']) mandav = interface.Label(width - 270, height + ground - 70, 300, 100, None, self.color['background']) mandav.add_text("MANDAV", 60, "Fonts/arfmoochikncheez.ttf", (113, 125, 126)) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: close() if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: close() if event.type == pygame.MOUSEBUTTONDOWN: if replay.isActive(): replay.action() if exit.isActive(): exit.action() replay.draw() exit.draw() level_failed_text.draw() score_text.draw() mandav.draw() pygame.display.update() clock.tick(60)
def replace(self, event, button_list): """Replaces cards clicked by player.""" continue_button = interface.Button(pygame.Rect(const.CONTINUE), "Continue", self.font) # Add button to list only once if len(button_list) == const.BUTTON_LIST_LEN: button_list.append(continue_button) if event.type == pygame.MOUSEBUTTONUP: if self.main_player.card_1.rect.collidepoint(event.pos): self.main_player.card_1.click() elif self.main_player.card_2.rect.collidepoint(event.pos): self.main_player.card_2.click() elif continue_button.rect.collidepoint(event.pos): # Continue button has been clicked if self.main_player.card_1.is_clicked(): self.main_player.replace_card(self.main_player.card_1, self.game_deck) if self.main_player.card_2.is_clicked(): self.main_player.replace_card(self.main_player.card_2, self.game_deck) # Adjust cards, remove continue button, update card_list button_list.pop() self.main_player.set_cards_position() return True return False
def GAME(): map = maps.Maps() welcome = interface.Label(700, 100, 400, 200, None, background) welcome.add_text("ANGRY BIRDS", 80, "Fonts/arfmoochikncheez.ttf", (236, 240, 241)) start = interface.Button(500, 400, 300, 100, start_game, (244, 208, 63), (247, 220, 111)) start.add_text("START GAME", 60, "Fonts/arfmoochikncheez.ttf", background) exit = interface.Button(1000, 400, 300, 100, close, (241, 148, 138), (245, 183, 177)) exit.add_text("QUIT", 60, "Fonts/arfmoochikncheez.ttf", background) mandav = interface.Button(width - 300, height - 80, 300, 100, None, background) mandav.add_text("MANDAV", 60, "Fonts/arfmoochikncheez.ttf", (41, 41, 41)) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: close() if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: close() if event.type == pygame.MOUSEBUTTONDOWN: if exit.isActive(): exit.action() if start.isActive(): start_game(map) display.fill(background) start.draw() exit.draw() welcome.draw() mandav.draw() pygame.display.update() clock.tick(60)
def level_cleared(self): self.level += 1 level_cleared_text = interface.Label(700, 100, 400, 200, None, self.color['background']) if self.level <= self.max_level: level_cleared_text.add_text( "LEVEL " + str(self.level - 1) + " CLEARED!", 80, "Fonts/Comic_Kings.ttf", (236, 240, 241)) else: level_cleared_text.add_text("ALL LEVEL CLEARED!", 80, "Fonts/Comic_Kings.ttf", (236, 240, 241)) score_text = interface.Label(750, 300, 300, 100, None, self.color['background']) score_text.add_text("SCORE: " + str(self.score), 55, "Fonts/Comic_Kings.ttf", (236, 240, 241)) replay = interface.Button(350, 500, 300, 100, self.replay_level, (244, 208, 63), (247, 220, 111)) replay.add_text("PLAY AGAIN", 60, "Fonts/arfmoochikncheez.ttf", self.color['background']) if self.level <= self.max_level: next = interface.Button(750, 500, 300, 100, self.draw_map, (88, 214, 141), (171, 235, 198)) next.add_text("CONTINUE", 60, "Fonts/arfmoochikncheez.ttf", self.color['background']) else: next = interface.Button(750, 500, 300, 100, self.start_again, (88, 214, 141), (171, 235, 198)) next.add_text("START AGAIN", 60, "Fonts/arfmoochikncheez.ttf", self.color['background']) exit = interface.Button(1150, 500, 300, 100, close, (241, 148, 138), (245, 183, 177)) exit.add_text("QUIT", 60, "Fonts/arfmoochikncheez.ttf", self.color['background']) mandav = interface.Label(width - 270, height + ground - 70, 300, 100, None, self.color['background']) mandav.add_text("MANDAV", 60, "Fonts/arfmoochikncheez.ttf", (113, 125, 126)) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: close() if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: close() if event.type == pygame.MOUSEBUTTONDOWN: if replay.isActive(): replay.action() if next.isActive(): next.action() if exit.isActive(): exit.action() replay.draw() next.draw() exit.draw() level_cleared_text.draw() score_text.draw() mandav.draw() pygame.display.update() clock.tick(60)
def run(self): icon = pygame.image.load(str(const.ASSETS / "icon.png")) pygame.display.set_icon(icon) pygame.display.set_caption("Battleship") self.screen.fill(const.BACKGROUND_COLOR) stage = next(self.stages) # First stage - ship placement text_list = interface.Text.text_init(None, self.font) ships = interface.Button.ships_init(None) active_ship_orientation = "Horizontal" # Can be Horizontal or Vertical buttons = [interface.Button(pygame.Rect(const.CONFIRM_BUTTON), "Potwierdź", self.font, const.CELL_COLOR)] self.player.player_turn = True is_player_winner = None self.info = "Rozmieść swoje okręty na planszy 1" while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() if stage == "ship placement": if event.type == pygame.KEYDOWN and event.key == pygame.K_r: if active_ship_orientation == "Horizontal": active_ship_orientation = "Vertical" else: active_ship_orientation = "Horizontal" if event.type == pygame.MOUSEBUTTONDOWN: mouse_pos = event.pos if self.active_ship == 0: for ship in ships: if ship.collidepoint(mouse_pos): self.active_ship = int(ship.width / const.CELL_SIZE) ships.remove(ship) else: for row in self.first_board.board: for cell in row: if cell.rect.collidepoint(mouse_pos): """Checking if ship can be placed""" if self.first_board.is_place_ok(cell.coordinates, self.active_ship, active_ship_orientation): cell_list = [] for i in range(self.active_ship): if active_ship_orientation == "Horizontal": cell_list.append(self.first_board.board[cell.coordinates[0]][i + cell.coordinates[1]]) else: cell_list.append(self.first_board.board[i + cell.coordinates[0]][cell.coordinates[1]]) cell_list[i].put_ship() new_ship = Ship(cell_list, active_ship_orientation) self.player.place_ship(new_ship) self.active_ship = 0 active_ship_orientation = "Horizontal" self.info = "Rozmieść swoje okręty na planszy 1" else: self.info = "Okręt nie może zostać umieszczony w tym miejscu" if event.type == pygame.MOUSEBUTTONDOWN: mouse_pos = event.pos if buttons[0].rect.collidepoint(mouse_pos): if self.player.get_placed_ships_number() < 5: self.info = "Nie rozmieszczono wszystkich okrętów na planszy" else: self.bot.place_random_ships(self.second_board) buttons = [] self.second_board.visible = True text_list.pop() text_list.append(interface.Text("Plansza 2", self.font, const.SECOND_BOARD_CAPTION_POSITION)) self.info = "Faza druga, oddaj strzał na planszy nr 2" stage = next(self.stages) if stage == "shooting": if event.type == pygame.MOUSEBUTTONDOWN and self.player.is_player_turn(): mouse_pos = event.pos clicked_cell = self.second_board.look_for_click(mouse_pos) if clicked_cell is not None and clicked_cell.has_been_shot(): self.info = "W to pole został już oddany strzał" elif clicked_cell is not None: before_ships = self.bot.count_not_sunk_ships() hit = self.player.shoot(clicked_cell, self.second_board) after_ships = self.bot.count_not_sunk_ships() if after_ships != before_ships: self.info = "Zatopienie statku" elif hit: self.info = "Trafienie" else: self.info = "Spudłowanie" before_ships = self.player.count_not_sunk_ships() self.bot.shoot(self.first_board) after_ships = self.player.count_not_sunk_ships() if after_ships != before_ships: self.bot.last_shot_sunk_enemy_ship() if self.check_for_finish()[0]: if self.check_for_finish()[1]: is_player_winner = True else: is_player_winner = False stage = next(self.stages) interface.GameObject.update_screen(None, text_list, ships, buttons, self.first_board, self.second_board, self.screen) interface.Text.update_info(None, self.info, self.font, self.screen) if stage == "end": finish_buttons = interface.GameObject.draw_finish_menu(None, self.screen, self.font, is_player_winner) if event.type == pygame.MOUSEBUTTONDOWN: mouse_pos = event.pos if finish_buttons[0].rect.collidepoint(mouse_pos): main() elif finish_buttons[1].rect.collidepoint(mouse_pos): sys.exit() pygame.display.flip()