Crear juego de piedra, papel o tijera en C#

Saad Aslam 12 octubre 2023
Crear juego de piedra, papel o tijera en C#

Este artículo hablará sobre el proceso de desarrollo de un juego de piedra, papel y tijera con C#. Usaremos Visual Studio para crear una aplicación de consola, un nombre y un proyecto.

Crea un juego de piedra, papel o tijera en C#

Para hacer este juego, seguiremos estos pasos:

  • Tome la entrada del usuario.
  • Genera aleatoriamente la salida.
  • Compara todas las opciones posibles.
  • Declarar al ganador.
  • Reinicia el juego.

La operación de este programa incluirá una variedad de funciones y métodos. Una vez que se ha recibido la entrada del usuario, el sistema la comparará con la entrada producida por el sistema.

La entrada producida por este sistema será aleatoria; por lo tanto, podría proporcionar cualquiera de las tres opciones: piedra, papel o tijera. Hará una representación condicional una vez que reciba ambas entradas.

La representación condicional servirá de base para determinar si se anunciará un ganador o no habrá ganador y se realizará un sorteo.

using System;

namespace Hello_World {
  class Program {
    static void Main(string[] args) {}
  }
}

Estas líneas estarán al comienzo del código y permanecerán cuando comience el flujo normal del programa.

string ui, si;
int r;
Console.Write("What do you choose?\n\n Rock/ Paper/ Scissors? ");
ui = Console.ReadLine();
Random rnd = new Random();
r = rnd.Next(1, 4);

si y ui son las dos variables para la entrada del usuario y la entrada del sistema como una cadena, por lo que el usuario debe escribir la ortografía completa de su elección. La variable r es la variable de tipo entero hecha para el número aleatorio que la computadora generará para la elección.

La declaración Console.Write("What do you choose?\n\n Rock/ Paper/ Scissors? ") se escribe en la pantalla y le pide al usuario que ingrese su elección. La instrucción ui = Console.ReadLine() toma la entrada del usuario y la almacena en la variable ui.

La declaración Random rnd = new Random() crea la variable rnd para el número aleatorio que se usará después para generar los números aleatorios. La declaración r = rnd.Next(1, 4) genera el aleatorio en el rango de 1 a 3 y lo almacena en la variable r.

switch (r) {
  case 1:
    si = "Rock";
    Console.WriteLine("Computer chose Rock");
    if (ui == "Rock" || ui == "rock") {
      Console.WriteLine("\nIt is a draw");
    } else if (ui == "Paper" || ui == "paper") {
      Console.WriteLine("\nYou Win!");
    } else {
      Console.WriteLine("\nYou Lose!");
    }
    break;
}

En switch(), consideramos las opciones si la variable r contiene cualquier número del 1 al 4. En el caso 1, verificamos si el número aleatorio es uno, y si es así, configuramos la entrada del sistema si variable a la roca.

Después de eso, escribimos en la consola usando la instrucción Console.WriteLine("Computer chose Rock") que imprime en la pantalla que la computadora eligió rock. Luego usamos las condiciones if para ver lo que el usuario ingresó para su elección.

La instrucción if (ui == "Rock"||ui == "rock") verifica si el usuario también ingresó rock, entonces es un empate y será impreso en la pantalla por Console.WriteLine("\nIt is a draw"). Si no, entonces verificaremos con else if(ui == "Paper"||ui == "paper") para ver si no es roca, entonces ¿es papel lo que ingresó el usuario?

Si es , entonces el usuario ganó, que será impreso por Console.WriteLine("\nYou Win!");.

Si el usuario no ingresó las dos opciones que verificamos, es obvio que el usuario ingresó tijeras, por lo que el usuario perdió. Entonces, usamos else al final, que imprimirá You Lose!.

Por último, la sentencia break se usa para salir del switch().

case 2:
  si = "Paper";
  Console.WriteLine("Computer chose Paper");
  if (ui == "Rock" || ui == "rock") {
    Console.WriteLine("\nYou Lose!");
  } else if (ui == "Paper" || ui == "paper") {
    Console.WriteLine("It is a draw");
  } else {
    Console.WriteLine("You win");
  }
  break;

En el caso 2, verificamos que si el número aleatorio es 2, entonces configuramos la variable de entrada del sistema si a papel. Después de eso, escribimos en la consola usando Console.WriteLine("La computadora eligió papel"), que imprime en la pantalla que la computadora eligió papel.

Luego, usamos condiciones si para ver lo que el usuario ingresó para su elección. La instrucción if (ui == "Rock"||ui == "rock") verifica si el usuario también ingresó rock, entonces el usuario perderá, y será impreso en la pantalla por Console.WriteLine(" \n¡Te sueltas!");.

Si no, entonces verificamos con else if(ui == "Paper"||ui == "paper") para ver si no es roca, entonces ¿es papel lo que ingresó el usuario? Si es yes, entonces es un empate. Y será impreso por Console.WriteLine("It is a draw");.

Si el usuario no ingresó las dos opciones que habíamos marcado, es obvio que el usuario ingresó tijeras, por lo que el usuario gana el juego. Entonces, usamos else al final, que será impreso por Console.WriteLine("You win");.

La sentencia break se usa para salir de switch().

case 3:
  si = "Scissors";
  Console.WriteLine("Computer chose Scissors");
  if (ui == "Rock" || ui == "rock") {
    Console.WriteLine("\nYou Win!");
  } else if (ui == "Paper" || ui == "paper") {
    Console.WriteLine("You Lose");
  } else {
    Console.WriteLine("It is a draw");
  }
  break;

En el caso 3, verificamos que si el número aleatorio es 3, entonces configuramos la variable de entrada del sistema si a tijeras. Después de eso, escribimos en la consola mediante la línea Console.WriteLine("Computer chose Scissors") que imprime en la pantalla que la computadora eligió las tijeras.

Luego usamos las condiciones if para ver lo que el usuario ingresó para su elección. La línea if (ui == "Rock"||ui == "rock") comprueba si el usuario también ingresó rock, entonces el usuario ganará, y será impreso en la pantalla por la Console.WriteLine("\nYou Win!"); línea.

Si no es así, verificamos con la línea else if(ui == "Paper"||ui == "paper") para ver si no es roca, ¿entonces es papel lo que ingresó el usuario? Si es , entonces el usuario perderá el juego. Y será impreso por Console.WriteLine("You Lose"); línea.

Si el usuario no ingresó las dos opciones que habíamos marcado, es obvio que el usuario ingresó tijeras, por lo que el juego es un empate. Así que usamos else al final, que será impreso por Console.WriteLine("It is a draw");.

default:
  Console.WriteLine("invalid entry!");
  break;

Al final del alcance del cambio, también usamos predeterminado:, una especie de caso predeterminado que se ejecuta cuando no coincide ningún caso. Esta es una precaución de seguridad si la variable r tiene cualquier otro valor que no sea 1 a 3.

Luego imprimiremos en la pantalla ¡entrada no válida! usando Console.WriteLine("entrada inválida!");.

Si quieres, no puedes crear y usar la variable si en tu código porque las decisiones se toman con la variable de número aleatorio r.

Si desea que el usuario escriba o no para volver a jugar, debe usar el código de la siguiente manera.

using System;
namespace Hello_World {
  class Program {
    static void Main(string[] args) {
      bool play = true;
      string q;
      while (play) {
        // all the above code of the game goes here
        Console.WriteLine("\nDo you want to play again?  ");
        q = Console.ReadLine();
        if (q == "yes" || q == "Yes") {
          continue;
        } else if (q == "no" || q == "No") {
          play = false;
        } else {
          Console.WriteLine("invalid entry!\nQuiting...!");
          play = false;
        }
      }
    }
  }
}

Creamos una variable play de tipo bool, que se utiliza en el bucle while. Inicialmente, se establece en verdadero, por lo que el bucle se ejecutará infinitamente hasta que la variable play se establezca en falso.

Puedes colocar todo el código de tu juego en el bucle while, y después de eso, puedes pedirle al usuario que juegue de nuevo o no usando Console.WriteLine("\nDo you want to play again? ");. Lo que el usuario ingrese se almacenará en la variable q usando la línea q= Console.ReadLine();.

Después de eso, volveremos a utilizar las condiciones if para ver lo que ingresó el usuario.

La sentencia if(q=="yes"||q=="Yes") comprueba la entrada del usuario, si es equivalente a sí o no. Si el usuario ha ingresado yes, entonces la sentencia continue se usa para omitir el resto de las declaraciones del ciclo y comenzar el ciclo desde el principio.

Si el usuario no ha ingresado sino que ha ingresado no, entonces la condición else if(q=="no"||q=="No") se vuelve verdadera, y la variable play es establecido en falso por la línea play=false;, el ciclo se detendrá y el programa finalizará.

Y si el usuario ha ingresado algo más que yes o no, entonces invalid entry! se imprimirá en la pantalla con Console.WriteLine("invalid entry!\nQuiting...!");. Y play volverá a ser falso, y el programa terminará.

Código fuente completo:

using System;

namespace Hello_World {
  class Program {
    static void Main(string[] args) {
      bool play = true;
      string q;
      while (play) {
        string ui, si;
        int r;
        Console.Write("What do you choose?\n\n Rock/ Paper/ Scissors? ");
        ui = Console.ReadLine();
        Random rnd = new Random();
        r = rnd.Next(1, 4);
        switch (r) {
          case 1:
            si = "Rock";
            Console.WriteLine("Computer chose Rock");
            if (ui == "Rock" || ui == "rock") {
              Console.WriteLine("\nIt is a draw");
            } else if (ui == "Paper" || ui == "paper") {
              Console.WriteLine("\nYou Win!");
            } else {
              Console.WriteLine("\nYou Lose!");
            }
            break;
          case 2:
            si = "Paper";
            Console.WriteLine("Computer chose Paper");
            if (ui == "Rock" || ui == "rock") {
              Console.WriteLine("\nYou Lose!");
            } else if (ui == "Paper" || ui == "paper") {
              Console.WriteLine("It is a draw");
            } else {
              Console.WriteLine("You win");
            }
            break;
          case 3:
            si = "Scissors";
            Console.WriteLine("Computer chose Scissors");
            if (ui == "Rock" || ui == "rock") {
              Console.WriteLine("\nYou Win!");
            } else if (ui == "Paper" || ui == "paper") {
              Console.WriteLine("You Lose");
            } else {
              Console.WriteLine("It is a draw");
            }
            break;
          default:
            Console.WriteLine("invalid entry!");
            break;
        }
        Console.WriteLine("\nDo you want to play again?  ");
        q = Console.ReadLine();
        if (q == "yes" || q == "Yes") {
          continue;
        } else if (q == "no" || q == "No") {
          play = false;
        } else {
          Console.WriteLine("invalid entry!\nQuiting...!");
          play = false;
        }
      }
    }
  }
}
Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn