Hola a todos. Creo que al programilla le falta la parte donde decide quién ganó (o quizá yo no la vi, sorry). Como un
switch() anidado con las nueve posibilidades sería muy tedioso es más cómodo definir una matriz de 3x3, donde la opción 1 representa tijera, 2 la piedra, 3 el papel. En la posición (i,j) de la matriz se pone:
- 1, si i le gana a j
- -1, si i pierde ante j
- 0, si son iguales y hay empate
Así por ejemplo, para el caso de la tijera, como empata consigo misma, pierde ante piedra y gana ante papel, la primera fila de la matriz debe ser {0, -1, 1}. El programa inspecciona el elemento de la matriz, y ahí sabe si usted ganó, perdió o empató.
En la primera parte del programa el usuario elige tijera, piedra o papel pulsando '1', '2' ó '3' (más cómodo que escribir el nombre completo), y este valor entero se deposita en la variable
human_op. Luego, elige la máquina al azar usando
rand() y
srand(), y su valor se deposita en
machine_op. Como ya se explicó, el valor de
A[human_op - 1][machine_op - 1] dará la respuesta.
Al final, te pregunta si quieres jugar de nuevo y así sucesivamente. Confieso que yo mismo me puse a jugar contra la máquina y casi me envicio, jajaja
.
Un detalle, la función
clear_screen() está codificada para Windows y para Linux. En Windows debes dejar la línea
system("cls") y comentariar
system("clear"), mientras en Linux se hace al revés. La versión que pongo aquí está para Windows:
#include <cstdlib>
#include <iostream>
#include <time.h>
void clear_screen( void );
using namespace std;
int main () {
string human, machine;
int human_op = 0; /* 1: tijera, 2: piedra, 3: papel */
int machine_op = 0;
char next; /* next == 's' indica que se quiere seguir jugando */
/* Declarar matriz de casos:
*
* 1: tijera, 2: piedra, 3: papel
*
* El elemento (i,j) vale:
* 1 si "i le gana a j"
* -1 si "i pierde ante j"
* 0 si hay empate
*/
int A[3][3] = {{0, -1, 1}, {1, 0, -1}, {-1, 1, 0}};
/* inicializar semilla */
srand( time(NULL) );
do {
/* El humano elige */
do {
clear_screen( ); /* borrar pantalla */
cout << "Juego piedra, papel o tijera ..." << endl << endl
<< "1: tijera" << endl
<< "2: piedra" << endl
<< "3: papel" << endl << endl
<< "elige: ";
cin >> human_op;
} while ( human_op < 1 || human_op > 3 );
switch ( human_op ) {
case 1:
human = "tijera";
break;
case 2:
human = "piedra";
break;
case 3:
human = "papel";
break;
}
/* La maquina elige */
machine_op = rand( ) % 3 + 1;
switch ( machine_op ) {
case 1:
machine = "tijera";
break;
case 2:
machine = "piedra";
break;
case 3:
machine = "papel";
break;
}
/* Ahora se decide quien gana */
cout << endl << "Usted elige: " << human << endl
<< "La maquina elige: " << machine << endl << endl
<< "... ";
switch ( A[human_op - 1][machine_op - 1] ) {
case 1:
cout << "Usted gana !!!" << endl;
break;
case -1:
cout << "Ups, usted pierde" << endl;
break;
case 0:
cout << "Empate" << endl;
break;
}
/* Seguir jugando ? */
cout << "Seguir jugando s/n? ";
cin >> next;
} while ( next == 's' );
}
/* Borra la pantalla */
void clear_screen( void ) {
/* para Windows */
system( "cls" );
/* para Linux */
//system( "clear" );
}