Elaborar el juego del ahorcado con mtodo aleatorio
PROPOSITO Elabora una aplicacin de videojuego genera un numero al azar con mtodo aleatorio, para que con ese nmero se seleccione una palabra de entre las predefinidas y sea adivinada por el usuario
Introduccion. Se realizar el famoso juego del ahorcado, utilizando mtodos con el rand para seleccionar una palabra de manera aleatoria de un grupo ya determinado, el usuario tendr las oportunidades necesarias para poder adivinar esta palabra antes de que su mueco muera.
El cdigo se ir explicando mediante los comentarios ingresados en el programa, aqu se muestra el cdigo completo. (Los comentarios estn de color AZUL)
#include <stdio.h> /* Rutinas estndar, 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 /* Es preciso tomar en cuenta que solo se le daran 5 oportunidades pues solo sern 5 cosas las que se dibujaran*/ char palabra[80], intento[80], letras[80]; /* La palabra a adivinar, la que el jugador va consiguiendo y las letras que se han probado */ int oportunidades; /*Cantidad de intentos permitido */ char letra; /* Cada letra que prueba el jugador */ int i; /* Para mirar cada letra, con "for" */ int acertado; /* Si ha acertado alguna letra */ char ficticia[2]; /* Aux, para aadir letra a cadena */ char mensaje[80]; /* Los letreros que mostrar en pantalla */ char datosPalabras [NUMPALABRAS][80]= { "yari","katya","Oso","dificil", "practica","cuatro","informatica","ramos", "hola","conalep" }; void PrimerFallo() /* Primer fallo: Dibujamos la "plataforma" */ { line(screen,20,180,120,180, palette_color[13]); line(screen,100,180,100,125, palette_color[13]); line(screen,100,125,70,125, palette_color[13]); line(screen,70,125,70,130, palette_color[13]); } void SegundoFallo() /* Segundo fallo */ { /* Cabeza */ circle(screen,70,138,8, palette_color[12]); } void TercerFallo() /* Tercer fallo*/ { /* Tronco */ line(screen,70,146,70,160, palette_color[12]); } void CuartoFallo() /* Cuarto fallo */ { /* Brazos */ line(screen,50,150,90,150, palette_color[12]); } void QuintoFallo() /* Quinto fallo: */ { int j;
/* 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 no hay error: comenzamos con 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);
/* Se dibuja las partes segun se valla equivocando */ if (oportunidades <=4) PrimerFallo(); if (oportunidades <=3) SegundoFallo(); if (oportunidades <=2) TercerFallo(); if (oportunidades <=1) CuartoFallo();
/* Se muestran los intentos restantes */ textprintf(screen, font, 80,18, palette_color[15], "Te quedan %d intentos", oportunidades);
/* Se le muestra como va */ textprintf(screen, font, 80,32, palette_color[15], intento, oportunidades);
/* Se muestran las letras intentadas */ textprintf(screen, font, 20,72, palette_color[14], "Letras intentadas: %s", letras);
/* Aqu se le pie una letra ms */ textprintf(screen, font, 20,60, palette_color[14], "Que letra?");
letra = readkey()&0xff;
/* Aade esa letra a las tecleadas*/ strcpy (ficticia,"a"); /* Usando una cadena de texto aux */ ficticia[0]= letra; strcat (letras, ficticia);
acertado = 0; /* Se checa si el usuario acerto */ 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 falla, se le resta un intento */ oportunidades --;
} while ( strcmp (intento,palabra) /* Se repite hasta que acierte */ && (oportunidades>0)); /* osus oportunidades se agoten*/
/* Se le felicita o en caso contrario se muestra la palabra correcta */
/* Termino con la "macro" que me pide Allegro */ END_OF_MAIN();
Conclusin: Esta prctica fue una de las que ms se nos complic pues nos cost mucho hacer que el cdigo se ejecutara con normalidad y cuando lo hizo, no hacia la comparacin de las palabras, pero despues de mucho buscar lo logramos, y es grato saber que pudimos lograr esta prctica.