es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hacer que un Usuario elija una carta UNO por su código de carta, y no por índice. Ejemplo: 1 – Has elegido Rojo 1.

Mi pregunta es cómo hacer que un usuario elija una carta de uno por su código de carta y no por su índice.

Este juego de uno contiene número, color y código de carta: el usuario debe elegir una carta para jugar según el código de carta 1-41.

El juego funciona bien cuando el usuario elige la carta por su índice, sin embargo, cuando intento hacer que el usuario ingrese el código de carta, tengo problemas para buscar el índice del código de carta especificado en el ArrayList “hand” del jugador. El ArrayList “Card” contiene número, color y código de carta. ¡Espero que esta pregunta sea lo suficientemente clara!

Gracias de antemano

int choice = 0; //El índice de la carta que elige el usuario
try {
    choice = askForInput();
} catch (IOException e) {
    e.printStackTrace();
}

if (choice == -1) { //El usuario quiere sacar una carta
    user.addToHand(deck1.drawCard());
    System.out.println("¡Sacaste una carta!");
    upNext = checkNextPlayer();
    computersPlay();

} else if (choice == -2) { //El usuario quiere salir
    winner = "Nadie";
    try {
        in2.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("¡Te retiraste!");
    return;

} else { //El usuario quiere jugar una carta

    if (!validInput(user, choice)) {
        userTurn();
    } else {

        centerCard = user.getCard(choice);
        user.removeFromHand(choice);
        System.out.println("Jugaste: " + centerCard);
    }

    // ¿Creo que el problema es llamar al índice sin pasar una carta?

}

CLASE HAND
     * Muestra la carta en ese índice de tu mano sin quitarla
     */
    public Card getCard(int index)
    {
        return pHand.get(index);
    }
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para permitir que el usuario elija una carta de Uno por el código de la carta en lugar del índice, puede modificar la función getCard() en la clase Hand para buscar la carta con el código de carta especificado y devolverla:

    public Card getCard(int cardCode) throws IllegalArgumentException
    {
        for (Card c : pHand)
        {
            if (c.getCardCode() == cardCode)
            {
                return c;
            }
        }
        throw new IllegalArgumentException("No se encontró la carta con el código " + cardCode + " en la mano.");
    }
    

    Luego, en la lógica del juego donde el usuario juega una carta, puede pedir al usuario que ingrese un código de carta en lugar de un índice y llamar a la función getCard() modificada:

    int choice = -1; //El código de la carta que elige el usuario
    try {
        choice = pedirEntrada();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    if (choice == -1) { //El usuario desea robar una carta
        user.addToHand(deck1.drawCard());
        System.out.println("¡Robaste una carta!");
        upNext = verificarSiguienteJugador();
        jugarComputadoras();
    
    } else if (choice == -2) { //El usuario desea salir
        winner = "Nadie";
        try {
            in2.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("¡Te retiraste!");
        return;
    
    } else { //El usuario desea jugar una carta
    
        Card chosenCard = null;
        try {
            chosenCard = user.getCard(choice);
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
            turnoUsuario();
            return;
        }
    
        if (!entradaValida(user, chosenCard)) {
            turnoUsuario();
        } else {
    
            centerCard = chosenCard;
            user.removeFromHand(chosenCard);
            System.out.println("Jugaste: " + centerCard);
    

    Esta lógica modificada le pide al usuario un código de carta, llama a la función getCard() modificada para obtener el objeto Card correspondiente y luego continúa con el resto de la lógica del juego como de costumbre. Si el código de carta especificado no se encuentra en la mano del usuario, se lanza una excepción y se le pide al usuario que ingrese nuevamente un código de carta válido. Tenga en cuenta que esta implementación asume que el código de carta ingresado por el usuario es un código de carta válido en el juego, por lo que es posible que desee agregar una validación adicional del error o la entrada según corresponda.

Comments are closed.