none
Dice count c# RRS feed

  • Pregunta

  • Hola buenas tardes, no se si va aqui el post.. ante todo dar las gracias a esta maravillosa comunidad, 

    estoy realizando un proyecto jeje y bueno me quedé un poco atascado en un problemilla..

    con este codigo muestro un numero random..

    string[] numbers = new string[] { "1", "2", "3", "4", "5", "6" };
    if (ExtraData == "-1")
    ExtraData = RandomizeStrings(numbers)[0];
    UpdateState();

    y se aplica el numero.. y ahora viene mi pregunta.. como podria mostrar el Dice count? es decir.. si sale el 1 diga.. ha salido el 1, despues si sale el 6 diga.. llevas 7 si sale el 5 diga llevas 12 y asi y cuando llegue a 21 diga has ganado! y si pasa de 21 diga has perdido 

    ando un poco perdido y no se me ocurre la forma de hacerlo.. 

    Un cordial saludo! y gracias por adelantado!

    sábado, 1 de abril de 2017 16:02

Respuestas

  • D.M.X,

    Entiendo, te sugiero implementes una clase con los miembros necesarios para dar soporte al juego. Te dejo un código de ejemplo de inicio bastante simple (ya que desconozco tu nivel de comprensión en POO), revisa, prueba y extiende los cambios que consideres oportuno, de hecho hace falta algunas validaciones, la funcionalidad de sortear el jugador que lanza primero los dados, etc., te servirá como punto de inicio.

    - Clase 

    public class BlackJackDados
    {
    	public class Jugador
    	{
    		public Jugador()
    		{
    			Puntos = new List<int>();
    		}
    
    		public string Id { get; set; }
    		public List<int> Puntos { get; set; }
    	}        
    
    	List<Jugador> listaJugadores = new List<Jugador>();
    
    	public void AgregarJugador(string Id)
    	{
    		listaJugadores.Add(new Jugador() { Id = Id });
    	}
    
    	public string JugadorPorIndice(int index)
    	{
    		return listaJugadores[index].Id;
    	}
    
    	public void InicializarPuntos()
    	{
    		foreach (var item in listaJugadores)
    		{
    			item.Puntos.Clear();
    		}
    	}        
    
    	public int LanzarDados(int NumeroDados)
    	{
    		int puntos = 0;
    		for (int i = 0; i < NumeroDados; i++)
    		{
    			puntos += new Random().Next(1, 7);
    		}
    
    		return puntos;
    	}
    
    	public int AgregarPuntos(string Id, int Puntos)
    	{
    		var jugador = listaJugadores.Where(x => x.Id == Id).FirstOrDefault();
    
    		if (jugador != null)
    		{
    			jugador.Puntos.Add(Puntos);
    
    			return jugador.Puntos.Sum();
    		}
    
    		return 0;
    	}        
    }

    - Uso

    BlackJackDados juegoBlackJack = new BlackJackDados();
    
    private void btnIniciarJuego_Click(object sender, EventArgs e)
    {
    	//Agregar jugadores
    	juegoBlackJack.AgregarJugador("J1");
    	juegoBlackJack.AgregarJugador("J2");
    
    	//"Asociar" el jugador a un botón
    	btnPlayerOne.Tag = juegoBlackJack.JugadorPorIndice(0);
    	btnPlayerTwo.Tag = juegoBlackJack.JugadorPorIndice(1);
    
    	//Vincular evento clic de cada botón a un único controlador
    	btnPlayerOne.Click += new System.EventHandler(this.LanzarDados);
    	btnPlayerTwo.Click += new System.EventHandler(this.LanzarDados);
    }
    
    private void LanzarDados(object sender, EventArgs e)
    {
    	string Jugador = ((Button)sender).Tag.ToString();           
    
    	int puntos = juegoBlackJack.LanzarDados(rdbNumeroDados1.Checked ? 1 : 2);
    	int acumuladoPuntos = juegoBlackJack.AgregarPuntos(Jugador, puntos);
    
    	if (Jugador == juegoBlackJack.JugadorPorIndice(0))
    		lblPuntaje1.Text = acumuladoPuntos.ToString();
    	else
    		lblPuntaje2.Text = acumuladoPuntos.ToString();
    
    	if (acumuladoPuntos == 21)
    	{
    		MessageBox.Show("¡HA GANADO!");
    	}
    	else if (Convert.ToInt32(lblPuntaje1.Text) == Convert.ToInt32(lblPuntaje2.Text))
    	{
    		juegoBlackJack.InicializarPuntos();
    	}
    	else if (acumuladoPuntos > 21)
    	{
    		MessageBox.Show("¡NO TUVO SUERTE POR HOY!");
    	}
    }

    - Jugando


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 1 de abril de 2017 22:23

Todas las respuestas

  • D.M.X,

    Algunas consideraciones:

    - ¿Por qué almacenas los números como cadenas?, define un array de números enteros.

    - La sumatoria de los 6 números que adjuntas -bajo cualquier orden- siempre resultará 21, no tiene sentido, debes agregar como mínimo 7 elementos, de hecho cuanto más elementos menor la probabilidad de acertar con el número 21, tampoco es necesario que inicie en uno ni que tenga un incremento de uno, tú defines la lista según el nivel de exigencia.

    Te dejo un ejemplo tipo, sobre ello has las modificaciones según consideres oportuno:

    private void btnRandomize_Click(object sender, EventArgs e)
    {
    	int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; //Lista de 10 números
    	List<int> selNumbers = new List<int>(); //Contiene los números seleccionados
    
    	while (selNumbers.Sum() < 21) //Iterar mientras la suma sea menor a 21
    	{
    		//Obtener número aleatorio que representa el índice del array
    		int indice = new Random().Next(0, numbers.GetLength(0));
    
    		//Asegurar que no se vuelva a seleccionar el mismo número
    		if (!selNumbers.Contains(numbers[indice]))
    		{
    			selNumbers.Add(numbers[indice]); //Agregar número a la lista
    
    			MessageBox.Show(string.Format("Seleccionado: {0}{2}{2}Acumulado: {1}",
    				numbers[indice], //Número seleccionado
    				selNumbers.Sum(), //Acumulado                        
    				Environment.NewLine));
    		}                
    	}
    
    	MessageBox.Show(selNumbers.Sum() == 21 ? "HA GANADO!!!" : "Lo sentimos, ha perdido!");
    }


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus
    sábado, 1 de abril de 2017 16:52
  • Gracias por ello, te comento..

    en el juego que ando creando hay un dado y el usuario le da click y el dado pues lanza el random que lo agrega a ExtraData por ejemplo el 1 o el 4 o el 6 o el 3 etc y el dado lo muestra, y los usuarios suelen poner 5 dados y se pone 3 arriba y 2 a los lados y el usuario tiene que tratar de hacer 21 con los dados ejemplo 

    dado 1 = 5

    dado 2 = 5

    dado 3 = 6 

    dado 4 = 4

    dado 5 = 1

    total 21, quiero que se haga la cuenta de los numeros que va saliendo no se si me explico... el proyecto que trato de hacer, es que se cuenten los numeros para indicar al usuario la cuenta que tiene del dado, si llega a 21 le muestra ha ganado, si pasa de 21 ha volado.. no se si me explico 

    un cordial saludo! y gracias!

    sábado, 1 de abril de 2017 18:23
  • D.M.X,

    ¿Intentas emular el juego de cartas BlackJack?, de ser así las reglas no son como las mencionas y antes de volver a escribir código es importante dejar claro las reglas del juego.

    El juego de dados 21 entiendo debería ser de la siguiente manera:

    • Se otorga un dado a cada uno de los jugadores (5) y se sortea un orden de lanzamiento.
    • Cada jugador puede lanzar el dado cuantas veces crea necesario y oportuno, claro intentando lograr obtener un total muy cercano a 21
    • Si el mismo jugador o el siguiente pasa de 21 pierde el juego y el ganador es el que obtuvo el número mas cercano a 21 o mejor aún 21.

    Lo que tu mencionas es lo siguiente:

    • 5 dados en mesa.
    • Cada jugador lanza el dado una sola vez.
    • Tras lanzar los 5 dados se corrobora si la sumatoria es 21, en cuyo caso habrá ganado el juego.

    Te agradeceré corrobores lo mencionado o hagas la observación que consideres oportuna antes de proponer algo de código.

    sábado, 1 de abril de 2017 19:23
  • Si quieres continuar con lo que tienes desarrollado y lo único que necesitas es contener y calcular el acumulado entonces fíjate en el ejercicio propuesto, se declara una lista de elementos de tipo entero y según se tiran los dados vas agregando (método Add()) los valores a la lista, para obtener la suma de los valores utilizas el método de extensión Sum() tal y como está escrito en el ejemplo.

    sábado, 1 de abril de 2017 19:27
  • Hola willams, es algo parecido si.. cada jugador (2) pues tiene (5) dados, primero los jugadores apuestan, despues se lanza 1 dado los dos jugadores entonces el numero alto sale primero.. y tiene que tratar lanzando los dados el que sea.. llegar a 21 si se pasa de 21 vuela y jugaria el otro jugador, si llega a 20 se planta y jugaria el otro jugador y si llega a 20 hacen RR que es repeticion y el jugador 1 lo lanza de nuevo hasta lograr los 21, de ser asi se planta automatico, el otro jugador si saca 23 pues volo y ya el jugador 1 gana esa apuesta, lo que quiero hacer es la cuenta de los numeros que lleva ese jugador da igual el dado que sea solo quiero que se sumen los numeros cuyos van saliendo, de todas formas voy a mirar el codigo mas detenidamente, espero si me he explicado bien.. 

    un cordial saludo y gracias!!

    sábado, 1 de abril de 2017 19:59
  • D.M.X,

    Entiendo, te sugiero implementes una clase con los miembros necesarios para dar soporte al juego. Te dejo un código de ejemplo de inicio bastante simple (ya que desconozco tu nivel de comprensión en POO), revisa, prueba y extiende los cambios que consideres oportuno, de hecho hace falta algunas validaciones, la funcionalidad de sortear el jugador que lanza primero los dados, etc., te servirá como punto de inicio.

    - Clase 

    public class BlackJackDados
    {
    	public class Jugador
    	{
    		public Jugador()
    		{
    			Puntos = new List<int>();
    		}
    
    		public string Id { get; set; }
    		public List<int> Puntos { get; set; }
    	}        
    
    	List<Jugador> listaJugadores = new List<Jugador>();
    
    	public void AgregarJugador(string Id)
    	{
    		listaJugadores.Add(new Jugador() { Id = Id });
    	}
    
    	public string JugadorPorIndice(int index)
    	{
    		return listaJugadores[index].Id;
    	}
    
    	public void InicializarPuntos()
    	{
    		foreach (var item in listaJugadores)
    		{
    			item.Puntos.Clear();
    		}
    	}        
    
    	public int LanzarDados(int NumeroDados)
    	{
    		int puntos = 0;
    		for (int i = 0; i < NumeroDados; i++)
    		{
    			puntos += new Random().Next(1, 7);
    		}
    
    		return puntos;
    	}
    
    	public int AgregarPuntos(string Id, int Puntos)
    	{
    		var jugador = listaJugadores.Where(x => x.Id == Id).FirstOrDefault();
    
    		if (jugador != null)
    		{
    			jugador.Puntos.Add(Puntos);
    
    			return jugador.Puntos.Sum();
    		}
    
    		return 0;
    	}        
    }

    - Uso

    BlackJackDados juegoBlackJack = new BlackJackDados();
    
    private void btnIniciarJuego_Click(object sender, EventArgs e)
    {
    	//Agregar jugadores
    	juegoBlackJack.AgregarJugador("J1");
    	juegoBlackJack.AgregarJugador("J2");
    
    	//"Asociar" el jugador a un botón
    	btnPlayerOne.Tag = juegoBlackJack.JugadorPorIndice(0);
    	btnPlayerTwo.Tag = juegoBlackJack.JugadorPorIndice(1);
    
    	//Vincular evento clic de cada botón a un único controlador
    	btnPlayerOne.Click += new System.EventHandler(this.LanzarDados);
    	btnPlayerTwo.Click += new System.EventHandler(this.LanzarDados);
    }
    
    private void LanzarDados(object sender, EventArgs e)
    {
    	string Jugador = ((Button)sender).Tag.ToString();           
    
    	int puntos = juegoBlackJack.LanzarDados(rdbNumeroDados1.Checked ? 1 : 2);
    	int acumuladoPuntos = juegoBlackJack.AgregarPuntos(Jugador, puntos);
    
    	if (Jugador == juegoBlackJack.JugadorPorIndice(0))
    		lblPuntaje1.Text = acumuladoPuntos.ToString();
    	else
    		lblPuntaje2.Text = acumuladoPuntos.ToString();
    
    	if (acumuladoPuntos == 21)
    	{
    		MessageBox.Show("¡HA GANADO!");
    	}
    	else if (Convert.ToInt32(lblPuntaje1.Text) == Convert.ToInt32(lblPuntaje2.Text))
    	{
    		juegoBlackJack.InicializarPuntos();
    	}
    	else if (acumuladoPuntos > 21)
    	{
    		MessageBox.Show("¡NO TUVO SUERTE POR HOY!");
    	}
    }

    - Jugando


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 1 de abril de 2017 22:23
  • Hola wiliams, gracias por el ejemplo, voy a ponerlo en practica, yo te digo mas o menos lo que quiero hacer..

    https://www.youtube.com/watch?v=_edgDkg91jw 

    te adjunto un video en el que se ve lo que quiero, pues bien fijate cuando lanzen los dados veras que hay un intermediario (de color azul) contando la cifra que va saliendo, pues quiero hacer que en vez de poner a un usuario contando las cifras, quiero que salga un mensaje diciendo la cifra que tiene en sí.. como dije al principio, el numero que sale en el dado es con el codigo que puse a principio del post, y bueno nada mas que añadir.

    Un abrazo y buen dia! y gracias!

    domingo, 2 de abril de 2017 1:17