Problema juego de cartas

Si eres principiante y tienes alguna consulta entra en este foro.
Responder
Mensaje
Autor
juacord
Mensajes: 1
Registrado: 02/09/2019 2:58 pm

Problema juego de cartas

#1 Mensaje por juacord » 02/09/2019 3:08 pm

Buenas tardes, estoy intentando hacer el juego siete y medio. Solamente puedo usar Arrays, for/do/do-while y condicionales if/else. Funciones y objetos lo vere mas adelante asi que por ahora no puedo usarlos.
La consigna es la siguiente:

En este juego de cartas al jugador se le reparte 1 carta. El objetivo es acercarse a 7 y medio sin pasarse. Si cree que le falta mucho puede pedir todas las cartas que quiera hasta llegar a 7.5, si se pasa, pierde.
Si decide plantarse antes de pasarse de 7 y medio, juega la Computadora que hace lo mismo. Si le empata o gana al jugador, entonces la PC gana.
Se juega con las cartas españolas, del 1 al 7 y las figuras. Cada carte vale su valor. Las figuras vale medio.
Valor de las cartas:
1, 2, 3, 4, 5, 6 ,7 -> su valor
10, 11 y 12 -> 0.5.

Por ahora he hecho esto:

Código: Seleccionar todo

#include <iostream>
#include <ctime>
#include <conio.h>
#include<iostream>
#include<stdlib.h>

using namespace std;

int main ()
{
	bool game_over;
	
	cout<<"Bienvenido al juego siete y media"<<endl;
	cout<<endl;
	
	cout<<"Use tecla -i- para iniciar el juego y recibir una carta"<<endl;
	cout<<"Use la tecla -n- para no recibir mas cartas"<<endl;
	cout<<"Use la tecla -r- para ver las reglas"<<endl;
	cout<<"Use la tecla -s- para salir del juego"<<endl;
	cout<<endl;

	
	while (game_over == false)
	{
		
		while(!kbhit()) { 
			int tecla=getch();
			
			int mazo [4][10] = {{1,2,3,4,5,6,7,10,11,12},{1,2,3,4,5,6,7,10,11,12},{1,2,3,4,5,6,7,10,11,12},{1,2,3,4,5,6,7,10,11,12}};
			int cantidad = 40;
				srand (time(NULL));
                    int palo= rand ()% 4+1;
	                int carta = rand () % 10+1;
			
	            for (int i =0; i<10;i++)
	               {
                     for(int j=0; j<4;j++)
		              cout<<mazo[j] [i];
		              cout<<endl;	
                   }

	                cout<<"La carta es: ";
	                
	                     switch (carta)
						 {
		                        case 1:cout<< " 1 de "; break;
								case 2:cout<< " 2 de ";break;
								case 3:cout<< " 3 de ";break;
								case 4:cout<< " 4 de ";break;
								case 5:cout<< " 5 de ";break;
								case 6:cout<< " 6 de ";break;
								case 7:cout<< " 7 de ";break;
								case 8:cout<< " 10 de ";break;
								case 9:cout<< " 11 de ";break;
								case 10:cout<< " 12 de ";break;
	                     }
	                     switch (palo)
						 {       case 0:cout<< "Espada. "<<endl;
						         case 1:cout<< "Basto. "<<endl;
								 case 2:cout<< "Oro. "<<endl;
								 case 3:cout<< "Copa. "<<endl;
						 } 
	
	                        int valor_medio, valor_carta_entera;
	                  
					    if (carta == 8 || carta == 9  || carta == 10 )
						{
						valor_medio=0.5;
						}
						else 
						{
						valor_carta_entera = carta;
						}
			
			switch(tecla)
			{
			case 'i': case 'I':
    
						//aca va tirar una carta, sacarla del mazo y preguntar si quiere otra carta sino pasar a la pc y hacer los dos primeros pasos//
	                
	                
	                cout<<"Usted ha sacado: "<<carta<<endl;
	                cout<<"Si quiere otra carta ingrese tecla -i- si quiere parar ingrese tecla -n- y será el turno de la PC."<<endl;
	            
	                
	
						
						
						float maximo=7.5; 
						float puntaje_pc[8]= {1,2,3,4,5,6,7,0.5};
						float puntaje_jugador[8]= {1,2,3,4,5,6,7,0.5};
						
						
			                                  if (puntaje_jugador < maximo);
			                                   {
			                                   cout<<"A obtenido "<<puntaje_jugador<< " puntos, ahora es el turno de la PC. "<<endl;
											   }
											   else if  (puntaje_jugador == maximo);
											   {
											   cout<<"A obtenido " <<puntaje_jugador<< " puntos, ha ganado, felicidades."<<endl;
											   game_over = true;
											   }
											   else
											   {
											   cout<<"Usted se ha pasado de 7.5, usted ha perdido."<<endl;
											   game_over = true;
											   }
			case 'n': case 'N':
				
				cout<<"Usted no quiere mas cartas. Su resultado es: "<<puntaje_jugador<<endl;
				cout<<"Ahora es el turno de la PC."<<endl;
				
						float maximo=7.5; 
						float puntaje_pc[8]= {1,2,3,4,5,6,7,0.5};
						float puntaje_jugador[8]= {1,2,3,4,5,6,7,0.5};
				
				
				      if (puntaje_pc < puntaje_jugador || (puntaje_pc > valor_maximo));
					  {
					  cout<<"La PC ha obtenido "<<puntaje_pc<< " puntos, el jugador ha ganado. Felicidades "<<endl;
					  game_over = true;
				      }	 
			          else if ((puntaje_pc == valor_maximo) ||  (puntaje_pc == puntaje_jugador));  
			          {
			          cout<<"A obtenido " <<puntaje_pc<< " puntos, ha ganado la pc."<<endl;
			          game_over = true;
			          }
				
			case 'r': case 'R': 
				cout<<"Reglas del juego: "<<endl;
				cout<<endl;
	            cout<<"En este juego de cartas al jugador se le reparte 1 carta."<<endl; 
                cout<<"El objetivo es acercarse a 7.5, sin pasarse. Si cree que le falta puede pedir todas las cartas que quiera pero si se pasa, pierde."
                cout<<"Si decide plantarse antes de pasarse de 7 y medio, juega la Computadora que hace lo mismo. Si le empata o gana al jugador, entonces la PC gana."
                cout<<"Se juega con las cartas españolas, del 1 al 7 y las figuras. Cada carta vale su valor. Las figuras valen 0.5."<<endl;
                cout<<"Al apretar tecla -i-, el juego inicia automaticamente dando entender que ya conoce estas reglas".<<endl;
				cout<<"Si quiere salir del juego presioné la letra s."<<endl;break;

			case 's': case 'S': 

				cout<<"Usted a salido del juego."<<endl;
				game_over = true;
			}
		}
	
	}	
	return 0;
}
Publico aca mas que nada para tener una idea de alguien que sepa mas que yo porque hasta ahora he tenido problemas en todos los ejercicios que me han dado pero este es el primero en el cual no tengo idea de como seguirlo.

dehm
Mensajes: 304
Registrado: 29/04/2011 7:31 am

Re: Problema juego de cartas

#2 Mensaje por dehm » 02/09/2019 11:03 pm

El problema más grave que veo en tu código es que creas y defines valores dentro del bucle, cuando estos han de crearse antes del bucle y luego usarse tantas veces como quieras.
No es normal que crees los arrays de mazo,puntaje_pc, puntaje_jugador, los valores de cantidad, maximo....etc dentro del bucle. Eso es un disparate y es importante que entiendas que el código ha de estar bien estructurado. Solo algunas variables locales las debes de crear dentro del bucle y en el momento de su uso.

Cuando haces las cosas así, además de ser un gasto importante de recursos, ya que eso de ir creando varios arrays y variables cada vez es obligar al ordenador a que trabaje muchas veces para hacer lo mismo, tiene el problema de que esos arrays son locales al momento en el que los estás usando. Imagina que quieres que tu programa tenga en cuenta las cartas ya usadas para que si vuelven a salir, sean descartadas hasta que aparezca una que todavía no ha salido....sería imposible dado que estás creando un mazo distinto cada vez que eliges una carta.

Dicho esto, hay problemas de sintaxis que hace que realmente el código ni compile, pero supongo que es lo que pasa cuando uno lleva horas dándose cabezazos contra la pared (a todos nos ha pasado al principio y acabamos perdiendo toda la perspectiva).

Otra cosa,,,,siguiendo con lo de estructurar el programa. Lo suyo sería que dentro del bucle que pide cartas, no se establezcan los resultados, sino que sólo se limite a pedir cartas e ir sumándolas. Luego, cuando tanto el jugador como el PC hayan salido de esa parte (pedir, evaluar) será cuando se establezca quién ha ganado, en función de si alguno de los dos se ha pasado, o si no, del que se acerque más a 7.5.

Mas cosas....el uso de khbit, getch, etc....mejor usar funciones estándar.

Yo he hecho modificaciones sobre la base de tu código, no resuelve la parte del juego del PC (debería ser fácil añadirlo), ni como te he comentado las conclusiones finales (evaluar quién ha ganado partiendo con los datos de las puntuaciones obtenidas). El código que pongo se limita a pedir cartas (si pulsas la letra i o I), suma las puntuaciones y sólo sale del bucle si lo pides de forma expresa pulsando 's' o si iguala o supera las 7.5.

Si ves que te atascas, publica más avances para intentar terminar de resolver el ejercicio.

Código: Seleccionar todo

#include <iostream>
#include <ctime>

using namespace std;

int main ()
{
    bool game_over = false;
    char palos[][8] = {"oros","copas","espadas","bastos"};
    char cartas[][10]={"as","dos","tres","cuatro","cinco","seis","siete","sota","caballo","rey"};
    float valores[] = {1,2,3,4,5,6,7,0.5,0.5,0.5};
    float puntos_jugador=0, puntos_PC=0;
    float maximo=7.5;
    char tecla;
    srand (time(NULL));
    int palo, carta;

    cout<<"Bienvenido al juego siete y media"<<endl;
    cout<<endl;

    cout<<"Use tecla -i- para iniciar el juego y recibir una carta"<<endl;
    cout<<"Use la tecla -n- para no recibir mas cartas"<<endl;
    cout<<"Use la tecla -r- para ver las reglas"<<endl;
    cout<<"Use la tecla -s- para salir del juego"<<endl;
    cout<<endl;

    //turno del jugador
    while ((tecla!='s' || tecla != 'S') && game_over == false)
    {
        cin>>tecla;
        switch(tecla)
        {
        case 'i':
        case 'I':
        {
            palo= rand ()% 4;
            carta = rand () % 10;
            puntos_jugador+=valores[carta];
            //aca va tirar una carta, sacarla del mazo y preguntar si quiere otra carta sino pasar a la pc y hacer los dos primeros pasos//
            cout<<"Usted ha sacado: "<<cartas[carta]<<" de "<<palos[palo]<<endl;
            cout<<"Si quiere otra carta ingrese tecla -i- si quiere parar ingrese tecla -n- y será el turno de la PC."<<endl;
            cout<<"Puntos: "<<puntos_jugador<<endl;
            if (puntos_jugador>=maximo)
            {
                game_over = true;
            }
            break;
        }
        case 'r':
        case 'R':
            cout<<"Reglas del juego: "<<endl;
            cout<<endl;
            cout<<"En este juego de cartas al jugador se le reparte 1 carta."<<endl;
            cout<<"El objetivo es acercarse a 7.5, sin pasarse. Si cree que le falta puede pedir todas las cartas que quiera pero si se pasa, pierde.";
            cout<<"Si decide plantarse antes de pasarse de 7 y medio, juega la Computadora que hace lo mismo. Si le empata o gana al jugador, entonces la PC gana.";
            cout<<"Se juega con las cartas españolas, del 1 al 7 y las figuras. Cada carta vale su valor. Las figuras valen 0.5."<<endl;
            cout<<"Al apretar tecla -i-, el juego inicia automaticamente dando entender que ya conoce estas reglas"<<endl;
            cout<<"Si quiere salir del juego presioné la letra s."<<endl;
            break;

        case 's':
        case 'S':

            cout<<"Usted ha salido del juego."<<endl;
            game_over = true;
            break;
        }
    }
    //turno del PC(pseudocodigo)
    //{..............}
    //establecer ganadores
    //si puntos_jugador y puntos_pc > maximo --> no gana nadie
    //en caso contrario
    //si puntos_jugador>puntos_pc -->gana jugador
    //si puntos_pc > puntos jugador -->gana pc
    //si no es ninguno de estos casos --> empate
    cout<<"Total puntos jugador: "<<puntos_jugador;
    return 0;
}
(Edito el mensaje para arreglar fallos y añadir mejoras y comentario al código)
Aprendiendo

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados