Exemple #1
0
    def testUpdateBoard(self):
        """
        Test si après avoir bouger les pions, après l'appel à Board.update,
        les pions doivents etre bien placé dans la Board
        """

        b = Board((5, 5), dtype=object)

        # on fait exprès de mal placer les pions dans b
        b[3, 1] = pion.Elephant(1, 1, 90)
        b[3, 3] = pion.Elephant(3, 1, 270)
        b[1, 4] = pion.Rhino(3, 3, 90)
        b[1, 1] = pion.Rhino(2, 4, 0)
        b[2, 4] = pion.Elephant(1, 4, 180)
        b[4, 4] = pion.Rhino(4, 5, 90)  #pion qui doit etre supprimé

        # normalement les pions sont bien replacé
        b.update()

        x_lim, y_lim = b.shape

        for i in range(x_lim):
            for j in range(y_lim):
                if b[i, j] != None:
                    self.assertEqual(b[i, j].coords, (i, j))
Exemple #2
0
    def testNbMaxInsert(self):
        """
        Test si on ne peut pas ajouter plus de 5 piece par joueur
        """

        b = Board((5, 5), dtype=object)

        # pour les elephants :
        b[1, 1] = pion.Elephant(1, 1, 90)
        b[3, 1] = pion.Elephant(3, 1, 90)
        b[3, 3] = pion.Elephant(3, 3, 90)
        b[2, 4] = pion.Elephant(2, 4, 90)
        b[1, 4] = pion.Elephant(1, 4, 90)

        self.assertEqual(b.check_insert(), 0)

        # pour les rhino :
        b.tour_elephant = False
        b[1, 1] = pion.Rhino(1, 1, 90)
        b[3, 1] = pion.Rhino(3, 1, 90)
        b[3, 3] = pion.Rhino(3, 3, 90)
        b[2, 4] = pion.Rhino(2, 4, 90)
        b[1, 4] = pion.Rhino(1, 4, 90)

        self.assertEqual(b.check_insert(), 0)
Exemple #3
0
    def setUp(self):

        self.board = Board((5, 5), dtype=object)

        self.board[1, 1] = pion.Rhino(1, 1, 90)
        self.board[3, 1] = pion.Rhino(3, 1, 90)
        self.board[3, 3] = pion.Rhino(3, 3, 90)
        self.board[2, 4] = pion.Elephant(2, 4, 90)
Exemple #4
0
    def load_save(self):
        filename = QtWidgets.QFileDialog.getOpenFileName(
            self, 'Open your save', '', "Fichier texte (*.txt);;All Files (*)")

        self.new_game()
        self.board.clear()

        with open(filename[0], 'r') as f:
            self.board.tour_elephant = bool(int(f.readline().split(':')[1]))
            self.board.nb_tour = int(f.readline().split(':')[1])
            self.ui.textBrowser.setText(f.readline().replace(";", "\n"))

            import pion

            for pions in f.readlines():
                pions.replace('\n', '')
                pion_to_insert = pions.split(";")
                name = pion_to_insert[0]
                x, y = [int(i) for i in pion_to_insert[1].split(",")]
                if name == 'Rocher':
                    self.board.set_pion(pion.Rocher(x, y))
                else:
                    orientation = int(pion_to_insert[2].split(':')[1])
                    if name == 'E':
                        self.board.set_pion(pion.Elephant(x, y, orientation))
                    else:
                        self.board.set_pion(pion.Rhino(x, y, orientation))

        self.update_ui()
Exemple #5
0
    def testMoveCheck(self):
        """
        Test si un mouvement est possible
        """

        # 1 contre 1 --> impossible
        pion1 = pion.Rhino(0, 1, 180)
        pion2 = pion.Elephant(0, 2, 0)
        ligne_1 = array([pion1, pion2])

        # 2 contre 1 --> possible
        pion1 = pion.Rhino(0, 1, 180)
        pion3 = pion.Rhino(0, 2, 180)
        pion2 = pion.Elephant(0, 3, 0)
        ligne_2 = array([pion1, pion2, pion3])

        # exemple complexe --> possible
        pion1 = pion.Rhino(0, 1, 180)
        pion2 = pion.Elephant(0, 2, 90)
        pion3 = pion.Elephant(0, 3, 180)
        pion4 = pion.Rocher(0, 4)
        pion5 = pion.Rhino(0, 5, 0)
        ligne_3 = array([pion1, pion2, pion3, pion4, pion5])

        # exemple complexe --> impossible
        pion1 = pion.Rhino(0, 0, 180)
        pion2 = pion.Rocher(0, 1)
        pion3 = pion.Elephant(0, 2, 90)
        pion4 = pion.Elephant(0, 3, 180)
        pion5 = pion.Rocher(0, 4)
        pion6 = pion.Rhino(0, 5, 0)
        ligne_4 = array([pion1, pion2, pion3, pion4, pion5, pion6])

        # 1 contre 2 mal orienté --> possible
        pion1 = pion.Rhino(0, 1, 180)
        pion3 = pion.Elephant(0, 2, 90)
        pion2 = pion.Elephant(0, 3, 270)
        ligne_5 = array([pion1, pion2, pion3])

        self.assertEqual(self.board.move_check(ligne_1, 180)[1], 0)
        self.assertEqual(self.board.move_check(ligne_2, 180)[1], 1)
        self.assertEqual(self.board.move_check(ligne_3, 180)[1], 1)
        self.assertEqual(self.board.move_check(ligne_4, 180)[1], 0)
        self.assertEqual(self.board.move_check(ligne_5, 180)[1], 1)
    def insert(self,direction,x):
        """
        renvoie la nouvelle position ou None si l'insertion est impossible
        """
        # de la même façon que move()
        if direction == 270:
            L = self[x,:][::-1].copy()
            y=4

        elif direction == 180:
            L = self[:,x].copy()
            y=x
            x=0

        elif direction == 90:
            L = self[x,:].copy()
            y=0

        else:
            L = self[:,x][::-1].copy()
            y=x
            x=4

        if self.tour_elephant == True:          # selon le tour, on insèrera un éléphant ou un rhinocéros
            p = pion.Elephant(x,y,direction)
        else:
            p = pion.Rhino(x,y,direction)

        L = np.array(L)
        L = np.insert(L,0,p)                    # le pion à insérer peut pousser devant lui, il est donc ajouté à la liste pour move_check()
        new_L, check = self.move_check(L, direction)

        if check:                               # si l'insertion est possible on pousse les pions concernés
            for pion_bouge in new_L[1:]:        # mais on ne bouge pas l'animal à insérer
                pion_bouge.move(direction)
            self.update()
            self.set_pion(p)                    # on insère l'animal à insérer
            self.update()
            return p.x,p.y

        else :
            return None