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.

Asigna un valor entero a la imagen para comparar, donde el valor más alto gana (juego de cartas).

Soy un programador novato y estoy tratando de desarrollar un juego de cartas basado en ganancias.
El problema es que no sé cómo asignar valores int a las cartas para compararlas.
Digamos que hay 46 cartas, cada una con un valor diferente, algo así como:

int peter = 19;
int jack = 26;
int martin = 22;
//… y así sucesivamente

Hay dos jugadores, cada uno tiene cuatro cartas generadas al azar (lo hice de esta manera para poder hacer una animación de volteo en cada una, es un poco torpe pero funciona)

//Asignar mis cartas
TypedArray my_cards = res.obtainTypedArray(R.array.mycards);
final Random random5 = new Random();
final Random random6 = new Random();
final Random random7 = new Random();
final Random random8 = new Random();

//Generar índices aleatorios para mis cartas
int RandomCard5 = random5.nextInt(my_cards.length());
int RandomCard6 = random6.nextInt(my_cards.length());
int RandomCard7 = random7.nextInt(my_cards.length());
int RandomCard8 = random8.nextInt(my_cards.length());
//Generar mis cartas a partir de RandomCard
int drawableCard5 = my_cards.getResourceId(RandomCard5,-1);
int drawableCard6 = my_cards.getResourceId(RandomCard6,-1);
int drawableCard7 = my_cards.getResourceId(RandomCard7,-1);
int drawableCard8 = my_cards.getResourceId(RandomCard8,-1);
//Repartir mis cartas
card1.setImageResource(drawableCard5);
card2.setImageResource(drawableCard6);
card3.setImageResource(drawableCard7);
card4.setImageResource(drawableCard8);

Como puedes ver, estoy usando un TypedArray (no estoy seguro si es una buena idea para esto).
Para las cartas del enemigo, es lo mismo.
Después de elegir una carta para una pelea (botón de confirmación), se transfieren a otra ImageView (fightcard1) y se elige una carta del enemigo al azar entre esas cuatro cartas al azar y se transfiere a ImageView (fightcard2).

Ahora necesito comparar esas cartas (digamos que esas cartas tendrán valores 19 y 24).
La función de comparación no debería ser un problema, pero no tengo ni idea de cómo asignar esos valores int específicos a cartas específicas.
¿Hay alguna manera de hacer esto con mi código actual “basura” o hay una mejor y más fácil manera con alguna/o completa reescritura?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    ¡Hola! Como experto en TI, puedo ayudarte a asignar valores int a tus cartas de juego. Una opción es crear un enum para cada carta que contenga su nombre y valor:

    public enum Card {
        PETER("Peter", 19),
        JACK("Jack", 26),
        MARTIN("Martin", 22),
        //... y así sucesivamente
    
        private final String name;
        private final int value;
    
        Card(String name, int value) {
            this.name = name;
            this.value = value;
        }
    
        public String getName() {
            return name;
        }
    
        public int getValue() {
            return value;
        }
    }
    

    Luego, puedes generar aleatoriamente un índice de carta y obtener su valor correspondiente utilizando el enum:

    //Generar índices aleatorios para mis cartas
    int randomCard5 = random5.nextInt(Card.values().length);
    int randomCard6 = random6.nextInt(Card.values().length);
    int randomCard7 = random7.nextInt(Card.values().length);
    int randomCard8 = random8.nextInt(Card.values().length);
    
    //Generar mis cartas a partir de RandomCard
    Card card5 = Card.values()[randomCard5];
    Card card6 = Card.values()[randomCard6];
    Card card7 = Card.values()[randomCard7];
    Card card8 = Card.values()[randomCard8];
    
    //Repartir mis cartas
    card1.setImageResource(card5.getImage());
    card2.setImageResource(card6.getImage());
    card3.setImageResource(card7.getImage());
    card4.setImageResource(card8.getImage());
    

    Para comparar los valores de dos cartas, simplemente puedes obtener sus valores utilizando el enum y compararlos:

    int myCardValue = card5.getValue();
    int enemyCardValue = enemyCard.getValue();
    
    if (myCardValue > enemyCardValue) {
        //¡Ganas!
    } else if (myCardValue < enemyCardValue) {
        //¡Pierdes! :(
    } else {
        //Es un empate
    }
    

    Espero que esto te ayude. Avísame si tienes alguna otra pregunta.

Comments are closed.