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))
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)
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)
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()
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