Ayuda con codigo de juego TAREA

Iniciado por Jay, 3 Octubre 2018, 05:28 AM

0 Miembros y 1 Visitante están viendo este tema.

Jay

Hola buenas noches tengo el problema con mi codigo
ME TRABE EN EL PUNTO 2 POR QUE UNA VEZ QUE LO METO EN EL IF YA NO ME PIDE QUE INGRESE EL NOMBRE
EN EL PUNTO 7 QUE SE LLEVARAN 3 CONTADORES TAMPOCO PUDE HACERLO
EL PUNTO 9 DE VALIDAR LAS OPCIONES DEL JUEGO
Y EL PUNTO 10 Y 11 AYUDA

Se pide que:
1. El programa inicia con un menu de dos opciones, Iniciar juego o Salir.
2. El juego iniciara preguntando al jugador su nombre, el cual debe admitir nombres conformados
por una o mas palabras.
3. Despues de que se capture el nombre, se preguntara al jugador que nivel desea jugar:
Normal. Solo utiliza piedra, papel y tijera.
Avanzado. Utiliza piedra, papel, tijera, lagarto y Spock.
4. El usuario podra elegir la opcion que utilizara para su jugada, dependiendo del nivel que seleccion.
5. Se generar´a de manera aleatoria la opcion con la que "jugar´a" la computadora.
6. Considerando la opcion ingresada por el usuario y la generada por la computadora se evaluara
si el usuario gano, perdio o empato.
7. Se llevaran 3 contadores, uno para cada caso (ganar, perder, empatar), y se incrementara el contador correspondiente.
8. El usuario podra repetir el juego cuantas veces quiera.
9. Es importante validar que:
La opcion ingresada exista.
Al solicitar que ingrese un numero no se ingrese una letra.
10. Al terminar de jugar se deberan desplegar en pantalla los contadores de juegos ganados, perdidos
y empatados.
11. Tambien se debera llevar el historial de resultados del juego, para poder saber que juegos gano,
perdio o empato. Se recomienda utilizar un arreglo para este punto.

Código (cpp) [Seleccionar]


#include <iostream>
#include <cctype>
#include <cstdlib>
#include <ctime>
#include <string.h>

using namespace std;

string Usuario();
string Usuario1();
string Maquina();
string Maquina1();
void DeterminaGanador(string, string string);
void DeterminaGanador1(string, string, string, string, string);

string Usuario(){

int eleccion;

do{
cout<< "Porfavor presiona 1=Papel, 2=Piedra, 3=Tijeras: ";
cin>>eleccion;


}while(eleccion < 1 || eleccion > 3);


if(eleccion == 1)
return "Papel";
else if(eleccion == 2)
return "Piedra";
else
return "Tijeras";

}

string Usuario1(){

int eleccion;

do{

cout<< "Porfavor presiona 1=Papel, 2=Piedra, 3=Tijeras, 4=Spock, 5=Lagarto: ";
cin>>eleccion;

}while(eleccion < 1 || eleccion > 5);

if(eleccion == 1)
return "Papel";

else if(eleccion == 2)
return "Piedra";
else if(eleccion == 3)
return "Tijeras";
else if(eleccion == 4)
return "Spock";

else
return "Lagarto";





}

string Maquina(){
int numero;

numero = (rand()%3)+1;

if(numero ==1)
return "Papel";
else if(numero == 2)
return "Piedra";
else
return "Tijeras";

}

string Maquina1(){
int numero;

numero = (rand()%5)+1;

if(numero ==1)
return "Papel";
else if(numero == 2)
return "Piedra";
else if(numero == 3)
return "Tijeras";
else if(numero == 4)
return "Spock";
else
return "Lagarto";

}

void DeterminaGanador(string nombre, string Jugador, string Maquina){
int ganar, empatar, perder;
if(Jugador == Maquina)
cout<< "Empate" << endl;
else
if((Jugador == "Piedra" && Maquina == "Tijeras") ||
(Jugador == "Papel" && Maquina == "Piedra") ||
(Jugador == "Tijeras" && Maquina == "Papel") )

cout << "Resultado: "<< nombre<< " Eres el Ganador"<< endl;

else
cout << "Resultado: La Maquina Gana"<<endl;

}

void DeterminaGanador1(string nombre, string Jugador, string Maquina){
int ganar, perder, empatar;
if(Jugador == Maquina)
cout<< "Empate" << endl;

else if((Jugador == "Piedra" && Maquina == "Tijeras") ||
(Jugador == "Papel" && Maquina == "Piedra") ||
(Jugador == "Tijeras" && Maquina == "Papel") ||
(Jugador == "Piedra" && Maquina == "Lagarto") ||
(Jugador == "Lagarto" && Maquina == "Spock") ||
(Jugador == "Spock" && Maquina == "Tijeras") ||
(Jugador == "Tijeras" && Maquina == "Lagarto") ||
(Jugador == "Lagarto" && Maquina == "Papel") ||
(Jugador == "Papel" && Maquina == "Spock") ||
(Jugador == "Spock" && Maquina == "Piedra") )

cout << "Resultado: "<< nombre<<"Eres el Ganador" << endl;

else
cout << "Resultado: La Maquina Gana" << endl;

}

struct nombreUsuario{

char nombre[20];

}nombreUsuario1;

int main()
{
string movimientoJugador;
string OponenteMovimiento;
char res;
srand(time(NULL));
string nombreJugador;
int seleccion;
int eleccion;


cout<<"Indica el numero de tu seleccion" <<endl;
cout<<"(1) Iniciar Juego"<<endl;
cout<<"(2) Salir"<<endl;
cin>>seleccion;


if(seleccion==1){

cout <<"Bienvenido al Juego. Porfavor Introduce un nombre: ";
cin.getline(nombreUsuario1.nombre, 20, '\n');

cout<<"Hola: "<<nombreUsuario1.nombre<<endl;

cout<<"Indica como quieres jugar"<<endl;
cout<<"(1) Normal"<<endl;
cout<<"(2) Avanzado"<<endl;
cin>>eleccion;

if(eleccion==1){

do{
movimientoJugador = Usuario();
OponenteMovimiento = Maquina();

cout << "Juegas con: " << movimientoJugador << endl;
cout << "La maquina juega con: " << OponenteMovimiento << endl;

DeterminaGanador(nombreJugador, movimientoJugador, OponenteMovimiento);

cout << "Quieres volver a jugar? [s/n]";
cin>>res;


}while(toupper(res) == 'S');
if(toupper(res) == 'N'){
cout << "Termina el juego estos son tus resultados!" <<endl;
cin>>res;

}



}

if(eleccion==2){

do{

movimientoJugador = Usuario1();
OponenteMovimiento = Maquina1();

cout << "Juegas con: " << movimientoJugador << endl;
cout << "La maquina juega con: " << OponenteMovimiento << endl;

DeterminaGanador1(nombreJugador, movimientoJugador, OponenteMovimiento);

cout << "Quieres volver a jugar? [s/n]";
cin>>res;


}while(toupper(res) == 'S');
if(toupper(res) == 'N'){
cout << "Termina el juego estos son tus resultados!" <<endl;
cin>>res;

}

}

}

if(seleccion==2){
cout<<"Gracias por participar";

} else(cout<<"Opcion no valida");





}





[MOD] Para publicar código usar las etiquetas GeSHi

OmarHack

#1
2:
Código (cpp) [Seleccionar]

#include<iostream>
#include<string>
#include<stdlib.h>
#include<time.h>

string nombreDelJugador;

int main()
{
if (seleccion ==1)
{
cout << "Pon tu nombre" << endl;

cin.ignore();
getline(cin,nombreDelJugador);

cout << "Hola " << nombreDelJugador << "qué dificultad elijes?" << endl;
}
}





7:
Para los contadores decalara 3 variables:
int ganar = 0;
int perder = 0;
int empatar = 0;

Y al final de cada condicional usas los operadores ++

Por ejemplo:
Código (cpp) [Seleccionar]

if ( opcionDelJugador == opcionDeLaMaquina) {
cout << "Empataste";
empatar++;
}





9:
Puedes hacerlo de muchísimas formas.
Recomiendo un switch case con una variable entera.

Código (cpp) [Seleccionar]

int variableParaGuardarLaOpcionSeleccionada = 0;
switch (variableParaGuardarLaOpcionSeleccionada)
{
case 1:
Haz esto;
break;

case 2:
Haz esto otro;
break;
//.... Pon case seguido de todas las opciones que puede ingresar el usuario.

deafult:
cout << "No has ingresado una opción correcta";
}





10:
Imprime en pantalla las variables ganar perder y empatar.
Código (cpp) [Seleccionar]

cout << "Has ganado " << ganar << " partidas" <<endl;





11:
Tienes que imprimir en pantalla
N°de juego ElecciónDelJugador ElecciónDeLaMaquina Resultado
1.                  Tijera.                          Piedra.                             Perdí.
2.                  Piedra.                         Piedra.                             Empate.
......
Usa el operador sizeof() para determinar cuantos juegos se han jugado y así poder asignarle el número de filas al array. Y ponle las 4 columnas.
Tras cada elección tienes que asignarle el resultado al array correspondiente.
Lo puedes hacer con un bucle for.
Busca ejemplos, que hay miles en google.

PD:
numero = (rand()%3)+1;
Generando los números aleatorios te recomiendo ponerlo así:
jugadaDeLaMaquina = 1+rand()%(4-1);
Así puedes ajustar el rango de números, si por ejemplo necesitas generar números del 10 al 20:
jugadaDeLaMaquina = 1+rand()%(21-10);
I like to test things.

Jay

Hola omar el segundo punto puedo utilizar la estructura para realiadll ?

Los contadores los puedo hacer dentro de la función void determina ganador? O deben de de estar eb el main?
Igual el switch puedo hacerlo en la función usuario ?
Por que ahí es donde se pide la opcion y tendría que validar

OmarHack

realiadll? No sé a que te refieres.

Si puedes usar los contadores dentro de funciones, pero declara las variables fuera para que sean accesibles:

int ganar = 0

void loquesea();
int main()
{}

void loquesea(argumentos);
{
ganar++;
}

Se hace así para que puedas acceder a la variable ganar desde cualquier función. Ya que si declaras la variable ganar dentro de la función:
void loquesea(argumentos);
{
int ganar;
ganar++;
}

Esta variable ganar será una variable local, que solo existe dentro de la función. Es decir, al acabar de ejecutarse la función, la variable ganar se destruye. Por lo que no podrás usarla en el int main, ni en ninguna otra función. Ya que solo existe mientras la función (en la cual declaraste la variable) se está ejecutando.

Con el switch te pasa lo mismo, declara las variables como variables globales, fuera de todas las funciones. Ponlas debajo del include, al igual que puse yo la variable string nombreDelJugador;


Cuando declaras una variable global, es decir, fuera de todas las funciones, esas variables son inicializadas en memoria y se mantendrán en memoria hasta que el programa finalice. Por lo que podrán ser accesibles por cualquier función.

Si en cambio declaras la variable dentro de una función, esa variable es creada cuando se llama a la función, y solo existe en memoria hasta que la función deje de ejecutarse. Por lo que solo puedes acceder a ella dentro de la propia función.
I like to test things.

Jay

Entiendo pero no puedo utilizar variables globales está prohibido , y te comentaba que si en el punto 2 podría usar una estructura para llamar al nombre ?

OmarHack

Pues si no puedes usar globales, retorna una variable que valga 1 de las funciones y se la sumas a una variable contador que Declares al principio dentro de la función main. En vez de declarar las funciones como void, declaralas como int, para poder devolver el valor 1.

Como en el ejercicio no vi nada de que no se pudiesen usar variables globales, las use para hacer el código más fácil de entender y sencillo.

Si puedes usar variables string dentro de estructuras. Pero no es necesario en este caso, ya que el nombre del jugador lo puedes imprimir entero solo con cout << nombreDelJugador;

Y para los arrais no te hace falta el nombre del jugador.

I like to test things.

Jay

ENTIENDo y sería un contador para cada variable ósea declarar tres variables en la funcion a sean igual a 1 y después sumar uno en el main a esa variable ? Entiendo entiendo ,

OmarHack

Necesitas 3 en el main para empate ganar y perder, y minimo una en cada funcion para que te retorne 1 cada vez que se ejecute la función.
I like to test things.

Jay

#8
Código (cpp) [Seleccionar]



#include <iostream>
#include <cctype>
#include <cstdlib>
#include <ctime>
#include <string.h>

using namespace std;

string Usuario();
string Usuario1();
string Maquina();
string Maquina1();
void DeterminaGanador(string, string string);
void DeterminaGanador1(string, string, string, string, string);

string Usuario(){

   int eleccion;


   do{
       cout<< "Porfavor presiona 1=Papel, 2=Piedra, 3=Tijeras: ";
       cin>>eleccion;


   }while(eleccion < 1 || eleccion > 3);


   if(eleccion == 1)
       return "Papel";
   else if(eleccion == 2)
       return "Piedra";
   else
       return "Tijeras";

}

string Usuario1(){

   int eleccion;

   do{

           cout<< "Porfavor presiona 1=Papel, 2=Piedra, 3=Tijeras, 4=Spock, 5=Lagarto: ";
           cin>>eleccion;

   }while(eleccion < 1 || eleccion > 5);

   if(eleccion == 1)
       return "Papel";

   else if(eleccion == 2)
       return "Piedra";
   else if(eleccion == 3)
       return "Tijeras";
   else if(eleccion == 4)
       return "Spock";

   else
       return "Lagarto";





}

string Maquina(){
   int numero;

   numero = (rand()%3)+1;

   if(numero ==1)
       return "Papel";
   else if(numero == 2)
       return "Piedra";
   else
       return "Tijeras";

}

string Maquina1(){
   int numero;

   numero = (rand()%5)+1;

   if(numero ==1)
       return "Papel";
   else if(numero == 2)
       return "Piedra";
   else if(numero == 3)
       return "Tijeras";
   else if(numero == 4)
       return "Spock";
   else
       return "Lagarto";

}

int DeterminaGanador(string nombre, string Jugador, string Maquina){
   int jugada=1;

   if(Jugador == Maquina)
       cout<< "Empate" << endl;
   else
       if((Jugador == "Piedra" && Maquina == "Tijeras") ||
               (Jugador == "Papel" && Maquina == "Piedra") ||
               (Jugador == "Tijeras" && Maquina == "Papel") )

           cout << "Resultado: "<< nombre<< " Eres el Ganador"<< endl;

       else
           cout << "Resultado: La Maquina Gana"<<endl;

           return jugada;

}

int DeterminaGanador1(string nombre, string Jugador, string Maquina){
   int jugada1=1;
   int ganar, perder, empatar;
   if(Jugador == Maquina)
       cout<< "Empate" << endl;

   else if((Jugador == "Piedra" && Maquina == "Tijeras") ||
               (Jugador == "Papel" && Maquina == "Piedra") ||
               (Jugador == "Tijeras" && Maquina == "Papel") ||
               (Jugador == "Piedra" && Maquina == "Lagarto") ||
               (Jugador == "Lagarto" && Maquina == "Spock") ||
               (Jugador == "Spock" && Maquina == "Tijeras") ||
               (Jugador == "Tijeras" && Maquina == "Lagarto") ||
               (Jugador == "Lagarto" && Maquina == "Papel") ||
               (Jugador == "Papel" && Maquina == "Spock") ||
               (Jugador == "Spock" && Maquina == "Piedra") )

           cout << "Resultado: "<< nombre<<"Eres el Ganador" << endl;

   else
       cout << "Resultado: La Maquina Gana" << endl;
       return jugada1;

}


int main()
{
   string movimientoJugador;
   string OponenteMovimiento;
   char res;
   srand(time(NULL));
   string nombreJugador;
   int seleccion;
   int eleccion;
   int ganar=0, empatar=0, perder=0;


   cout<<"Indica el numero de tu seleccion" <<endl;
   cout<<"(1) Iniciar Juego"<<endl;
   cout<<"(2) Salir"<<endl;
   cin>>seleccion;


   if(seleccion==1){

    cout <<"Bienvenido al Juego. Porfavor Introduce un nombre: ";
    cin.ignore();
    getline(cin, nombreJugador);

    cout<<"Hola: "<<nombreJugador<<endl;

       cout<<"Indica como quieres jugar"<<endl;
       cout<<"(1) Normal"<<endl;
       cout<<"(2) Avanzado"<<endl;
       cin>>eleccion;

       if(eleccion==1){

       do{
           movimientoJugador = Usuario();
           OponenteMovimiento = Maquina();

           cout << "Juegas con: " << movimientoJugador << endl;
           cout << "La maquina juega con: " << OponenteMovimiento << endl;

           DeterminaGanador(nombreJugador, movimientoJugador, OponenteMovimiento);

           cout << "Quieres volver a jugar? [s/n]";
           cin>>res;


       }while(toupper(res) == 'S');
       if(toupper(res) == 'N'){
               cout << "Termina el juego estos son tus resultados!" <<endl;
               cin>>res;

           }


       }

       if(eleccion==2){

           do{

               movimientoJugador = Usuario1();
               OponenteMovimiento = Maquina1();

               cout << "Juegas con: " << movimientoJugador << endl;
               cout << "La maquina juega con: " << OponenteMovimiento << endl;

               DeterminaGanador1(nombreJugador, movimientoJugador, OponenteMovimiento);

               cout << "Quieres volver a jugar? [s/n]";
               cin>>res;


           }while(toupper(res) == 'S');
               if(toupper(res) == 'N'){
               cout << "Termina el juego estos son tus resultados!" <<endl;
               cin>>res;

               }

       }

   }

   if(seleccion==2){
       cout<<"Gracias por participar";

   } else(cout<<"Opcion no valida");





}




No bro no supe como hacer los contadores, ni lo de validar la opcion por que cuando metes una letra como opcion se cicla imagino que es por el do while al pedir la seleccion, y tambien necesitos dos punteros y una estructura en el programa pero no se donde implementarla, solo logre arreglar lo de el nombre ahora si lo imprime bien pero los contadores no podrias decirme como sumarlos? ya declare las variables pero no supe como hice que me regresara 1 y declara en el main, y el de validar intente el switch pero con el do que tiene no supe que rollo, y pues lo de el puntero y estructura como lo podria implementar en este programa




[MOD] para publicar código usar las etiquetas GeSHi










OmarHack

#9
Si puedes usar punteros (pensé que no podías) usalos para hacer los contadores. Por ejemplo algo así:

Código (C++) [Seleccionar]
int *funcion()
{
static int empateEnFuncion;
static int ganarEnFuncion;
static int perderEnFuncion;

if (jugadaDelUsuario == jugadaDeLaMaquina)
  {
  empateEnFuncion++;
  return &empateEnFuncion;
  }
}

int main()
{
Bucle ()
{ funcion(){}}

Funcion MostrarResultadoAlAcabarLaPartida()
cout << "Has empatado " << *empateEnFuncion << " número de veces";
}


No sé como puedes meter una estructura aquí xD. No tendría demasiado sentido. Es como usar una estructura para un hola mundo.
Yo le añadiría algo complejo al juego una vez terminado, que me permita usar estructuras.
Usa una estructura para el historial a ver que te sale. Pero primero completa el juego por pasos e intenta ordenar un poco el código y renombrar las variables para que se entienda mejor que guarda cada cosa.
Dale algo de formato al código, pon las funciones debajo de la función main, etc. Para que el código sea interpretable a simple vista, y tu profesor no necesite ir línea por línea mirando el código.
También usa las etiquetas para C++ en el foro. Arriba a la derecha, cuando estés escribiendo el código, donde pone Código GeSHi le das y puedes seleccionar C++
Mete tus códigos dentro de las etiquetas.
I like to test things.