Programando un Mazo de Cartas en C#

cards_png8480

La premisa era bastante simple, se debía realizar un juego de mesa, pero para llegar a el, se debia crear antes un Mazo de Barajas (Cartas de Poker).

Este mazo de cartas que veremos a continuación es bastante sencillo y facil de entender.

Me parecio interesante compartirlo, para que pueda observarse como un simple algoritmo puede solucionarnos un problema sin darnos mayor dolores de cabeza.

El mismo consta de una clase llamada «Mazo» , que en su interior contiene el constructor de la clase y un metodo llamado Extraer, este ultimo sera el encargado extraer una carta del mazo y devolvernosla convertida en string.

Clase Mazo:

namespace mazo
{
    class Mazo
    {
        Random random = new Random();
        int cantidad;
        int[] mazo;

        public enum Palo { pica, trebol, corazones, diamante };
        public enum Valor { Az, Dos, Tres, Cuatro, Cinco, Seis, Siete, Ocho, Nueve, Diez, Jota, Reina, Rey };

        public Mazo()
        {
            cantidad = 52;
            mazo = new int[cantidad];

            for (int i = 0; i < mazo.Length; i++)
               { mazo[i] = i; }
        }

        public int Cantidad()
            { return this.cantidad; } 

        public string Extraer()
          {
            if (cantidad > 0)
            {
                int azar = random.Next(cantidad);
                int carta;
                carta = mazo[azar];
                cantidad--;
                int carta_palo = carta / 13;
                int carta_valor = carta % 13;
                mazo[azar] = mazo[cantidad];
                string linea = ((Palo)carta_palo).ToString() + ((Valor)carta_valor).ToString();
                return linea;
            }
            else
                return "no hay mas cartas";
        }

    }
}

Implementacion de la clase Mazo:

namespace mazo
{
    public partial class Form1 : Form
    {
        public Form1()

        {
            InitializeComponent();

        }
        Mazo miMazo = new Mazo();

        private void button1_Click(object sender, EventArgs e)
        {

           listBox1.Items.Add(miMazo.Extraer());
           label1.Text = miMazo.Cantidad().ToString();
        }
    }
}

Breve explicación del algoritmo

Como se puede observar , lo primero que haremos sera crear un arreglo de de 52 elementos. Luego mediante el constructor de la clase cargaremos en el interior del arreglo las «cartas», pero no nos apuremos, todavía aun no son cartas..

El principal secreto esta en el método Extraer, dentro de este apuntamos hacia una posición, aleatoria del arreglo, y tomamos el numero que esta en su interior, decrementamos la variable «cantidad» de cartas y la carta de la ultima posición la movemos al lugar de la carta extraída, de modo tal que cuando tomemos nuevamente otra carta al azar lo hagamos en las 51 cartas restantes.

El otro secreto esta en la carta extraida, supongamos extraemos la carta que su valor es 50, si dividimos esta carta por 13 (cantidad por palos), obtendremos el palo «3»  y si aplicamos el operador Mod también llamado Modulo para obtener el resto de la division, obtendremos el valor «11″ lo que correspondería al valor de la carta.

Luego casteamos estos valores mediante enumeradores y obtendremos que la carta extraída es una Reina de Diamantes.

mazo
Ejemplo ya compilado

En una próxima oportunidad, trabajaremos un Mazo de Cartas pero con Objetos y ArrayList…

¿Te ha sido de utilidad ?,  ¿Hay algo por corregir ? Comenta abajo.

2 comentarios sobre “Programando un Mazo de Cartas en C#”

    1. Hola Mart, lamentablemente no lo tengo hecho en vb6, pero puedes hacerlo tú mismo siguiendo la explicación del algoritmo, cualquier duda acá estamos, un abrazo!!

Deja un comentario aqui