German Pinilla
Javier Amador Amador
Ese codigo da gusto leerlo, esta brutal amigo, ojala puedas enseñarnos un video de como funciona en consola.
Luis Jacobo Hernandez Campuzano
Muy buen codigo, facil de leer y ordenado Felicidades!
Aprender a programar no es solo escribir código que funcione, sino mejorarlo cuando detectas que algo se puede hacer mejor. Eso es refactorización en C#: revisar tu código, identificar redundancias y compactarlo sin perder la lógica. En la construcción de un mini juego de 21, ese proceso revela bugs sutiles con while, do while y variables acumuladas.
¿Qué es refactorizar y por qué importa al usar while?
Refactorizar significa reescribir partes de tu código para que sean más eficientes, legibles y mantenibles, sin cambiar lo que hace.
En el juego de 21, el primer problema apareció porque el programa pedía tres veces al usuario que escribiera yes dentro de un or. La solución fue crear una variable auxiliar llamada controlOtraCarta, inicializada vacía, que guarda una sola lectura de Console.ReadLine() y se compara después en la condición del do while [02:00].
¿Qué es una variable auxiliar? Es una variable que guarda temporalmente un valor para usarlo en otra parte del programa, evitando repetir la misma operación varias veces.
Con ese cambio, el flujo quedó limpio: el jugador responde una vez y el do while evalúa esa única respuesta.
¿Cómo agregar dificultad con Random.Next en C#?
Un juego sin oponente real no es juego. Por eso entra el dealer, controlado por la computadora.
La instrucción Random.Next(12, 23) genera un número aleatorio entre 12 y 23 que simula la mano del dealer [04:30]. Aquí surgió un detalle clave: el objeto random se había instanciado dentro del do while, lo que significa que solo existía dentro de ese bloque. Al moverlo arriba, pasó a estar disponible en todo el programa.
Este detalle conecta con un concepto fundamental: el alcance de las variables o scope. Una variable creada dentro de un bloque vive solo en ese bloque.
¿Qué hace Random.Next en C#? Devuelve un número entero aleatorio dentro del rango que indiques.
Random.Next(12, 23)da valores desde 12 hasta 22 inclusive.
Para mostrar la jugada del dealer, basta con un Console.WriteLine($"El dealer tiene {totalDealer}!"); usando interpolación de cadenas con el signo $.
¿Por qué se acumulan valores en un ciclo while?
Aquí apareció el bug más interesante. Después de varias partidas seguidas, el juego decía te pasaste de 21 aunque la suma real fuera 17.
¿La razón? Las variables totalJugador y totalDealer nunca se reseteaban entre rondas. Cada vez que el jugador volvía a empezar, los puntos anteriores seguían sumando. En el mundo físico te quitan las cartas y revuelven el mazo; en código, tienes que hacerlo tú.
La solución fue colocar al inicio del while(true) estas dos líneas:
csharp totalJugador = 0; totalDealer = 0;
Así, cada vez que el ciclo principal vuelve a ejecutarse, las variables arrancan limpias [07:15].
¿Cuándo debo resetear variables dentro de un ciclo?
Siempre que una variable acumule valores en cada iteración y necesites un estado fresco al reiniciar el flujo. Si tu lógica depende de empezar en cero (puntajes, contadores, totales), el reseteo va al inicio del ciclo, no al final.
Esta es una de esas lecciones que solo aprendes probando tu programa a conciencia, jugando varias veces y observando si los resultados tienen sentido.
¿Cómo se prueba un programa para detectar bugs?
Probar no es ejecutar una vez y celebrar. Es repetir el flujo varias veces, con distintos valores, hasta que el comportamiento sea consistente.
En el juego de 21, la prueba consistió en jugar varias rondas seguidas:
En las tres, los totales se reiniciaron correctamente. Sin esa validación, el bug de acumulación habría pasado desapercibido.
Habilidades y conceptos que se trabajan en esta clase
Estos son los puntos técnicos que dejaste anclados al construir el juego:
controlOtraCarta como string que guarda la respuesta del usuario [02:00].do while.random fuera del do while para que viva en todo el programa.$: imprimir valores dentro de un Console.WriteLine.Reto: lleva un juego de la vida real a C#
Con muy poco código construiste una abstracción de un juego de casino. Ahora te toca a ti: piedra, papel o tijera, una variación de 21 con tope en 42, o cualquier juego que te guste. Modifícalo, métele tu creatividad y compártelo.
Déjame en los comentarios una imagen del código, un link al video o un clip por Twitter mostrando tu versión. ¿Qué juego vas a construir?
German Pinilla
Javier Amador Amador
Ese codigo da gusto leerlo, esta brutal amigo, ojala puedas enseñarnos un video de como funciona en consola.
Luis Jacobo Hernandez Campuzano
Muy buen codigo, facil de leer y ordenado Felicidades!
Mi juego de piedra papel o tijeras
Saludos!!
Console.WriteLine("Piedra papel o tijeras UwU!"); bool juego = true; int jugador = 0; Random rdn= new Random(); int oponente = 0; int maquina = 0; int usuario = 0; int empate = 0; string[] opciones = {"NA","La maquina elijio Piedra","La maquina elijio Papel","La maquina elijio tijeras" }; while (juego == true) { oponente = rdn.Next(1, 3); Console.WriteLine("1 Elije Piedra\n2 Elije papel\n3 Elije tijeras"); jugador=Convert .ToInt32(Console.ReadLine()); Console.WriteLine(opciones[oponente]); if (jugador == oponente) { Console.WriteLine("Juego empatado!!"); empate++; } else { switch (jugador) { case 1: //jugador juega piedra if (oponente == 2) { Console.WriteLine("La maquina GANA"); maquina++; } else { Console.WriteLine("El usuario GANA"); usuario++; } break; case 2://jugador juega papel if (oponente == 3) { Console.WriteLine("La maquina GANA"); maquina++; } else { Console.WriteLine("El usuario GANA"); usuario++; } break; case 3://Jugador juega tijeras if (oponente == 1) { Console.WriteLine("La maquina GANA"); maquina++; } else { Console.WriteLine("El usuario GANA"); usuario++; } break; } } Console.WriteLine("Si desea continuar presione enter \nSi desea salir presione 0"); if (Console.ReadLine() == "0") { juego = false; } } Console.WriteLine("Total de Juegos gandos"); Console.WriteLine($"El Usuario Gano: {usuario} juegos"); Console.WriteLine($"La Maquina Gano: {maquina} juegos"); Console.WriteLine($"Se empataron: {empate} juegos");
Javier Amador Amador
Aquí dejo mi pequeño aporte, un juego muy sencillo de Pokémon.
Si les interesa verlo, les dejo el enlace del video:
Joel Angel David Barrantes Palacios
esta buena la idea, sin embargo existen librerias que te permiten escribir letras o dibujos con otras letras
Juan Fernando Ramirez Montes
hay una falla que cuando el jugador puede seguir jugando aunque ya se haya pasado
Jhoan Sebastián Lopera Gallego
De acuerdo
José Daniel Alfaro Pallarés
Totalmente de acuerdo.
John Alexander Mahecha Velasco
Meital Srougo
Este era el comentario que buscaba, gracias <3
Profundizando un poco acerca de los conceptos encontré documentación de los objetos y decidí adaptarla al código del juego, agradecería mucho su feedback.
De antemano una disculpa por la falta de comentarios.
<code> //Realizamos el juego de blackjack para seguir las practicas del curso de platzi //Sumamos el el array de cartas class Juego { internal int[] jugador = { 0, 0 }; internal int[] dealer = { 0, 0 }; internal string mensaje = ""; static int[] BeginCards() { System.Random rand = new System.Random(); int[] res = {rand.Next(1, 12), rand.Next(1, 12) }; return res; } static void StartGame() { int totalJugador = 0; int totalDealer = 0; System.Random rand = new System.Random(); Juego o = new Juego(); o.jugador = BeginCards(); o.dealer = BeginCards(); totalJugador = sumArray(o.jugador); totalDealer = sumArray(o.dealer); string jugar = ""; if (totalJugador == 21) { //si en la primera oportunidad obtenemos el 21 entonces ganamos Console.WriteLine($"Felicitaciones, has ganado,Tus cartas son {o.jugador[0]} y {o.jugador[1]}"); Console.WriteLine("¿Quieres volver a jugar?"); jugar = Convert.ToString(Console.ReadLine()).ToUpper(); if (jugar == "SI") { StartGame(); } } else { do { //Mostrar al jugador las cartas y preguntar si deséa continuar Console.WriteLine($"Tus cartas son {string.Join(", ",o.jugador)} ¿Qieres otra carta?"); string respuesta = Convert.ToString(Console.ReadLine()); if (respuesta.ToUpper() != "NO") { int carta = rand.Next(1, 12); o.jugador = o.jugador.Append(carta).ToArray(); totalJugador += carta; if (totalJugador > 21) { Console.WriteLine($"Lastima, has perdido, Tus cartas son {string.Join(", ", o.jugador)}\n\ntotal:{totalJugador}"); break; } } else if (totalJugador > totalDealer && totalJugador < 21 || totalDealer > 21) { Console.WriteLine($"Felicitaciones, has ganado, el Dealer tenía {string.Join(",",o.dealer)}"); break; } else { Console.WriteLine($"Lastima, has perdido, el Dealer tenía {string.Join(",", o.dealer)}"); break; } } while (true); } } static int sumArray(int[] array) { int result = 0; foreach (int number in array) { result = result + number; } return result; } static void Main() { StartGame(); } }
Filleral Mahecha
Miguel Reyes Venavides
Lo que modifique yo fue hacer que el repartidor tuviera una personalidad mas picara, te insulta y se emociona cuando juega contigo:
// See for more information
Console.WriteLine("¡Hola! Ven pasa, tenemos galletas");
int totalJugador = 0;
int totalDealer = 0;
int num = 0;
string message = "";
string controlOtraCarta = "";
string switchControl = "menu";
System.Random random = new System.Random();
//Blackjack. Juntar 21 o mas que el repartidor ganas,
//te pasas de 21 o tienes menos que el repartidor pierdes
while (true) {
totalJugador = 0;
totalDealer = 0;
switch (switchControl)
{
case "menu":
Console.WriteLine("Bienvenido al c a s i n o ");
Console.WriteLine("Escribe '21' para jugar al 21 ");
switchControl = Console.ReadLine();
break;
case "21":
do
{
random = new System.Random();
num = random.Next(1, 12);
totalJugador = totalJugador + num;
Console.WriteLine("¨Vamos Shrek, firma¨. ejem.. digo... Toma una carta ");
Console.WriteLine($"¡Valla, valla! Te salió el numero: {num} ");
Console.WriteLine("¿Quieres otra?");
controlOtraCarta = Console.ReadLine();
} while (controlOtraCarta == "si" ||
controlOtraCarta == "Si" ||
controlOtraCarta == "yes");
totalDealer = random.Next(12, 23);
Console.WriteLine($" ¡Buum! Yo tengo {totalDealer} ¡En tu cara perra!");
if (totalJugador > totalDealer && totalJugador < 22)
{
message = "venciste al repartidor, ¡Felicidades pequeña perra!";
switchControl = "menu";
}
else if (totalJugador > 21)
{
message = "Te pasaste de 21, ¡Cagaste puerca! ";
switchControl = "menu";
}
else if (totalJugador <= totalDealer)
{
message = "Perdiste contra el repartidor, cagaste puta";
switchControl = "menu";
}
else
{
message = "Decisión no valida";
}
Console.WriteLine(message);
break;
default:
Console.WriteLine("¡Oye puta! Lo que ingresaste no es valido en este c a s i n o ");
break;
}
}
Norman Sanchez
Aquí les comparto mi código del juego rock, paper or scissors, lo intente hacer corto, cualquier comentario se agradece
using System.Linq.Expressions;
using System.Reflection.Metadata.Ecma335;
Console.WriteLine("Hello, World!");
Console.WriteLine("Welcome to game rock, paper scissors");
int jugador = 0;
int maquina = 0;
System.Random random = new System.Random();
bool continueGame = true;
while(continueGame)
{
Console.WriteLine("Escoge tu armada: \n 1 = rock 2 = paper 3 = scissors");
jugador = Convert.ToInt32(Console.ReadLine());
maquina = random.Next(1, 3);
switch (jugador)
{
case 1:
if (jugador == maquina)
{
Console.WriteLine("ROCK vs ROCK");
Console.WriteLine("Empate entre jugador y maquina");
}
else if(maquina == 2)
{
Console.WriteLine("ROCK vs PAPER");
Console.WriteLine("Gano la maquina, paper le gana a rock");
}
else if(maquina == 3)
{
Console.WriteLine("ROCK vs SCISSORS");
Console.WriteLine("Gano el jugador, rock le gana a scissor");
}
break;
case 2:
if (jugador == maquina)
{
Console.WriteLine("PAPER vs PAPER");
Console.WriteLine("Empate entre jugador y maquina");
}
else if (maquina == 1)
{
Console.WriteLine("PAPER vs ROCK");
Console.WriteLine("Gano el jugador, paper le gana a rock");
}
else if (maquina == 3)
{
Console.WriteLine("PAPER vs SCISSORS");
Console.WriteLine("Gano la maquina, scissors le gana a paper");
}
break;
case 3:
if (jugador == maquina)
{
Console.WriteLine("SCISSORS vs SCISSORS");
Console.WriteLine("Empate entre jugador y maquina");
}
else if (maquina == 1)
{
Console.WriteLine("SCISSORS vs ROCK");
Console.WriteLine("Gano la maquina, rock le gana a scissors");
}
else if (maquina == 2)
{
Console.WriteLine("SCISSORS vs PAPER");
Console.WriteLine("Gano el jugador, scissors le gana a paper");
}
break;
}
Console.WriteLine("¿Deseas seguir jugando?");
string seguir = Console.ReadLine();
if (seguir == "No" || seguir == "no" || seguir == "not")
{
continueGame = false;
}
}
Sergio Daniel Flamenco
Código de Piedra Papel Tijera en C#
static void Main(string[] args)
{
int TiroPc = 0;
int TiroJugador = 0;
int totalPc = 0;
int totalJugador = 0;
int TotalEmpate = 0;
string mensaje = "";
int numJugadas = 0;
bool isValid;
string input = "";
do
{
Random r = new Random();
TiroPc = r.Next(1, 3);
do
{
Console.Write("Elija 1: Papel | 2: Piedra | 3: Tijera \n");
input = Console.ReadLine();
isValid = int.TryParse(input, out TiroJugador);
if (!isValid)
{
Console.WriteLine("Entrada no válida. Por favor, ingresa un número entero.");
}
}
while (!isValid);
TiroJugador = Convert.ToInt32(input);
if (TiroJugador == 1 || TiroJugador == 2 || TiroJugador == 3)
{
Console.WriteLine($"Jugador: {TiroJugador} PC: {TiroPc}");
if (TiroJugador == 1 && TiroPc == 1 || TiroJugador == 2 && TiroPc == 2 || TiroJugador == 3 && TiroPc == 3)
{
mensaje = "Empate";
TotalEmpate = TotalEmpate + 1;
numJugadas = numJugadas + 1;
}
else if (TiroJugador == 1 && TiroPc == 2 || TiroJugador == 2 && TiroPc == 3 || TiroJugador == 3 && TiroPc == 1)
{
mensaje = "Ganaste";
totalJugador = totalJugador + 1;
numJugadas = numJugadas + 1;
}
else
{
mensaje = "Perdiste";
totalPc = totalPc + 1;
numJugadas = numJugadas + 1;
}
Console.WriteLine(mensaje);
}
else
{
Console.WriteLine("Opción incorrecta");
}
} while (totalPc < 3 && totalJugador < 3);
Console.WriteLine($"Puntuación final: Jugador: {totalJugador} | PC: {totalPc} | Empate: {TotalEmpate}");
Sergio Daniel Flamenco
Natalia Castro
Hola!
Sería correcto modificar la condición de while de la siguiente forma para que el juego termine al pasarse de 21? Y que no siga dando cartas.
while ( (controlOtraCarta == "si" || controlOtraCarta == "Si" || controlOtraCarta == "yes") & totalJugador<=21);
Ricardo Celis
Profesorsiiii es una muy buena idea! Muy bien pensado Nata =)
Carlos andres Orduz
no tengo errores pero no puedo correr el código de la misma forma ¿, que debo hacer?
Rolando Fernández
Comparte tu código para sea mas sencillo ayudarte.
Maria Paz Costamagna
Hola, este es mi juego de dados. El objetivo es llegar a 21. ¡Buena suerte!
using System.Linq.Expressions;
int puntosjugador = 0;
int puntoscomputadora = 0;
string swichControl = "";
string nombreJugador = "";
System.Random random = new System.Random();
while (true)
{
if (nombreJugador == "")
{
Console.WriteLine("C A R R E R A D E D A D O S");
Console.WriteLine("El primero que llega a 21 gana!");
Console.WriteLine("Ingresa tu nombre para jugar");
nombreJugador = Console.ReadLine();
Console.WriteLine("Listo para jugar? (s/n)");
swichControl = Console.ReadLine();
}
switch (swichControl)
{
case "s":
puntoscomputadora = 0;
puntosjugador = 0;
while(puntoscomputadora <= 21 && puntosjugador <= 21)
{
int numJugador = random.Next(1, 7);
int numComputadora = random.Next(1, 7);
puntosjugador += numJugador;
puntoscomputadora += numComputadora;
Console.WriteLine("Tu número es " + numJugador + " y tu puntaje actual es: "+ puntosjugador);
Console.WriteLine("El número de la computadora es " + numComputadora + " y su puntaje actual es: " + puntoscomputadora);
}
if(puntosjugador >= 21)
{
Console.WriteLine($"Felicitaciones {nombreJugador} ganaste con {puntosjugador} puntos");
Console.WriteLine("Quieres jugar otra ronda? (s/n)");
swichControl = Console.ReadLine();
} else if (puntosjugador == puntoscomputadora)
{
Console.WriteLine($"EMPATE ENTRE {nombreJugador} Y LA COMPUTADORA");
Console.WriteLine("Quieres jugar otra ronda? (s/n)");
swichControl = Console.ReadLine();
}
else
{
Console.WriteLine($"Gana la computadora con {puntoscomputadora} puntos");
Console.WriteLine("Quieres jugar otra ronda? (s/n)");
swichControl = Console.ReadLine();
}
break;
case "n":
Console.WriteLine("Gracias por jugar");
nombreJugador = "";
// Salir del bucle principal para terminar el programa de forma natural
break;
}
}
Victor Manuel Roche Chami
Quiero aportar las modificaciones que le hice al juego de 21, para que tenga ciertas funcionalidades extras (nada del otro mundo), pero no se como le hacen que les sale todo el código bien bonito, a mi se pega pero solo parte del código sale bien, lo otro sale fuera..... Como le hacen?
Ludwin Eduardo Escobar Flores
En el edito hay un botón con los signos "< / >" y luego colocas tu código entre plantilla de puntos
//aquí va el código
Juan José Zamora Jiménez
Eduard Camilo Acosta Beltran
Diego Alejandro Muñoz Arcos
Luis Ortiz
Guillermo Herrera
El bendito Dealer me empato
Santiago Andrés Riaño Martínez
Este es mi aporte al reto. He hecho un juego de piedra, papel y tijera para un solo jugador.
Asi quedo:
Trate de ordenarlo con el atajo o formatero de la fuente que tiene C#, que se hace con primero Ctrl + k > Ctrl +d son dos atajos el primero espera validación del segundo y luego hace el formateo se supone que ordena todo el código para que sea más legible; como en Eclipse JAVA que es mas facil solo es un unico atajo Ctrl + Shift + f
Les comparto mi codigo en pantallazos ya que es muy largo. Es una variacion del casino.
Este es mi aporte, añadí cuando el dealer se pasa de 21 pierde, también cuando el jugado empata con el Dealer, se muestra como las reglas están a favor del dealer por lo tanto el jugador pierde.
if (totalJugador > totalDealer && totalJugador < 22) { message = "venciste al Dealer, Felicidades"; switchControl = "menu"; } else if (totalJugador >= 22) { message = "perdiste vs el dealer, te pasaste de 21"; switchControl = "menu"; } else if (totalDealer >= 22 && totalJugador < 22) { message = "el Dealer se paso, tu ganas"; switchControl = "menu"; } else if (totalJugador == totalDealer) { message = "perdiste vs el dealer, las reglas dicen que si empatas con el dealer, él gana, lo siento"; switchControl = "menu"; } else if (totalDealer > totalJugador) { message = "El dealer gana, lo siento"; switchControl = "menu"; } else { message = "condición no valida"; } Console.WriteLine(message); break;
Recordemos que si el Delear se pasa tambien pierde, este es un ejemplo de que pase si Dealer se llega pasar de 21
Console.WriteLine("veintiuno!"); int num = 0; string Control = ""; string messahe = ""; string switchControl = "menu"; // 21 while (true) { int totaljugador = 0; int Dealer = 0; switch (switchControl) { case "menu": Console.WriteLine("Bienvenido al C A S I N O"); Console.WriteLine("Escriba '21' para jugar al 21"); switchControl = Console.ReadLine(); break; case "21": Console.WriteLine("Toma tu primera carta, Jugador, "); do { System.Random random = new System.Random(); num = random.Next(1, 12); totaljugador = totaljugador + num; Console.WriteLine("Toma tu carta, Jugador"); Console.WriteLine("Te salio el número, " + num); Console.WriteLine("¿Deseas otra carta?"); Control = Console.ReadLine(); } while (Control == "SI" || Control == "si" || Control == "Si" || Control == "yes"); System.Random random1 = new System.Random(); Dealer = random1.Next(13, 23); Console.WriteLine("El Dealer tiene: " + Dealer); Console.WriteLine("Tu tienes: " + totaljugador); if (totaljugador > Dealer && totaljugador < 22) { messahe = "Venciste al Dealer, UwU"; switchControl = "menu"; } else if (totaljugador <= Dealer && Dealer <= 21) { messahe = "Perdiste vs el Dealer, XD"; switchControl = "menu"; } else if (totaljugador >= 22) { messahe = "JAJAJAJAJA, te pasaste"; switchControl = "menu"; } else if (Dealer >= 22 && totaljugador < 22) { messahe = "JAJAJAJAJA, Se paso el Dealer, tu ganaste"; switchControl = "menu"; } else { messahe = "Condición no válida"; } Console.WriteLine(messahe); break; default: Console.WriteLine("Valor Ingresado no valido"); switchControl = "menu"; break; } }
int totalJugador = 0; int totalDealer = 0; int num = 0; string message = ""; string switchControl = "menu"; string respuesta = ""; System.Random random = new System.Random(); // Blackjack: Juntar 21 pidiendo cartas o en caso de tener menos de 21 // igual tener mayor puntaje que el dealer while (true) { totalJugador = 0; totalDealer = 0; switch (switchControl) { case "menu": Console.WriteLine("Bienvenido al Blackjack!"); Console.WriteLine("Presione 21 para jugar / exit para salir + ENTER"); switchControl = Console.ReadLine(); break; case "21": do { num = random.Next(1, 13); totalJugador += num; Console.WriteLine("Toma tu carta"); Console.WriteLine($"Número de carta: {num}"); Console.WriteLine($"Total del jugador: {totalJugador}"); Console.WriteLine("¿Quieres otra carta? si/no"); respuesta = Console.ReadLine().ToLower(); totalDealer = random.Next(14, 22); } while (respuesta == "si"); Console.WriteLine($"El total del dealer fue: {totalDealer}\n------------------------"); if (totalJugador > 21) { message = "\nPerdiste, te pasaste de 21.\n ------------------------"; switchControl = "menu"; } else if (totalJugador > totalDealer) { message = "\nVenciste al dealer, felicidades!\n ------------------------"; switchControl = "menu"; } else if (totalJugador <= totalDealer) { message = "\nPerdiste vs el dealer.\n ------------------------"; switchControl = "menu"; } else { message = "\nCondición no válida.\n ------------------------"; switchControl = "menu"; } Console.WriteLine(message); break; default: Console.WriteLine("Opción no válida, por favor intente de nuevo."); switchControl = "menu"; break; case "exit": Console.WriteLine("Gracias por jugar!"); return; // Termina el programa } }
Comparto el juego que yo realicé, no es BlackJack, es piedra papel o tijera, espero les guste:
using System;
class Program
{
static void Main()
{
System.Random random = new System.Random();
var option1 = "piedra";
var option2 = "papel";
var option3 = "tijera";
var userOption = "";
var iaOption = "";
int iaWins = 0;
int usuarioWins = 0;
int rondas = 1;
while (true)
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("********************");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("RONDA " + rondas);
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("********************");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Victorias de usuario => " + usuarioWins);
Console.WriteLine("Victorias de IA => " + iaWins);
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("--------------------");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("INGRESA UNA OPCIÓN: ¿piedra, papel o tijera?: ");
userOption = Console.ReadLine().ToLower(); // Convertir a minúsculas
rondas += 1;
if (userOption != option1 && userOption != option2 && userOption != option3)
{
Console.WriteLine("Esa opción no es válida");
continue;
}
string[] opciones = { option1, option2, option3 };
iaOption = opciones[random.Next(0, opciones.Length)];
Console.WriteLine("Usuario seleccionó: " + userOption);
Console.WriteLine("IA seleccionó: " + iaOption);
if (userOption == iaOption)
{
Console.WriteLine("EMPATE");
}
else if (userOption == "piedra")
{
if (iaOption == "tijera")
{
Console.WriteLine("Piedra gana a tijera!");
Console.WriteLine("USUARIO GANÓ");
usuarioWins += 1;
}
else
{
Console.WriteLine("Papel gana a piedra");
Console.WriteLine("IA GANÓ");
iaWins += 1;
}
}
else if (userOption == "papel")
{
if (iaOption == "piedra")
{
Console.WriteLine("Papel gana a piedra!");
Console.WriteLine("USUARIO GANÓ");
usuarioWins += 1;
}
else
{
Console.WriteLine("Tijera gana a papel");
Console.WriteLine("IA GANÓ");
iaWins += 1;
}
}
else if (userOption == "tijera")
{
if (iaOption == "papel")
{
Console.WriteLine("Tijera gana a papel!");
Console.WriteLine("USUARIO GANÓ");
usuarioWins += 1;
}
else
{
Console.WriteLine("Piedra gana a tijera");
Console.WriteLine("IA GANÓ");
iaWins += 1;
}
}
if (iaWins == 2)
{
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("El ganador es la IA JEJEJEJE");
Console.ResetColor();
break;
}
if (usuarioWins == 2)
{
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("El ganador eres tú. ¡Bien hecho!");
Console.ResetColor();
break;
}
Console.WriteLine(" //////////////// FIN DE LA RONDA ///////////////");
}
}
}
Les comparto una alternativa al juego de 21 Blackjack. No es la mejor pero funciona muy bien.
Console.WriteLine("BIENVENIDO AL GRAN CASINO"); Console.WriteLine("Ingrese su nombre"); string nombre = Console.ReadLine(); Console.WriteLine("Ingrese su edad"); int edad = Convert.ToInt32(Console.ReadLine()); if (edad < 18) { Console.WriteLine($"El jugador {nombre} no puede ingresar al casino"); } else { Console.WriteLine($"El jugador {nombre} puede ingresar al casino"); Console.WriteLine("Seleccione el numero del juego que desea jugar\n" + "1. 21 Blackjack\n" + "0. Salir"); int juego = Convert.ToInt32(Console.ReadLine()); if (juego == 1) { Console.WriteLine( "Reglas de 21 Blackjack:\n" + "El objetivo es acercarse a 21 sin pasarse.\n" + "Ganador: La mano más cercana a 21 gana. Si alguien supera 21 o se retira, pierde.\n" + "------------------------------------------------------------------------\n" + "------------------------------------------------------------------------\n" + "Presione 1 para continuar o 0 para terminar"); juego = Convert.ToInt32(Console.ReadLine()); } while (juego == 1) { int puntosTotalesA = 0; int puntosTotalesB = 0; int optionControl = 1; Boolean Ganador = false; while (Ganador != true) { switch (optionControl) { case 1: if (Ganador == false) { Console.WriteLine("El dealer esta baranjando..."); Console.WriteLine("El dealer esta repartiendo..."); //Usuario int cartaA = new Random().Next(1, 11); Console.WriteLine("Su carta equivale a: " + cartaA); puntosTotalesA += cartaA; Console.WriteLine("Sus puntos totales son: " + puntosTotalesA); //Sitema int cartaB = new Random().Next(1, 11); Console.WriteLine("La casa saca la carta equivalente a: " + cartaB); puntosTotalesB += cartaB; Console.WriteLine("Los puntos totales de la casa son: " + puntosTotalesB); optionControl = 2; } break; case 2: if (puntosTotalesA > 21 || puntosTotalesB == 21){ Console.WriteLine("La casa gana"); optionControl = 0; } else if (puntosTotalesB > 21 || puntosTotalesA == 21) { Console.WriteLine($"El jugador {nombre} gana"); optionControl = 0; } else{ Console.WriteLine("Desea otra carta? Presione 1 para si o 0 para no"); optionControl = Convert.ToInt32(Console.ReadLine()); if(optionControl == 0){ Console.WriteLine("La casa gana"); Ganador = true; } } break; default: Console.WriteLine("Gracias por jugar\n" + "¿Quiere volver a jugar?\n" + "1. Si\n" + "0. No"); Ganador = true; juego = Convert.ToInt32(Console.ReadLine()); if (juego > 0) { Ganador = false; puntosTotalesA = 0; puntosTotalesB = 0; optionControl = 1; } break; } } } } Console.WriteLine("Juego finalizado"); ```Console.WriteLine("BIENVENIDO AL GRAN CASINO"); Console.WriteLine("Ingrese su nombre"); string nombre = Console.ReadLine(); Console.WriteLine("Ingrese su edad"); int edad = Convert.ToInt32(Console.ReadLine()); if (edad < 18) {   Console.WriteLine($"El jugador {nombre} no puede ingresar al casino"); } else {   Console.WriteLine($"El jugador {nombre} puede ingresar al casino");   Console.WriteLine("Seleccione el numero del juego que desea jugar\n" +   "1. 21 Blackjack\n" +   "0. Salir");   int juego = Convert.ToInt32(Console.ReadLine());   if (juego == 1) {   Console.WriteLine(   "Reglas de 21 Blackjack:\n" +   "El objetivo es acercarse a 21 sin pasarse.\n" +   "Ganador: La mano más cercana a 21 gana. Si alguien supera 21 o se retira, pierde.\n" +   "------------------------------------------------------------------------\n" +   "------------------------------------------------------------------------\n" +   "Presione 1 para continuar o 0 para terminar");   juego = Convert.ToInt32(Console.ReadLine());   }   while (juego == 1)   {   int puntosTotalesA = 0;   int puntosTotalesB = 0;   int optionControl = 1;   Boolean Ganador = false;   while (Ganador != true)   {    switch (optionControl)   {   case 1:   if (Ganador == false)   {   Console.WriteLine("El dealer esta baranjando...");   Console.WriteLine("El dealer esta repartiendo...");   //Usuario   int cartaA = new Random().Next(1, 11);   Console.WriteLine("Su carta equivale a: " + cartaA);   puntosTotalesA += cartaA;   Console.WriteLine("Sus puntos totales son: " + puntosTotalesA);   //Sitema   int cartaB = new Random().Next(1, 11);   Console.WriteLine("La casa saca la carta equivalente a: " + cartaB);   puntosTotalesB += cartaB;   Console.WriteLine("Los puntos totales de la casa son: " + puntosTotalesB);   optionControl = 2;   }   break;   case 2:   if (puntosTotalesA > 21 || puntosTotalesB == 21){   Console.WriteLine("La casa gana");   optionControl = 0;   } else if (puntosTotalesB > 21 || puntosTotalesA == 21) {   Console.WriteLine($"El jugador {nombre} gana");   optionControl = 0;   } else{   Console.WriteLine("Desea otra carta? Presione 1 para si o 0 para no");   optionControl = Convert.ToInt32(Console.ReadLine());   if(optionControl == 0){   Console.WriteLine("La casa gana");   Ganador = true;   }   }   break;   default:   Console.WriteLine("Gracias por jugar\n" +    "¿Quiere volver a jugar?\n" +   "1. Si\n" +   "0. No");   Ganador = true;   juego = Convert.ToInt32(Console.ReadLine());   if (juego > 0)   {   Ganador = false;   puntosTotalesA = 0;   puntosTotalesB = 0;   optionControl = 1;   }   break;   }   }   } } Console.WriteLine("Juego finalizado");
String opcionprincipal = ""; Console.WriteLine($"¿Desea iniciar? si/no\n"); opcionprincipal = Console.ReadLine();
do {
//Declaro variables String Menu = ""; String Respuesta = ""; String message = ""; Random random = new Random(); int dealer = random.Next(10,22); int jugador = 0; int total = 0; //Inicio con las opciones Console.WriteLine("***********"); Console.WriteLine("**iniciar**"); Console.WriteLine("**cerrar***"); Console.WriteLine("***********"); Console.WriteLine($"Ingrese una opción\n"); Menu = Console.ReadLine(); switch (Menu) { case "iniciar": Console.WriteLine("¿Deseas jugar?"); Console.WriteLine("***********"); Console.WriteLine("****si*****"); Console.WriteLine("****no*****"); Console.WriteLine($"***********\n"); Respuesta = Console.ReadLine(); switch (Respuesta) { case "si": // Console.WriteLine("Ingresa un numero"); do { for (int i = 3; i > 0; i--) { Console.WriteLine($"Generando mano {i}.."); System.Threading.Thread.Sleep(1000); } jugador = random.Next(1,21); total = total + jugador; Console.WriteLine($"Tu total de cartas es {total} \n"); Console.WriteLine("Desea otra carta?"); } while(Console.ReadLine() != "no"); //Hago la validacion luego de tener un total if (total > dealer && total < 22) { message = $"Ganastes la mano con {total} y tu dealer tiene {dealer}"; } else if (total < dealer || total == dealer || total > 21) { message = $"Perdiste la mano tu total:{total}, tu dealer tiene {dealer}"; } else { message = "Opción no valida"; } break; //Cierro la operación case "no": for (int i = 5; i >= 0; i--) { Console.WriteLine($"Se cerrara la sesión en {i}.."); System.Threading.Thread.Sleep(1000); } break; default: Console.WriteLine("Opcion no valida"); break; } break; //cierro el ciclo case "cerrar": for (int i = 5; i >= 0; i--) { Console.WriteLine($"Se cerrara la sesión en {i}.."); System.Threading.Thread.Sleep(1000); } break; } Console.WriteLine(message);
} while (opcionprincipal != "si");
String opcionprincipal = ""; Console.WriteLine($"¿Desea iniciar? si/no\n"); opcionprincipal = Console.ReadLine(); do {   //Declaro variables   String Menu = "";   String Respuesta = "";   String message = "";   Random random = new Random();   int dealer = random.Next(10,22);   int jugador = 0;   int total = 0;   //Inicio con las opciones   Console.WriteLine("\*\*\*\*\*\*\*\*\*\*\*");   Console.WriteLine("\*\*iniciar\*\*");   Console.WriteLine("\*\*cerrar\*\*\*");   Console.WriteLine("\*\*\*\*\*\*\*\*\*\*\*");   Console.WriteLine($"Ingrese una opción\n");   Menu = Console.ReadLine();   switch (Menu)   {   case "iniciar":   Console.WriteLine("¿Deseas jugar?");   Console.WriteLine("\*\*\*\*\*\*\*\*\*\*\*");   Console.WriteLine("\*\*\*\*si\*\*\*\*\*");   Console.WriteLine("\*\*\*\*no\*\*\*\*\*");   Console.WriteLine($"\*\*\*\*\*\*\*\*\*\*\*\n");   Respuesta = Console.ReadLine();   switch (Respuesta)   {   case "si":   // Console.WriteLine("Ingresa un numero");   do   {   for (int i = 3; i > 0; i--)   {   Console.WriteLine($"Generando mano {i}..");   System.Threading.Thread.Sleep(1000);   }   jugador = random.Next(1,21);   total = total + jugador;   Console.WriteLine($"Tu total de cartas es {total} \n");   Console.WriteLine("Desea otra carta?");   } while(Console.ReadLine() != "no");   //Hago la validacion luego de tener un total   if (total > dealer && total < 22)   {   message = $"Ganastes la mano con {total} y tu dealer tiene {dealer}";   }   else if (total < dealer || total == dealer || total > 21)   {   message = $"Perdiste la mano tu total:{total}, tu dealer tiene {dealer}";   }   else   {   message = "Opción no valida";   }   break;   //Cierro la operación   case "no":   for (int i = 5; i >= 0; i--)   {   Console.WriteLine($"Se cerrara la sesión en {i}..");   System.Threading.Thread.Sleep(1000);   }   break;   default:   Console.WriteLine("Opcion no valida");   break;   }   break;     //cierro el ciclo    case "cerrar":   for (int i = 5; i >= 0; i--)   {   Console.WriteLine($"Se cerrara la sesión en {i}..");   System.Threading.Thread.Sleep(1000);   }   break;   }   Console.WriteLine(message); } while (opcionprincipal != "si");