Código:
No entiendo lo siguiente:/*------------------------------*/ /* Intro a la programac de */ /* juegos, por Nacho Cabanes */ /* */ /* ipj05c.c */ /* */ /* Cuarto ejemplo: juego del */ /* ahorcado (versión básica) */ /* */ /* Comprobado con: */ /* - Djgpp 2.03 (gcc 3.2) */ /* y Allegro 4.02 - MsDos */ /* - MinGW 2.0.0-3 (gcc 3.2) */ /* y Allegro 4.02 - Win 98 */ /* - DevC++ 4.9.9.2(gcc 3.4.2) */ /* y Allegro 4.03 - Win XP */ /*------------------------------*/ #include <stdio.h> /* Rutinas estándar, como "printf" */ #include <string.h> /* Manejo de cadenas */ #include <stdlib.h> /* Para "rand" */ #include <time.h> /* Para "time" */ #include <ctype.h> /* Para "tolower" */ #include <allegro.h> #define NUMPALABRAS 10 #define MAXINTENTOS 5 /* No deberíamos modificar el número máximo de intentos, porque vamos a dibujar 5 "cosas" cuando se equivoque" */ char palabra[80], intento[80], letras[80]; /* La palabra a adivinar, la que */ /* el jugador 2 va consiguiendo y */ /* las letras que se han probado */ int oportunidades; /* El número de intentos permitido */ char letra; /* Cada letra que prueba el jug. dos */ int i; /* Para mirar cada letra, con "for" */ int acertado; /* Si ha acertado alguna letra */ char ficticia[2]; /* Aux, para añadir letra a cadena */ char mensaje[80]; /* Los letreros que mostrar en pantalla */ char datosPalabras [NUMPALABRAS][80]= { "Alicante","Barcelona","Guadalajara","Madrid", "Toledo","Malaga","Zaragoza","Sevilla", "Valencia","Valladolid" }; void PrimerFallo() /* Primer fallo: */ { /* Dibujamos la "plataforma" */ line(screen,20,180,120,180, palette_color[13]); } void SegundoFallo() /* Segundo fallo: */ { /* Dibujamos el "palo vertical" */ line(screen,100,180,100,125, palette_color[13]); } void TercerFallo() /* Tercer fallo: */ { /* Dibujamos el "palo superior" */ line(screen,100,125,70,125, palette_color[13]); } void CuartoFallo() /* Cuarto fallo: */ { /* Dibujamos la "cuerda" */ line(screen,70,125,70,130, palette_color[13]); } void QuintoFallo() /* Quinto fallo: */ { int j; /* Dibujamos la "persona" */ /* Cabeza */ circle(screen,70,138,8, palette_color[12]); /* Tronco */ line(screen,70,146,70,160, palette_color[12]); /* Brazos */ line(screen,50,150,90,150, palette_color[12]); /* Piernas */ line(screen,70,160,60,175, palette_color[12]); line(screen,70,160,80,175, palette_color[12]); } int main() { allegro_init(); /* Inicializamos Allegro */ install_keyboard(); /* Intentamos entrar a modo grafico */ if (set_gfx_mode(GFX_SAFE,320,200,0,0)!=0){ set_gfx_mode(GFX_TEXT,0,0,0,0); allegro_message( "Incapaz de entrar a modo grafico\n%s\n", allegro_error); return 1; } /* Si todo ha ido bien: empezamos */ srand(time(0)); /* Valores iniciales */ strcpy(palabra, datosPalabras[ rand()%(NUMPALABRAS+1)]); oportunidades = MAXINTENTOS; strcpy(letras,""); /* Relleno con _ y " " lo que ve Jug. 2 */ for (i=1; i<=strlen(palabra); i++) if (palabra[i-1]==' ' ) intento[i-1]=' '; else intento[i-1]='_'; intento[i]='\0'; /* Y aseguro que termine correctamente */ /* Parte repetitiva: */ do { clear_bitmap(screen); /* Dibujo lo que corresponde del "patibulo" */ if (oportunidades <=4) PrimerFallo(); if (oportunidades <=3) SegundoFallo(); if (oportunidades <=2) TercerFallo(); if (oportunidades <=1) CuartoFallo(); /* Digo cuantos intentos le quedan */ textprintf(screen, font, 80,18, palette_color[15], "Te quedan %d intentos", oportunidades); /* Le muestro c¢mo va */ textprintf(screen, font, 80,32, palette_color[15], intento, oportunidades); /* Las letras intentadas */ textprintf(screen, font, 20,72, palette_color[14], "Letras intentadas: %s", letras); /* Y le pido otra letra */ textprintf(screen, font, 20,60, palette_color[14], "Que letra?"); letra = readkey()&0xff; /* Añado esa letra a las tecleadas*/ strcpy (ficticia,"a"); /* Usando una cadena de texto aux */ ficticia[0]= letra; strcat (letras, ficticia); acertado = 0; /* Miro a ver si ha acertado */ for (i=1; i<=strlen(palabra); i++) if(tolower(letra)== tolower(palabra[i-1])) { intento[i-1]= palabra[i-1]; acertado = 1; } if (! acertado ) /* Si falló, le queda un intento menos */ oportunidades --; } while ( strcmp (intento,palabra) /* Hasta que acierte */ && (oportunidades>0)); /* o gaste sus oportunidades */ /* Le felicito o le digo cual era */ if ( strcmp (intento,palabra)==0) textprintf(screen, font, 20,100, palette_color[11], "Acertaste!"); else { textprintf(screen, font, 20,100, palette_color[11], "Lo siento. Era: %s", palabra); QuintoFallo(); } readkey(); return 0; } /* Termino con la "macro" que me pide Allegro */ END_OF_MAIN();
1. Porque en varios lugares (char palabra[80], intento[80], letras[80]; char ficticia[2]; char mensaje[80]; char datosPalabras [NUMPALABRAS][80]=...; ) Me aparece un [] con numeros entremedio? Eso no logro entenderlo, Gracias de antemano por esta respuesta!
2. En la parte de:
Cita:
Que es exactamente lo que hace?.... (Tambien tengo la duda de los [i-1], que hacen allí?) /* Relleno con _ y " " lo que ve Jug. 2 */
for (i=1; i<=strlen(palabra); i++)
if (palabra[i-1]==' ' )
intento[i-1]=' ';
else
intento[i-1]='_';
intento[i]='\0'; /* Y aseguro que termine correctamente */
for (i=1; i<=strlen(palabra); i++)
if (palabra[i-1]==' ' )
intento[i-1]=' ';
else
intento[i-1]='_';
intento[i]='\0'; /* Y aseguro que termine correctamente */
Porfavor necesito estas respuestas! Son para un trabajo escolar y la verdad que estoy perdido, Muchas gracias!!