Código para barajar cartas en Java.

Iniciado por JesusIII, 16 Noviembre 2015, 23:32 PM

0 Miembros y 1 Visitante están viendo este tema.

JesusIII

Hola, estoy aprendiendo java y es la primera vez que escribo en el foro, espero que me podáis ayudar. La cosa es que tengo que hacer un juego llamado "7 y medio". Lo que me preocupa es el barajado.
Tengo un error (que marcaré con rojo). Según el profesor tengo que crear una clase Carta con dos atributos (cara y palo). No lo acabo de entender bien. Aquí dejo mi código. Gracias y si se puede mejorar decidmelo.

package juego_7ymedio;
import java.util.Random;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;

public class baraja {
   

   private final int ncartas=52;
   
   
   
   public void barajar_cartas(){
      
      //Elegimos el tipo de mazo
      String paquete="0";
      Scanner teclado2 = new Scanner(System.in);
      System.out.println("Elige el tipo de baraja");
      paquete=teclado2.nextLine();
      String cara[];
      String palo[];
      
      switch(paquete){
      
      case "E":
         //elegimos la baraja española
         cara=new String[]{"Uno", "Dos", "Tres", "Cuatro","Cinco","Seis","Siete","Ocho","Nueve","Diez","Once","Doce"};
         palo=new String[] {"Oros","Espadas","Copas","Bastos"};
         break;
         
      case "F":
         //elegimos la baraja francesa
         cara=new String[] {"As", "Dos", "Tres", "Cuatro","Cinco","Seis","Siete","Ocho","Nueve","Jota","Caballo","Rey"};
         palo=new String[] {"Picas","Rombos","Treboles","Corazones"};
         
         break;
         
      default:
         System.out.println("No has elegido la correcta, vuelve a elegir");
         break;
      }
      //creamos el arraylist donde irán las cartas y las meteremos
      ArrayList<baraja> arraycartas= new ArrayList<baraja>();
      for(int i=0;i<=cara.length;i++){
         for(int j=0;j<=palo.length;j++){
            arraycartas.add(new Carta(cara,palo[j]));
         }
            
   
         }
      //Ahora barajamos
      Collections.shuffle(arraycartas);
      //sacamos por pantalla a modo de prueba
      for(int k=0;k<=ncartas;k++){
         arraycartas.get(k);
            
               System.out.println("la carta que ha salido es:" +arraycartas.get(k));
      
            }   
      }
      
   }



DarK_FirefoX

Pues como te dice tu profesor, deberías orientar a objetos la solución de tu problema (Programación Orientada a Objetos (POO/OOP)).

En tal caso debes crear una clase Carta, que tenga dos propiedades, una que identifique el Palo y otra el Número (o cara, como sea que le llames). La manera de identificarla será escogida por ti, puedes hacerlo con Strings o utilizando Enum (investiga sobre este último).

Luego te será más facil crear la clase Baraja, a la cual creo que deberías cambiarle la lógica.

Primero, deberías tener un constructor, dentro del cual es donde escoges que tipo de baraja utilizar y utilizar campos para asignarle y guardar los valores de las cartas. Para guardar estos paquetes puedes crear clases separadas también, una clase que se llame BarajaFrancesa y otra BarajaEspañola, que ya tenga definido los valores de las caras y los palos.

Ahora, como tal, el método barajar_cartas(); solo se ocupara de hacer el ArrayList que sea aleatorio, de la manera que lo hagas.

Otra cosa, siempre trata de mantener la lógica, separada de la interfaz gráfica o de la consola (entrada de datos), esto hará que tu diseño de clases pueda ser rehusable y/o extendible.

Cualquier duda pregunta. Ahh, y utiliza las etiquetas GeSHi para publicar código.

Salu2s