elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  EXAMEN! AYUDA MASTER MIND COLORES
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: EXAMEN! AYUDA MASTER MIND COLORES  (Leído 2,832 veces)
javierdieguez

Desconectado Desconectado

Mensajes: 2


Ver Perfil
EXAMEN! AYUDA MASTER MIND COLORES
« en: 2 Abril 2013, 19:30 pm »

Buenas, llevo ya rato intentando y lo único que sé es sacar el código de este juego pero para que me diga los errores y los aciertos. Esto lo hemos hecho un amigo y yo pero no es lo que especificaba el enunciado:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CIFRAS 4
   
int comprobarLetra(char a,char combinacion[]);
int main()

{
time_t t;
 
int i,j,azar,intentos,colocadas,descolocadas,repetida,jugar,ola;
char num[6]={'A','B','C','D','E','F'};
char combinacion[CIFRAS]={' ',' ',' ',' '}; // 5 6 4 7
char jugada[CIFRAS]={' ',' ',' ',' '};
char volver_jugar;
 

jugar=intentos=repetida=azar=0;
 
srand((unsigned)time(&t));
 
   for(i=0;i<4;i++)
   {
       do
       {   azar=rand()%5;
           /*metemos la letra en el array*/
           /*comprobamos que no se repita, y en caso de repetirse, sobreescribiremos esa letra, por eso no salimos del do...while, para que la "i" siga valiendo lo mismo y estemos sobreescribiendo en la misma posición*/
           repetida=comprobarLetra(letra[azar],combinacion);
           combinacion=letra[azar];
       }while (repetida==1);
 
   }
 
   printf("\nLa combinación aleatoria es: ");
   for(j=0;j<CIFRAS;j++) printf("%c ",combinacion[j]);
   printf("\n\nIntroduce una letra por posicion, de la A a la F");
 
   do
   {
   for(j=0;j<CIFRAS;j++)
   {
   printf("\nLetra %d: ",j+1);
   scanf("%c",&jugada[j]);
   fflush(stdin);
   }
   intentos++;
 
   colocadas=0;
   descolocadas=0;
   for (i=0;i<CIFRAS;i++)
   {
   for (j=0;j<CIFRAS;j++)
   {
   if (combinacion==jugada[j])
   if (i==j) colocadas++;
   else
    descolocadas++;
   }
   }
 
   printf("\nTu jugada es: ");
   for(i=0;i<CIFRAS;i++) printf("%c ",jugada);
   printf("LETRAS BIEN COLOCADAS: %d] [LETRAS MAL COLOCADAS: %d] >>>>>>>",colocadas,descolocadas);
   if(colocadas==4) printf("\n\nENHORABUENA! HAS GANADO!(%d intentos)\n",intentos);
   else
   {
   printf("\n\nOTRA PARTIDA<S/N>?");
   scanf("%c",&volver_jugar);
   fflush(stdin);
   if (volver_jugar=='S') jugar=1;
   else jugar=0;
   }
   }while (colocadas<CIFRAS && jugar==1);
 
 
   system("pause");
 
 
   return 0;
}

int comprobarLetra(char a,char combinacion[]){
     int i,j,repetida=0;
     for(i=0;i<4;i++) //Recorremos cada elemento del array (EMPIEZAN POR 0!)
     {         
                if(combinacion==a)
                {
                       repetida=1;
                }
     }
     return (repetida);
}


El enunciado al que recalco es el siguiente y hace mencion a colores cuando se acierta o se falla:

2. Programa en C el juego ADIVINA COMBINACIÓN, este consiste en generar  3 dígitos aleatorios del 0 al 9 y almacenar cada uno de ellos en una cadena. El jugador intentará adivinar los 3 dígitos introduciendo los valores en sus supuestas posiciones, dispondrá de 4 oportunidades para adivinar la combinación, el programa le responderá en cada oportunidad con una pista por pantalla indicando:
Verde: Acierta valor y posición
Amarillo: Acierta valor pero no en la posición correcta
Rojo: No acierta ningún valor.

Por ejemplo, si la generación aleatoria es 5-6-8

Jugador introduce valores:
1 2 5
rojo rojo amarillo

Jugador introduce valores:
5 2 6
verde rojo amarillo

Jugador introduce valores:
5 6 8
verde verde verde
Acierta combinación en tres jugadas. Adios.

Notas:     
 Se debe usar una función aleatorio para generación de aleatorios (no procedimiento), los valores del usuario se leen en el procedimiento leer_combinación, se compararán con la cadena que contiene los valores aleatorios en la función compara (esta funcion muestra las pistas, gestiona los aciertos para el fin de programa)

int aleatorio(); (0.5p)
void leer_combinacion(int *v1,int *v2,int *v3);(0.5p)
int compara (int v1,int v2,int v3, char cadena[]);(1.5p)
main();(0.5p)



POR FAVOR, tenemos mi clase este examen mañana y no sabes como sacarlo, seguro que alguno de vosotros lo habréis hecho, muchas gracias!


En línea

Almapa

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: EXAMEN! AYUDA MASTER MIND COLORES
« Respuesta #1 en: 2 Abril 2013, 21:36 pm »

Un par de cosas que he cambiado para poder hacerlo funcionar:
- La variable "letra", supongo que es lo que se ha definido previamente como num[6]
-Todos los bucles "for" en los que metes la variable "combinacion" debes poner "combinacion" pues de lo contrario no estarás recorriendo el array elemento a elemento.
- La línea "combinacion=letra[azar]; " durante la definición de la combinación aleatoria correcta, debe estar fuera del "while" pues si no se repite la letra debe asignarla también en la posición correspondiente.

Creo que eso es todo, a mi me funciona bien habiendo hecho esos cambios.

Un saludo.


En línea

javierdieguez

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: EXAMEN! AYUDA MASTER MIND COLORES
« Respuesta #2 en: 3 Abril 2013, 09:47 am »

podéis colgarme el código?
En línea

Almapa

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: EXAMEN! AYUDA MASTER MIND COLORES
« Respuesta #3 en: 3 Abril 2013, 14:42 pm »

Mira a ver que te parece este código, he modificado el tuyo tal cual lo pide en el enunciado, con las funciones que pide y los parámetros que utiliza cada función.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define CIFRAS 3
  5. int resultado[2];
  6. char num[10]={'0','1','2','3','4','5','6','7','8','9'};
  7. int aleatorio();
  8. void leer_combinacion(int *v1,int *v2,int *v3);
  9. int compara (int v1,int v2,int v3, char cadena[]);
  10.  
  11.  
  12.  
  13. ////Función main
  14. int main()
  15. {
  16. //Definiión de variables    
  17. time_t t;
  18. int v1,v2,v3;
  19. int i,j,azar,intentos,repetida,jugar=1,ola;
  20. char cadena[CIFRAS];
  21. char jugada[CIFRAS];
  22. char volver_jugar;
  23.  
  24.  
  25. intentos=repetida=azar=0;
  26. srand((unsigned)time(&t));
  27.  
  28. //Bucle con la función aleatorio para generar la solución
  29. for(i=0;i<CIFRAS;i++)
  30. {
  31.   cadena[i]=num[aleatorio()];
  32. }
  33.  
  34. printf("\nLa combinación aleatoria es: ");
  35. for(j=0;j<CIFRAS;j++) printf("%c ",cadena[j]);
  36.  
  37. //Bucle para obtener las entradas del jugador y comprobar si son correctas.
  38. while (jugar==1)
  39. {
  40.   intentos++;
  41.   leer_combinacion(&v1,&v2,&v3);
  42.  
  43.   printf("\nTu jugada es: ");
  44.   printf("\n%i %i %i ",v1,v2,v3);
  45.   compara(v1,v2,v3,cadena);
  46.  
  47.  
  48.   if(resultado[0]==CIFRAS) printf("\n\nENHORABUENA! HAS GANADO!(%d intentos)\n",intentos);
  49.   else
  50.   {
  51.       printf("\n\nOTRA PARTIDA<S/N>?");
  52.       scanf("%c",&volver_jugar);
  53.       fflush(stdin);
  54.       if (volver_jugar=='S' || volver_jugar=='s') jugar=1;
  55.       else jugar=0;
  56.   }
  57. }
  58.  
  59. system("pause");
  60. return 0;
  61. }
  62.  
  63.  
  64. //// Función aleatorio
  65.  
  66. int aleatorio()
  67. {
  68.   return (rand()%10);
  69. }
  70.  
  71. //// Función compara
  72. int compara(int v1,int v2,int v3, char cadena[])
  73. {
  74.  
  75.   int i;
  76.   int jugada;
  77.   for (i=0;i<CIFRAS;i++)
  78.   {
  79.       if (i==0) jugada=atoi(&cadena[i])/100; else if (i==1) jugada=atoi(&cadena[i])/10; else jugada=atoi(&cadena[i]);
  80.       if (jugada==v1)
  81.       {
  82.       if (i==0) {printf("verde");resultado[0]++;} else {printf("amarillo");resultado[1]++;}
  83.       }
  84.       if (jugada==v2)
  85.       {
  86.       if (i==1) {printf("verde");resultado[0]++;} else {printf("amarillo");resultado[1]++;}
  87.       }
  88.       if (jugada==v3)
  89.       {
  90.       if (i==2) {printf("verde");resultado[0]++;} else {printf("amarillo");resultado[1]++;}
  91.       }
  92.       if (jugada!=v1 && jugada!=v2 && jugada!=v3) printf("rojo");
  93.   }
  94.   return 1;
  95.  
  96. }
  97.  
  98. //// Función leer_combinación
  99. void leer_combinacion(int *v1,int *v2,int *v3)
  100. {
  101.     int j;
  102.     printf("\n\nIntroduce un numero, del 0 al 9");
  103.     printf("\nNumero 1: ");
  104.     scanf("%i",v1);
  105.     printf("\nNumero 2: ");
  106.     scanf("%i",v2);
  107.     printf("\nNumero 3: ");
  108.     scanf("%i",v3);
  109.     fflush(stdin);
  110. }
  111.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con mi EXAMEN de COMANDOS en gnu-linux
Scripting
beholdthe 8 7,724 Último mensaje 25 Enero 2011, 00:21 am
por Foxy Rider
Examen de Ensamblador [Ayuda]
ASM
Alpha1020 7 10,785 Último mensaje 6 Noviembre 2009, 17:34 pm
por Eternal Idol
Ayuda con un examen, programacion BATCH
Scripting
itek 0 3,570 Último mensaje 14 Diciembre 2009, 13:30 pm
por itek
[AYUDA] Juego Master mind
Programación C/C++
Dayleap 0 1,372 Último mensaje 20 Abril 2016, 12:40 pm
por Dayleap
Ayuda!! Con los colores en C
Programación C/C++
LoQueSeaPI 1 1,603 Último mensaje 17 Octubre 2016, 05:30 am
por dato000
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines