def test_two_shots(self):
        """Test wykonujący po dwa strzały każdym kolorem monety

        Powinny zostać wrzucone i spać na dół pola gry,
        lub zatrzymać się na już wrzuconej monecie"""

        compare_table = [[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0],
                         [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0],
                         [0, 1, -1, 0, 0, 0, 0], [0, 1, -1, 0, 0, 1, 0]]

        first_player = human_player.HumanPlayer(self.board, self.levels,
                                                Basic.PLAYER_ONE)
        second_player = human_player.HumanPlayer(self.board, self.levels,
                                                 Basic.PLAYER_TWO)

        game_functions = gm.GameMechanics(None, None, None, self.board,
                                          self.levels,
                                          [first_player, second_player])

        game_functions.hit(1)
        game_functions.hit(2)
        game_functions.hit(1)
        game_functions.hit(2)
        game_functions.hit(5)

        self.assertEqual(self.board, compare_table)
    def test_oblique_line(self):
        """Test ułożenia linii skośnej

        W przypadku ułożenia linii skośnej,
        funkcja powinna dać znak o wygranej jednego gracza, zwracając True"""

        self.board[2][2] = 1
        self.board[3][3] = 1
        self.board[4][4] = 1
        self.board[5][5] = 1

        game_functions = gm.GameMechanics(None, None, None, self.board, None,
                                          None)
        self.assertTrue(players_utils.check(self.board, 0, 0, 1))
    def test_horizontal_line(self):
        """Test ułożenia linii poziomej

        W przypadku ułożenia linii poziomej,
        funkcja powinna dać znak o wygranej jednego gracza, zwracając True"""

        self.board[0][1] = 1
        self.board[0][2] = 1
        self.board[0][3] = 1
        self.board[0][4] = 1

        game_functions = gm.GameMechanics(None, None, None, self.board, None,
                                          None)
        self.assertTrue(players_utils.check(self.board, 0, 0, 1))
    def test_vertical_line(self):
        """Test ułożenia linii pionowej

        W przypadku ułożenia linii pionowej,
        funkcja powinna dać znak o wygranej jednego gracza, zwracając True"""

        self.board[1][0] = 1
        self.board[2][0] = 1
        self.board[3][0] = 1
        self.board[4][0] = 1

        # ważna jest tylko plansza
        game_functions = gm.GameMechanics(None, None, None, self.board, None,
                                          None)
        self.assertTrue(players_utils.check(self.board, 0, 0, 1))
    def __reset_game(self):
        """Metoda odpowiedzialna za resetowanie stanu gry.

        Resetuje ona ustawienia gry oraz planszy,
        dzięki czemu zamykanie okna nie jest wymagane."""

        old_second_player = self.__game.players_array[1].type_of_player
        del self.__game
        print("zresetowano grę....")
        print()

        board, levels = players_utils.start_data()

        first_player = players.human_player.HumanPlayer(board, levels, Basic.PLAYER_ONE)

        if old_second_player == Basic.COMPUTER:
            difficulties = ["Losowy", "Łatwy", "Też łatwy",
                            "Średni", "Trudny", "Bardzo trudny", "Uber"]
            index = difficulties.index(self.__s_difficulty.get())
            new_second_player = players.computer_player.ComputerPlayer(board, levels,
                                                                       Basic.PLAYER_TWO, index)
        else:
            new_second_player = players.human_player.HumanPlayer(board, levels, Basic.PLAYER_TWO)

        players_array = [first_player, new_second_player]
        self.__game = game_mechanics.GameMechanics(self.__window_height, self.__window_width,
                                                   self.end_game, board, levels, players_array,
                                                   self.__canvas, self.__stat)

        print("władowano dane gry...")

        # funkcje geometrii
        self.__rbt_computer["state"] = tk.ACTIVE
        self.__rbt_player["state"] = tk.ACTIVE
        self.__s_difficulty["state"] = "readonly"

        if new_second_player:
            self.__rbt_computer.select()
        else:
            self.__rbt_player.select()

        # ustawienie początkowego komunikatu
        self.__game.set_stat("Zaczyna gracz numer 1")

        print("władowano geometrie...")

        print("przeładowano okno gry...")
        self.__game.draw()
    def test_longer_line(self):
        """Test ułożenia linii dłuższej niż 4

        W przypadku gdy linia jest dłuższa niż 4,
        wynik również powinien być pozytywny, czyli True"""

        self.board[0][0] = 1
        self.board[0][1] = 1
        self.board[0][2] = 1
        self.board[0][3] = 1
        self.board[0][4] = 1
        self.board[0][5] = 1

        game_functions = gm.GameMechanics(None, None, None, self.board, None,
                                          None)
        self.assertTrue(players_utils.check(self.board, 0, 0, 1))
    def __init__(self, window):
        """Konstruktor budujący okno gry.

         Buduje okno o odpowiednim rozmiarze oraz tworzący zmienne
        i tablice przechowujące podstawowe dane o grze."""

        screen_height = window.winfo_screenheight()  # rozdzielczość ekranu
        screen_width = window.winfo_screenwidth()

        self.__window = window
        self.__window_height = int(screen_height * WINDOW_SCALE_H)
        self.__window_width = int(screen_width * WINDOW_SCALE_W)
        self.__window.geometry("{}x{}+{}+{}".format(
            int(self.__window_width),
            int(self.__window_height),
            int(self.__window_width * 0.3),
            int(self.__window_height * 0.08)))  # rozmiar okna i pozycja po uruchomeniu

        self.__ai_player = True
        self.__stat = None
        self.__canvas = None
        self.__rbt_computer = None
        self.__rbt_player = None
        self.__s_difficulty = None
        self.load_geometry()

        board, levels = players_utils.start_data()
        difficulty = 0

        first_player = players.human_player.HumanPlayer(board, levels, Basic.PLAYER_ONE)
        second_player = players.computer_player.ComputerPlayer(board, levels,
                                                               Basic.PLAYER_TWO, difficulty)
        players_array = [first_player, second_player]

        self.__game = game_mechanics.GameMechanics(self.__window_height, self.__window_width,
                                                   self.end_game, board, levels, players_array,
                                                   self.__canvas, self.__stat)