def on_move2(btn): if b.checkWin(GameTokens.PLAYER2): player2TextError.value = 'Felicidades, ganaste!' elif b.checkWin(GameTokens.PLAYER1): player2TextError.value = 'Perdiste, intentalo nuevamente!' else: fromSlot = player2TextFrom.value.split(',') toSlot = player2TextTo.value.split(',') (fromX, fromY) = (int(fromSlot[0]), int(fromSlot[1])) (toX, toY) = (int(toSlot[0]), int(toSlot[1])) res = b.moveToken(GameTokens.PLAYER2, fromX, fromY, toX, toY) if res == GameTokenMoves.VALID_MOVE: if not b.checkWin(GameTokens.PLAYER2): move1() player2TextError.value = "" clear_output() display(box0) if buttons.value == opts[0]: gui.printBoardHex(b.getMatrix(), False, b.fromVirtual) elif buttons.value == opts[1]: gui.printBoardHex(b.getMatrix(), True, b.fromVirtual) elif buttons.value == opts[2]: gui.printBoardMatrix(b.getMatrix(), b.getLength()) display(main_box) elif res == GameTokenMoves.INVALID_MOVE: player2TextError.value = "El movimiento es inválido" elif res == GameTokenMoves.TOKEN_FROM: player2TextError.value = "En la posición desde no hay un token del jugador 2" elif res == GameTokenMoves.TOKEN_TO: player2TextError.value = "En la posición hacia ya hay un token" elif res == GameTokenMoves.INVALID_COORDS: player2TextError.value = "Alguna de las coordenadas no existe en el tablero"
def on_change(change): if change['type'] == 'change' and change['name'] == 'value': clear_output() display(box0) if change['new'] == opts[0]: gui.printBoardHex(b.getMatrix(), False, b.fromVirtual) elif change['new'] == opts[1]: gui.printBoardHex(b.getMatrix(), True, b.fromVirtual) elif change['new'] == opts[2]: gui.printBoardMatrix(b.getMatrix(), b.getLength()) display(main_box)
def playTraining(self, spectate=False): (player1, player2) = self.players player1.setPlayerNumber(GameTokens.PLAYER1) player2.setPlayerNumber(GameTokens.PLAYER2) b = Board() finished = False res = False while not finished: if spectate: gui.printClear() gui.printBoardHex(b.getMatrix(), False, b.fromVirtual) # Jugador 1 elige su movimiento y juega ((fromX2, fromY2), (toX2, toY2)) = player1.chooseMove(b) b.moveToken(player1.playerNumber, fromX2, fromY2, toX2, toY2) # Se checkea si el jugador 1 ganó if b.checkWin(player1.playerNumber): finished = True res = GameResults.WIN # Si el jugador 1 no ganó, el jugador 2 elige su movimiento y juega if not finished: # time.sleep(0.5) ((fromX2, fromY2), (toX2, toY2)) = player2.chooseMove(b) b.moveToken(player2.playerNumber, fromX2, fromY2, toX2, toY2) if b.checkWin(player2.playerNumber): finished = True res = GameResults.LOSE # Agrega el tablero al tablero de turnos self.boards.append(copy.deepcopy(b)) if len(self.boards) >= self.maxRounds: finished = True res = GameResults.DRAW # time.sleep(0.5) print("Partida finalizada con resultado " + str(res)) return res
move1() player2TextError.value = "" clear_output() display(box0) if buttons.value == opts[0]: gui.printBoardHex(b.getMatrix(), False, b.fromVirtual) elif buttons.value == opts[1]: gui.printBoardHex(b.getMatrix(), True, b.fromVirtual) elif buttons.value == opts[2]: gui.printBoardMatrix(b.getMatrix(), b.getLength()) display(main_box) elif res == GameTokenMoves.INVALID_MOVE: player2TextError.value = "El movimiento es inválido" elif res == GameTokenMoves.TOKEN_FROM: player2TextError.value = "En la posición desde no hay un token del jugador 2" elif res == GameTokenMoves.TOKEN_TO: player2TextError.value = "En la posición hacia ya hay un token" elif res == GameTokenMoves.INVALID_COORDS: player2TextError.value = "Alguna de las coordenadas no existe en el tablero" player2Button.on_click(on_move2) def move1(): ((fromX, fromY), (toX, toY)) = player.chooseMove(b) b.moveToken(GameTokens.PLAYER1, fromX, fromY, toX, toY) # Muestra display(box0) gui.printBoardHex(b.getMatrix(), False, b.fromVirtual) display(main_box)
def playUI(self): b = Board() player = self.players keyboard = '' while keyboard != '0': gui.printClear() if self.boardPrint == 1: gui.printBoardHex(b.getMatrix(), False, b.fromVirtual) elif self.boardPrint == 2: gui.printBoardHex(b.getMatrix(), True, b.fromVirtual) elif self.boardPrint == 3: gui.printBoardMatrix(b.getMatrix(), b.getLength()) (keyboard, keyboardToken) = gui.printGameMenuOption() if keyboard == '1': self.boardPrint = 1 elif keyboard == '2': self.boardPrint = 2 elif keyboard == '3': self.boardPrint = 3 elif keyboard == '4': gui.printFeatures(b.getFeatures(GameTokens.PLAYER2)) input() elif keyboard == '5': gui.printFeatures(b.getPlayerFeatures(GameTokens.PLAYER2)) input() elif keyboard == 'PASS': ((fromX2, fromY2), (toX2, toY2)) = player.chooseMove(b) b.moveToken(GameTokens.PLAYER1, fromX2, fromY2, toX2, toY2) if b.checkWin(GameTokens.PLAYER1): print("-> Has perdido la partida!") input() return elif keyboardToken is not None: coords = keyboard.split(',') token = (int(coords[0]), int(coords[1])) if token in b.getPlayerSlots(GameTokens.PLAYER2): goal = (b.getRadius(), -(b.getLength() - 1)) print("Suma cuadrada de distancia al extremo: " + str(b.hexDistance(token, goal))) print("Suma cuadrada de distancia al centro: " + str(b.verticalCenterDistance(token))) print( "Suma de maxima cantidad de saltos: " + str(b.maxHopsToGoal(token, GameTokens.PLAYER2, goal))) print() input() elif keyboard != '0': try: coords = keyboard.split() fromSlot = coords[0].split(',') toSlot = coords[1].split(',') (fromX, fromY) = (int(fromSlot[0]), int(fromSlot[1])) (toX, toY) = (int(toSlot[0]), int(toSlot[1])) res = b.moveToken(GameTokens.PLAYER2, fromX, fromY, toX, toY) if res == GameTokenMoves.INVALID_MOVE: print("-> La ficha en " + str((fromX, fromY)) + " no puede llegar a " + str((toX, toY)) + ". Intentelo de nuevo") input() elif res == GameTokenMoves.TOKEN_FROM: print("-> No hay una ficha suya en " + str((fromX, fromY)) + ". Intentelo de nuevo") input() elif res == GameTokenMoves.TOKEN_TO: print("-> Ya hay una ficha en " + str((toX, toY)) + ". Intentelo de nuevo") input() elif res == GameTokenMoves.INVALID_COORDS: print("-> No existe en el tablero la posición " + str((fromX, fromY)) + " o la posición " + str((toX, toY)) + ". Intentelo de nuevo") input() elif res == GameTokenMoves.VALID_MOVE: # Checkea si el jugador humano ganó luego de su jugada if b.checkWin(GameTokens.PLAYER2): self.boards.append(copy.deepcopy(b)) return GameResults.WIN # El turno pasa al otro jugador, que elige su jugada ((fromX2, fromY2), (toX2, toY2)) = player.chooseMove(b) b.moveToken(GameTokens.PLAYER1, fromX2, fromY2, toX2, toY2) # Agrega el tablero al tablero de turnos self.boards.append(copy.deepcopy(b)) # Checkea si el jugador automatico ganó luego de su jugada if b.checkWin(GameTokens.PLAYER1): return GameResults.LOSE except Exception as e: print(e) print( "-> La entrada ingresada no sigue el formato adecuado. Intentelo de nuevo" ) input()