C/Visual C - Mastermind con numeros

 
Vista:

Mastermind con numeros

Publicado por Nevhaazovat (1 intervención) el 16/12/2006 02:33:18
Hola, buenas.

Quiero hacer una variante del juego Mastermind pero cambiando las letras por numeros y dejando que estos se repitan. Pero como quiera que los errores o los fallos me persiguen allí donde quiera intentar algo nuevo, les posteo el nuevo código.

Uno de los fallos es que si meto como clave los 4 numeros iguales (p.e 1111) y luego en la comprobación se acierta, me saca que hay ¡¡¡12 desordenados!!! ¿Qué hacer para corregir esto?

¿Cómo puedo limitar los intentos a 5?
¿Y para imprimir **** en lugar de los números en este código?

Código va.

#include <stdio.h>
#define N 4

int error (char cadena[N]) {
int i, j;
for (i=0; i<N; i++) {

//CARACTERES ERRONEOS
if ((cadena[i]!='1') && (cadena[i]!='2') && (cadena[i]!='3') &&
(cadena[i]!='4') && (cadena[i]!='5') && (cadena[i]!='6') && (cadena[i]!='7')
&& (cadena[i]!='8') && (cadena[i]!='9') && (cadena[i]!='0')) {
printf("La clave es numerica.\n");
printf("Intentalo otra vez.\n");
return 1;
}
}
return 0;
}

int desordenados_ (char propuesta[N], char clave[N]) {
int i, j, desordenados=0;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
if (clave[i]==propuesta[j] && i!=j)
desordenados++;
if (desordenados) printf("Hay %d numeros desordenados en la clave.\n", desordenados++);
//else printf("No hay numeros desordenados en la clave.\n");
return desordenados;
}

int aciertos_ (char propuesta[N], char clave[N]) {
int i, aciertos=0;
for (i=0; i<N; i++)
if (clave[i]==propuesta[i])
aciertos++;
if (aciertos) printf("Hay %d numeros correctos en la clave.\n", aciertos);
else printf("Ningun numero introducido pertenece a la clave.\n");
return aciertos;
}

int main() {
char cl[N], pr[N];
int i, aciertos, desordenados;

do {
printf("Escribe la clave que se ha de adivinar (4 digitos): ");
gets(cl);
if(cl[N]>4)
printf("La clave es de 4 digitos.\nIntentalo ootra vez.\n");
} while (error(cl));
printf("\n\n");

while (aciertos!=4) {
do {
printf("\nEscribe tu propuesta: ");
gets(pr);
} while (error(pr));
desordenados=desordenados_(pr, cl);
aciertos=aciertos_(pr, cl);
}

if (aciertos==4) printf("\nAcertaste!\n");
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder