Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Intento de juego : Piedra, papel o tijera

Estas en el tema de Intento de juego : Piedra, papel o tijera en el foro de C/C++ en Foros del Web. Hola estoy teniendo bastantes problemas con el siguiente codigo , mi objetivo es hacer un juego piedra papel o tijera con opciones validas para piedra ...
  #1 (permalink)  
Antiguo 10/06/2015, 08:01
 
Fecha de Ingreso: junio-2015
Mensajes: 3
Antigüedad: 8 años, 10 meses
Puntos: 0
Intento de juego : Piedra, papel o tijera

Hola estoy teniendo bastantes problemas con el siguiente codigo , mi objetivo es hacer un juego piedra papel o tijera con opciones validas para piedra (Piedra o Pi) , Papel (Papel o Pa) y Tijera (Tijera o T) y una opcion que pueda salir cuando quiera Salir(Salir), el codigo me funciona bien si no pongo la repeticion del while pero cuando la pongo me tira cualquier cosa . El usuario juega como maximo 5 veces o se retira con la opcion Salir . Agradeceria algo de ayuda a y otra cosa no puedo usar funcion ya existentes de alguna libreria . Soy bastante novato programando y tambien en el foro . Muchas gracias. Disculpen si esta muy mal el codigo.













#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main (){

char letra1, letra2,letra5,letra6;
int cont=0,x,piedra=0,papel=0,tijera=0,emppied=0,empti je=0,emppape=0,perpied=0,perpape=0,pertije=0,ganpi ed=0,ganpape=0,gantije=0;
printf("Bienvenido/a, a continuación comenzaremos a jugar\n");
printf("Para cada jugada tus opciones son “(Pi)edra” “(Pa)pel” o “(T)ijeras“.\n");
printf("Recuerda que también puedes seleccionar la Opción “Salir” si deseas rendirte.\n");
printf("¡Prepárate para ser humillado/a!\n\n");


srand (time(NULL));
while ((letra1!='S') || (cont<5)){
printf("Juguemos! Elige tu opción:\n");
x=rand()%3+1;
cont++;
letra1 = getchar();
letra2 = getchar();

if (letra1=='S'){
printf("Nos vemos la próxima.");
}
if (letra1=='P') {

if(letra2=='i'){

piedra++;
if (x==1){
emppied++;
printf("“Yo elijo Piedras. Hemos empatado.“\n");
}
if (x==2){
perpied++;
printf("“Yo elijo Papel.¡Perdiste! “\n");
}
if (x==3){
ganpied++;
printf("“Yo elijo Tijeras. Has ganado...“\n");
}

if (letra6=='a'){

piedra++;
if (x==1){
emppied++;
printf("“Yo elijo Piedras. Hemos empatado.“\n");
}
if (x==2){
perpied++;
printf("“Yo elijo Papel.¡Perdiste! “\n");
}
if (x==3){
ganpied++;
printf("“Yo elijo Tijeras. Has ganado...“\n");
}

}
}
if (letra2=='a'){

papel++;
if (x==1){
ganpape++;
printf("“Yo elijo Piedras. Has ganado...“\n");
}
if (x==2){
emppape++;
printf("“Yo elijo Papel.Hemos empatado.“\n");
}
if (x==3){
perpape++;
printf("“Yo elijo Tijeras.¡Perdiste!“\n");
}

if (letra5=='l'){

papel++;
if (x==1){
ganpape++;
printf("“Yo elijo Piedras. Has ganado...“\n");
}
if (x==2){
emppape++;
printf("“Yo elijo Papel.Hemos empatado.“\n");
}
if (x==3){
perpape++;
printf("“Yo elijo Tijeras.¡Perdiste!“\n");
}

}
}
}
if (letra1=='T'){

tijera++;
if (x==1){
pertije++;
printf("“Yo elijo Piedras.¡Perdiste!“\n");
}
if (x==2){
gantije++;
printf("“Yo elijo Papel. Has ganado...“\n");
}
if (x==3){
emptije++;
printf("“Yo elijo Tijeras.Hemos empatado.“\n");
}

if (letra6=='a'){

tijera++;
if (x==1){
pertije++;
printf("“Yo elijo Piedras.¡Perdiste!“\n");
}
if (x==2){
gantije++;
printf("“Yo elijo Papel. Has ganado...“\n");
}
if (x==3){
emptije++;
printf("“Yo elijo Tijeras.Hemos empatado.“");
}

}
}


/*perpied
ganpied
perpape
ganpape
pertije
gantije*/




}




return 0;
}
  #2 (permalink)  
Antiguo 10/06/2015, 08:43
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Intento de juego : Piedra, papel o tijera

Cita:
Iniciado por aguston Ver Mensaje
Hola estoy teniendo bastantes problemas con el siguiente codigo
Y los problemas son? Es obvio que tu programa no funciona, pero no nos corresponde a nosotros imaginar cómo ha de funcionar.

Por otro lado, el código hay que decorarlo con las etiqueta del código correspondiente... solo por la tontería de que sea legible y todo eso. Para decorar el código elige el lenguaje que corresponda en el desplegable que dice "Highlight" y pega el código dentro de las etiquetas que te aparecerán en el editor.

Hasta aquí son reglas básicas que deberías intentar respetar tanto en este como en cualquier otro foro de programación.

Tratando ahora los problemas de tu código:

Como te comenté en el otro hilo que has abierto, que no te dejen usar funciones de la librería no te impide crear tus propias versiones para hacer el trabajo... me parecería algo totalmente surrealista que no te dejen crearte una función para, por ejemplo, comparar dos cadenas de caracteres. La gracia de no dejarte usar funciones de la librería es que así tienes que esforzarte por aprender cómo funcionan... no dejarte usar funciones (aunque sean propias) es como pedirte que sobrevivas sin respirar.

Si te fijas, la primera vez que entras al while lo haces sin haber inicializado la variable letra1. La declaras, sacas unos mensajes por pantalla y de repente miras a ver si su valor es distinto de 'S'... ¿En qué momento se supone que le das valor? Pues eso. Por si te cabe alguna duda, no es el único caso que te vas a encontrar... fíjate si no en la letra6, por poner un ejemplo.

El mensaje:

Código C:
Ver original
  1. if (letra1=='S'){
  2. printf("Nos vemos la próxima.");
  3. }

Debería estar fuera del while. Puesto que del tu programa únicamente abandonará el while para salir del programa, parece lógico que la despedida se de entonces, no?

Y piensa una cosa... el juego da tres opciones:

* Eliges piedra: dependiendo de la elección del ordenador aparecen tres posibles mensajes.
* Eliges papel: dependiendo de la elección del ordenador aparecen tres posibles mensajes.
* Eliges tijera: dependiendo de la elección del ordenador aparecen tres posibles mensajes.

Eso dan 9 mensajes... en tu código yo he contado 18... ¿por qué tienes duplicados los mensajes?

Y en serio, insisto, si tienes el usuario puede introducir "Piedra" o "Papel" como opción vas a tener que usar cadenas de caracteres en vez de char sueltos.

Un saludo
  #3 (permalink)  
Antiguo 10/06/2015, 10:07
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Intento de juego : Piedra, papel o tijera

A lo que te han comentado añadir que existen las funciones y no cobran por usarlas... refactoriza un poco el código y hazlo más legible porque así...
__________________
Aviso: No se resuelven dudas por MP!
  #4 (permalink)  
Antiguo 03/07/2015, 05:46
Avatar de Germano6  
Fecha de Ingreso: mayo-2013
Mensajes: 61
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Intento de juego : Piedra, papel o tijera

Puff... usa funciones y pon comentarios. Así no hay quien lo lea.
__________________
Simple principiante. Déjame las cosas claras y no me preguntes.

Etiquetas: char, funcion, int, intento, juego, papel, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:56.