El juego de Piedra Papel o Tijera (conocido internacionalmente como «Rock, Paper, Scissors») es un clásico y sencillo juego de manos que tiene sus raíces en la antigua China, donde se originó bajo el nombre de «shoushiling». Desde entonces, se ha popularizado en todo el mundo, convirtiéndose en un método universal para tomar decisiones o resolver disputas de manera aleatoria.
Reglas del Juego piedra papel o tijera en C++
El juego enfrenta a dos participantes, quienes eligen simultáneamente entre tres opciones:
Piedra: Gana a las tijeras (las rompe) pero pierde contra el papel (es envuelto).
Papel: Gana a la piedra (la envuelve) pero pierde contra las tijeras (es cortado).
Tijeras: Ganan al papel (lo cortan) pero pierden contra la piedra (son rotas).
El objetivo del juego es simple: cada jugador debe elegir estratégicamente para vencer al oponente según las reglas mencionadas. Ahora, implementaremos este juego en C++ para interactuar con un jugador humano enfrentándolo contra la computadora.
Código Fuente en C++
A continuación, se presenta el código completo del juego de Piedra, Papel o Tijera implementado en C++:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// Prototipo de funciones
string obtenerEleccionComputadora();
string determinarGanador(const string& jugador, const string& computadora);
void mostrarResultado(const string& jugador, const string& computadora, const string& resultado);
int main() {
// Inicialización de la semilla para generación de números aleatorios
srand(static_cast<unsigned int>(time(0)));
cout << "Bienvenido al juego de Piedra, Papel o Tijera.\n";
cout << "Elige una opción: Piedra, Papel o Tijera.\n";
string eleccionJugador;
cout << "Tu elección: ";
cin >> eleccionJugador;
// Convertir entrada del jugador a minúsculas para estandarizar
for (auto& c : eleccionJugador) c = tolower(c);
string eleccionComputadora = obtenerEleccionComputadora();
string resultado = determinarGanador(eleccionJugador, eleccionComputadora);
mostrarResultado(eleccionJugador, eleccionComputadora, resultado);
return 0;
}
// Función para generar la elección de la computadora
string obtenerEleccionComputadora() {
int numAleatorio = rand() % 3; // Genera un número entre 0 y 2
if (numAleatorio == 0)
return "piedra";
else if (numAleatorio == 1)
return "papel";
else
return "tijera";
}
// Función para determinar el ganador
string determinarGanador(const string& jugador, const string& computadora) {
if (jugador == computadora) {
return "empate";
} else if ((jugador == "piedra" && computadora == "tijera") ||
(jugador == "papel" && computadora == "piedra") ||
(jugador == "tijera" && computadora == "papel")) {
return "ganaste";
} else {
return "perdiste";
}
}
// Función para mostrar el resultado del juego
void mostrarResultado(const string& jugador, const string& computadora, const string& resultado) {
cout << "Tu elección: " << jugador << "\n";
cout << "Elección de la computadora: " << computadora << "\n";
cout << "Resultado: " << resultado << "\n";
}
Explicación del Código Línea a Línea
Inclusión de Librerías
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iostream>
: Permite la entrada y salida de datos.
#include <cstdlib>
: Proporciona funciones para generación de números aleatorios.
#include <ctime>
: Facilita la inicialización de la semilla para la función rand()
.
Espacio de Nombres
using namespace std;
Simplifica la sintaxis al evitar el uso del prefijo std::
en funciones como cout
y cin
.
Prototipos de Funciones
string obtenerEleccionComputadora();
string determinarGanador(const string& jugador, const string& computadora);
void mostrarResultado(const string& jugador, const string& computadora, const string& resultado);
Declaramos las funciones que utilizaremos más adelante para estructurar el código de forma modular y clara.
Función Principal
int main() {
srand(static_cast<unsigned int>(time(0)));
// Inicialización de semilla
srand(static_cast<unsigned int>(time(0)))
: Inicializa la semilla para generar números pseudoaleatorios basados en la hora actual.
string eleccionJugador;
cout << "Tu elección: ";
cin >> eleccionJugador;
Se solicita al usuario que introduzca su elección.
for (auto& c : eleccionJugador) c = tolower(c);
Convierte la entrada del usuario a minúsculas para estandarizarla.
Generación de la Elección de la Computadora
string obtenerEleccionComputadora() {
int numAleatorio = rand() % 3; // Genera un número entre 0 y 2
if (numAleatorio == 0)
return "piedra";
else if (numAleatorio == 1)
return "papel";
else
return "tijera";
}
Se genera un número aleatorio entre 0 y 2, que se traduce en una de las tres opciones.
Determinación del Ganador
string determinarGanador(const string& jugador, const string& computadora) {
if (jugador == computadora) {
return "empate";
} else if ((jugador == "piedra" && computadora == "tijera") ||
(jugador == "papel" && computadora == "piedra") ||
(jugador == "tijera" && computadora == "papel")) {
return "ganaste";
} else {
return "perdiste";
}
}
Se comparan las elecciones del jugador y la computadora según las reglas del juego para determinar el resultado.
Mostrar el Resultado
void mostrarResultado(const string& jugador, const string& computadora, const string& resultado) {
cout << "Tu elección: " << jugador << "\n";
cout << "Elección de la computadora: " << computadora << "\n";
cout << "Resultado: " << resultado << "\n";
}
Se muestra un resumen de las elecciones y el resultado del juego.
Este ejemplo demuestra cómo utilizar C++ para implementar un juego interactivo utilizando funciones básicas y generación de números aleatorios. Además de ser un proyecto sencillo y divertido, es una excelente manera de practicar la programación modular, el manejo de cadenas y la interacción con el usuario en C++.