Otra forma para validar si el usuario escribe, sin colocar las combinaciones de escribirlo, pueden ser que colocando el resultado que recibes en mayuscula o minuscula. Algo ocmo
resultado.toUpper() o resultado.toLower(), respectivamente
Introducción a la programación con C#
¿Qué necesitas para aprender C#?
¿Por qué aprender C#?
¿Qué son los algoritmos?
Instalando Visual Studio 2022
Aprendiendo a usar Visual Studio
Primeros pasos con C#
Tipos de datos primitivos
Variables
La palabra reservada var
Uso de constantes
Operadores aritméticos
Operadores lógicos
Operadores relacionales
Strings en C#
Bucles y estructuras de control en C#
Condicional IF
Condicional Switch
Ciclos While y Do While
Ciclos para el juego de Platzino
Ciclos For
Reto: bug entre ciclos
Próximos pasos
¿Quieres un Curso de POO en C#?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Ricardo Celis
Aportes 31
Preguntas 2
Otra forma para validar si el usuario escribe, sin colocar las combinaciones de escribirlo, pueden ser que colocando el resultado que recibes en mayuscula o minuscula. Algo ocmo
resultado.toUpper() o resultado.toLower(), respectivamente
CICLOS WHILE Y DO WHILE
La instrucción while ejecuta una instrucción o un bloque de instrucciones mientras que una expresión booleana especificada se evalúa como true. Como esa expresión se evalúa antes de cada ejecución del bucle, un bucle while se ejecuta cero o varias veces. La while instrucción difiere de un bucle do , que se ejecuta una o varias veces.
En el ejemplo siguiente se muestra el uso de la instrucción while:
int n = 0;
while (n < 5)
{
Console.Write(n);
n++;
}
// Output:
// 01234
La estructura do while es otra estructura repetitiva, la cual ejecuta al menos una vez su bloque repetitivo, a diferencia del while o del for que podían no ejecutar el bloque.
Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo menos una vez se ejecutará el bloque repetitivo.
La condición de la estructura está abajo del bloque a repetir, a diferencia del while o del for que está en la parte superior.
El bloque de operaciones se repite MIENTRAS que la condición sea Verdadera.
Si la condición retorna Falso el ciclo se detiene. En C#, todos los ciclos repiten por verdadero y cortan por falso.
Es importante analizar y ver que las operaciones se ejecutan como mínimo una vez.
Ejemplos de uso de la estructura de iteracion WHILE:
Estructura repetitiva do while
La estructura do while es otra estructura repetitiva, la cual ejecuta al menos una vez su bloque repetitivo, a diferencia del while o del for que podían no ejecutar el bloque.
Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo menos una vez se ejecutará el bloque repetitivo.
La condición de la estructura está abajo del bloque a repetir, a diferencia del while o del for que está en la parte superior.
El bloque de operaciones se repite MIENTRAS que la condición sea Verdadera.
Si la condición retorna Falso el ciclo se detiene. En C#, todos los ciclos repiten por verdadero y cortan por falso.
Es importante analizar y ver que las operaciones se ejecutan como mínimo una vez.
Ejemplos de uso y funcionamiento de DO WHILE:
se da mucha vuelta en la expicación de un do while, ir haciendolo paso por paso complica su entendimiento, debe comenzar por la estructura,
do
{
} while();
y después como funciona, a decir verdad el while tampoco lo comprendí, aunque ya tengo tiempo programando y puedo rellenar lo que me falta a prueba y error
el dealer es el de la droga, el de las cartas es el crupier,
apuesto que vive en Sinaloa
Ventajas y desventajas de usar while
Ventajas
Flexibilidad: El bucle while permite realizar iteraciones de acuerdo a una condición específica, lo que proporciona flexibilidad en la ejecución del código. Esto significa que puedes repetir un bloque de código mientras se cumpla una determinada condición.
Sencillez: El bucle while es relativamente sencillo de entender y utilizar. Solo requiere una condición de salida y el bloque de código a ejecutar mientras se cumpla esa condición.
Adaptabilidad: El bucle while se puede utilizar en una amplia variedad de situaciones y para diferentes tipos de condicionales . Puedes establecer cualquier tipo de condición que desees , siempre y cuando pueda evaluarse como verdadera o falsa.
Control de flujo: El bucle while te permite tener un mayor control sobre el flujo de ejecución de tu programa. Puedes decidir cuándo y bajo qué condiciones se repite un bloque de código, lo que te da mayor precisión en el control de los procesos.
Desventajas
Posibilidad de bucles infinitos: Si no se establece correctamente una condición de salida, es posible que el bucle while se ejecute infinitamente, lo que puede llevar a un bloqueo del programa o un consumo excesivo de recursos.
Complejidad en el manejo de variables de control: Al utilizar un bucle while, es necesario asegurarse de que las variables de control se actualicen correctamente dentro del bloque de código. Si no se actualizan de manera adecuada, se puede producir un bucle infinito o un comportamiento inesperado.
Menor legibilidad en comparación con otros bucles: A veces, el bucle while puede resultar menos legible que otros bucles, como el bucle for. Esto se debe a que la condición de salida se establece fuera del bucle y puede ser más difícil de seguir para otros desarrolladores.
Aquí mi versión de blackjack 😁
Mejoren mi aporte y me comparten el código para ver de que otra forma se puede hacer mejor. Saludos!!!
int jugador = 0;
int cartasJugador = 0;
int puntosJugador = 0;
int maquina = 0;
int puntosMaquina = 0;
string mensaje = "";
string salir = "";
Random random = new Random();
Console.WriteLine("Welcome to C A S I N O!");
Console.WriteLine("¡Vamos a jugar al Blackjack!");
Console.WriteLine("Puedes solicitar entre 1 y mas cartas.");
Console.WriteLine("Si la suma de tus cartas se pasa de 21, habrás perdido.");
Console.WriteLine("¿Estás listo?");
Console.WriteLine("Mucha suerte!");
while (puntosJugador <= 21)
{
Console.WriteLine("¿Cuántas cartas quieres?");
cartasJugador = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < cartasJugador; i++)
{
jugador = random.Next(1, 11); // Genera valores entre 1 y 10
puntosJugador += jugador;
}
if (puntosJugador < 21)
{
Console.WriteLine($"Tienes {puntosJugador} puntos con {cartasJugador} cartas.");
Console.WriteLine("¿Deseas parar con las cartas que tienes?");
Console.WriteLine("Escribe 'si' para parar o cualquier otra tecla para continuar.");
salir = Console.ReadLine();
if (salir == "si")
{
break;
}
}
}
while (puntosMaquina <= 17)
{
maquina = random.Next(1, 11); // Genera valores entre 1 y 10
puntosMaquina += maquina;
}
Console.WriteLine($"Tus puntos son: {puntosJugador}");
if (puntosJugador > 21)
{
mensaje = "Perdiste. Te pasaste de 21 puntos.\n";
}
else if (puntosJugador > puntosMaquina)
{
mensaje = "¡Felicitaciones! Ganaste.\n";
}
else if (puntosMaquina > puntosJugador)
{
mensaje = "Perdiste. El casino ganó.\n";
}
else
{
mensaje = "Empate. La casa gana!\n";
}
mensaje += $"Tus puntos son: {puntosJugador}\n";
mensaje += $"Los puntos del casino son: {puntosMaquina}";
Console.WriteLine(mensaje);
La declaración de random se hace antes del loop (do) para que no se ejecute la creación del objeto en cada iteración
en black jack los números de las cartas se contabilizan normal y las letras “J”, “Q” and “K” son equivalentes a 10 y la A puede ser 1 or 11 por eso un A con letra es black jack porque 11 + 10 = 21
Aplicando lo aprendido
using System;
var (totalJugador, totalDealer, num) = (0, 0, 0);
string message = string.Empty;
string switchControl = "menu";
int sigueJugando = 0;
/* Blackjack, Juntar 21 pidiendo, en caso de pasaswte de 21 pierdes.
cartas o en caso de tener menos
de 21 igual tener mayor puntuación que el dealer */
while (true)
{
switch (switchControl)
{
case "menu":
Console.WriteLine("Welcome al *** C A S I N O ***");
Console.WriteLine("Escriba '21' para jugar 21");
switchControl = Console.ReadLine();
break;
case "21":
System.Random random = new System.Random();
totalDealer = random.Next(1, 21);
do
{
num = random.Next(1, 12);
totalJugador = totalJugador + num;
Console.WriteLine("Toma tu carta jugador");
Console.WriteLine($"Te salió el número: {num}");
Console.WriteLine("Deseas seguir jugando?");
Console.WriteLine("1-> Si");
Console.WriteLine("2-> No");
sigueJugando = Convert.ToInt32(Console.ReadLine());
}
while (sigueJugando == 1 );
if (totalJugador < 1 || totalJugador > 21)
{
message = "Total jugador no puede ser menor que 1 o mayor a 21";
switchControl = "menu";
}
else if (totalDealer < 1 || totalDealer > 21)
{
message = "Total dealer no puede ser menor que 1 o mayor a 21";
switchControl = "menu";
}
else
{
if (totalJugador > totalDealer)
{
message = "Felicidades, venciste al dealer";
switchControl = "menu";
}
else if (totalJugador <= totalDealer)
{
message = "Lo siento!... Perdiste vs el dealer";
switchControl = "menu";
}
else
{
message = "Condición no válida";
switchControl = "menu";
}
}
Console.WriteLine($"Total jugador {totalJugador}");
Console.WriteLine($"Total dealer {totalDealer}");
Console.WriteLine(message);
break;
default:
Console.WriteLine("Valor ingresado no valido en el *** C A S I N O ***");
switchControl = "menu";
break;
}
}
🔴 La diferencia principal es cuándo se verifica la condición:
✋En while, la condición se verifica antes de ejecutar el bloque de código.
✋En do-while, el bloque de código se ejecuta al menos una vez antes de verificar la condición. Esto puede ser útil cuando deseas que el bloque de código se ejecute al menos una vez, independientemente de la condición.
El rey equivale a 10 en BlackJack, igual que todas las figuras, Jack, Reina y Rey valen 10, As vale 1 u 11.
Jejeje deben seguir el video amigos no se preocupen, creo que al inicio todos programamos así, pero a medida que avanzamos factorizamos y reducimos el código, limpiando el antiguo…
Console.WriteLine(“Hello, World!”);
// variables
int totalJugador = 0;
int totalMaquina = 0;
int num = 0;
string mensaje = “”;
string switchControl = “menu”;
// Juego Blackjack
while (true)
{
switch (switchControl)
{
case "menu":
Console.WriteLine(" Bienvenido al casino online: ");
Console.WriteLine(" escriba 1 para entrar al juego: ");
switchControl = Console.ReadLine();
break;
case "1":
do
{
System.Random random=new System.Random();
num = random.Next(1, 12);
totalJugador = totalJugador + num;
Console.WriteLine(" Toma tu primera carta jugador: ");
Console.WriteLine($" te salio el numero: {num}");
Console.WriteLine(" ¿deseas otra carta? ");
} while (Console.ReadLine() == " si " || Console.ReadLine() == "SI" );
if (totalJugador > totalMaquina && totalJugador < 22)
{
mensaje = " Le ganaste a la maquina felicidades ";
switchControl = "menu";
}
else if (totalJugador >= 22)
{
mensaje = " Perdiste contra la maquina te pasaste de 21 ";
switchControl = "menu";
}
else if (totalJugador <= totalMaquina)
{
mensaje = " perdiste game over ";
switchControl = "menu";
}
else
{
mensaje = " condicion no valida ";
switchControl = "menu";
}
Console.WriteLine(mensaje);
break;
default:
Console.WriteLine(" Valor ingresado no valido: ");
break;
}
}
DONDE ESTASSSSSSSSSSS JUANNNNNNNN
Yo había hecho esto antes de avanzar en el curso:
int totalJugador = 0;
int totalDealer = 0;
string message = "";
Console.WriteLine("Bienvenido al casino");
Console.WriteLine("Escriba '21' para jugar al 21");
string switchControl = Console.ReadLine();
while(true)
{
switch (switchControl)
{
case "21":
Console.WriteLine("¿cuál es el total del jugador?:");
totalJugador = Convert.ToInt32(Console.ReadLine());
Random rnd = new Random();
totalDealer = rnd.Next(1, 21);
Console.WriteLine($"total del dealer: {totalDealer}");
message = totalJugador <= totalDealer ? "Has perdido :(" : "Has ganado :D";
Console.WriteLine(message);
break;
default:
break;
}
}
lo hice de esta manera pensaba que despues de la pausa seria igual que la mia jaajajaj
<code>
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 " + num);
Aqui dejo mi codigo para que el Dealer juege tambien
void otraCartaDealer()
{
carta = random.Next(1, 11);
totaldealer = carta + totaldealer;
}
//Dealer AI
do
{
if (totaldealer < 11)
{
otraCartaDealer();
}
else if (totaldealer < 21)
{
double probabilidad = 1.0 - ((double)(totaldealer - 11) / 10.0);
if (random.NextDouble() < probabilidad)
{
otraCartaDealer();
}
else { message = "Pasar"; }
}
else { message = "Pasar"; }
} while (message != "Pasar");
Todos los “Si” que he escrito pero son una mala practica jsjsjsjsjsjsjsjsjsj
en el do while, cuando pregunta si desea otra carta es mejor cococarlo de esta forma:
Console.WriteLine("¿Deseas otra carta? 1 es ‘si’ 2 es ‘no’");
así evitas la opción de que se escribió con mayúsculas o con minúsculas. o es 1 o es 2.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?