def handle_key(self, key): """ Funkcja do obsługi obracania :param key: :return: """ log("handle key: %s" % key) if key == pygame.K_1: self.rotate_right(1, 1) if key == pygame.K_q: self.rotate_left(1, 1) if key == pygame.K_2: self.rotate_right(1, 4) if key == pygame.K_w: self.rotate_left(1, 4) if key == pygame.K_3: self.rotate_right(1, 7) if key == pygame.K_e: self.rotate_left(1, 7) if key == pygame.K_4: self.rotate_right(4, 1) if key == pygame.K_r: self.rotate_left(4, 1) if key == pygame.K_5: self.rotate_right(4, 4) if key == pygame.K_t: self.rotate_left(4, 4) if key == pygame.K_6: self.rotate_right(4, 7) if key == pygame.K_y: self.rotate_left(4, 7) if key == pygame.K_7: self.rotate_right(7, 1) if key == pygame.K_u: self.rotate_left(7, 1) if key == pygame.K_8: self.rotate_right(7, 4) if key == pygame.K_i: self.rotate_left(7, 4) if key == pygame.K_9: self.rotate_right(7, 7) if key == pygame.K_o: self.rotate_left(7, 7)
def __init__(self, game): """ Konstruktor, przyjmuje obiekt gry :param game: :return: """ self.board = [[ Field(UNDETERMINED, (600 / 9 * x + 12, 600 / 9 * y + 12)) for x in range(9) ] for y in range(9)] log("Map array created") self.board_image = game.board_image self.screen = game.screen self.game = game
def main_loop(self): """ Główna funkcja służąca do obsługi pętli gry :return: """ while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() return "End by cross." if event.type == pygame.MOUSEBUTTONUP and self.tour == BEGINING: self.per_move_flag = True log('Gracz numer ' + str(self.current_player)) pos = pygame.mouse.get_pos() if self.board.handle_mouse( pos, self.players[self.current_player - 1]): self.tour = MIDLE self.press_sound.play() if event.type == pygame.KEYDOWN and self.tour == MIDLE and event.key in KEYS: self.per_move_flag = True self.board.handle_key(event.key) log('Koniec tury gracza ' + str(self.current_player)) self.next_player() self.tour = BEGINING self.move_sound.play() if self.count_of_colored_field == 81: pygame.quit() return "\nKoniec gry - remis" if self.per_move_flag: self.per_move_flag = False if self.check_win(): pygame.quit() return "\nKoniec gry - wygral: %s " % self.winners self.board.render() font = pygame.font.Font(None, 36) textpos = pygame.Rect(150, 615, 100, 100) self.screen.fill((255, 255, 255), pygame.Rect(0, 600, 600, 200)) if self.tour == BEGINING: text = font.render("Graczu " + str(self.current_player)\ + " poloz pionek", 1, (15, 15, 15)) else: text = font.render("Graczu " + str(self.current_player)\ + " obroc plansze", 1, (15, 15, 15)) self.screen.blit(text, textpos) pygame.time.wait(100) pygame.display.flip()
def main_loop(self): """ Główna funkcja służąca do obsługi pętli gry :return: """ while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() return "End by cross." if event.type == pygame.MOUSEBUTTONUP and self.tour == BEGINING: self.per_move_flag = True log('Gracz numer ' + str(self.current_player)) pos = pygame.mouse.get_pos() if self.board.handle_mouse(pos, self.players[self.current_player - 1]): self.tour = MIDLE self.press_sound.play() if event.type == pygame.KEYDOWN and self.tour == MIDLE and event.key in KEYS: self.per_move_flag = True self.board.handle_key(event.key) log('Koniec tury gracza ' + str(self.current_player)) self.next_player() self.tour = BEGINING self.move_sound.play() if self.count_of_colored_field == 81: pygame.quit() return "\nKoniec gry - remis" if self.per_move_flag: self.per_move_flag = False if self.check_win(): pygame.quit() return "\nKoniec gry - wygral: %s " % self.winners self.board.render() font = pygame.font.Font(None, 36) textpos = pygame.Rect(150, 615, 100, 100) self.screen.fill((255, 255, 255), pygame.Rect(0, 600, 600, 200)) if self.tour == BEGINING: text = font.render("Graczu " + str(self.current_player)\ + " poloz pionek", 1, (15, 15, 15)) else: text = font.render("Graczu " + str(self.current_player)\ + " obroc plansze", 1, (15, 15, 15)) self.screen.blit(text, textpos) pygame.time.wait(100) pygame.display.flip()
def __init__(self, game): """ Konstruktor, przyjmuje obiekt gry :param game: :return: """ self.board = [ [ Field(UNDETERMINED, (600 / 9 * x + 12, 600 / 9 * y + 12)) for x in range(9) ] for y in range(9) ] log("Map array created") self.board_image = game.board_image self.screen = game.screen self.game = game
def load_assets(self): """ Służy do ładowania plików graficznych :return: """ try: self.board_image = pygame.image.load( 'assets/background.bmp').convert() self.players_ball = (pygame.image.load('assets/ball_empty.gif'), pygame.image.load('assets/ball_red.gif'), pygame.image.load('assets/ball_blue.gif'), pygame.image.load('assets/ball_green.gif'), pygame.image.load('assets/ball_pink.gif'), pygame.image.load('assets/ball_yellow.gif')) self.press_sound = pygame.mixer.Sound('assets/button.wav') self.move_sound = pygame.mixer.Sound('assets/move.wav') except Exception as e: log(str(e)) raise Exception
def load_assets(self): """ Służy do ładowania plików graficznych :return: """ try: self.board_image = pygame.image.load('assets/background.bmp').convert() self.players_ball = ( pygame.image.load('assets/ball_empty.gif'), pygame.image.load('assets/ball_red.gif'), pygame.image.load('assets/ball_blue.gif'), pygame.image.load('assets/ball_green.gif'), pygame.image.load('assets/ball_pink.gif'), pygame.image.load('assets/ball_yellow.gif') ) self.press_sound = pygame.mixer.Sound('assets/button.wav') self.move_sound = pygame.mixer.Sound('assets/move.wav') except Exception as e: log(str(e)) raise Exception
def __init__(self, players_number, size=(600, 650)): log("================ NEW RUNME") try: pygame.init() self.screen = pygame.display.set_mode(size) except Exception as e: log(str(e)) raise Exception self.count_of_colored_field = 0 self.board_image = None self.players_ball = None self.load_assets() self.winners = "" self.players_number = players_number self.current_player = 1 self.players = [] for _ in range(players_number): self.players.append(Player(_ + 1)) self.per_move_flag = True self.tour = BEGINING self.board = Board(self)
def handle_mouse(self, position, player): """ Funkcja do obsługi stawiania pionków :param position: :param player: :return: """ log("handle mouse: (%s,%s)" % (position[0], position[1])) for row in self.board: for field in row: if field.rect.collidepoint(position[0], position[1]): log('Mouse collision:' + str(field.cords[0]) + ' ' + str(field.cords[1])) log('field color %s' % field.color) if field.color != 0: return False field.color = player.number self.game.count_of_colored_field += 1 return True return False
from source.game import Game from source.loger import log import os import source.constants as constants def main(): while True: os.system('cls' if os.name == 'nt' else 'clear') print(constants.TEXT_MENU) user_input = raw_input() if user_input not in ('1', '2', '3', 'q'): continue if user_input == 'q': break game = Game(int(user_input)) print game.main_loop() os.system('pause' if os.name == 'nt' else\ 'read -n1 -r -p "Nacisnij enter by kontynuowac..." key') if __name__ == '__main__': log("============================= NEW RUNME") main()