Esempio n. 1
0
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"
Esempio n. 2
0
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)
Esempio n. 3
0
    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
Esempio n. 4
0
                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)
Esempio n. 5
0
    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()