[consulta] ahorcado :B

Iniciado por Darioxhcx, 1 Febrero 2011, 08:14 AM

0 Miembros y 1 Visitante están viendo este tema.

Darioxhcx

wenas, hace como 1 mes se me ocurrio hacer un ahorcado y bue, al principio pense q habia terminado de pensarlo y de pensarlo bien, al parecer me ekivoke ;D
bue el tema es que no se me ocurre como mostrar el caracter ingresado si es valido, x ejemplo

z_ _ _ _ a
ingresa r y muestre
z _ r r a
esto es lo que tengo hasta ahora
#include <stdio.h>
#include <string.h>
main () {
     char palabra[10][10]={{"cabina"},
                           {"olas"},
                           {"zorra"},
                           {"heladera"},
                           {"p0rno"},
                           {"mosca"},
                           {"monitor"},
                           {"pelota"},
                           {"viento"},
                           };
    char letra[1];
     int c,random,x,longitud,intentos=5;
     srand(time(NULL));
     random=(rand()%9);
     longitud=strlen(palabra[random])-1;
     printf("##################################\n");
     printf("        palabra a encontrar\n");
     printf("##################################\n");
     printf("intentos : %d\n",intentos);
     printf("%c",palabra[random][0]);
     for(c=1;c<=longitud-1;c++) {
                    printf(" _ ");
}
     printf("%c\n",palabra[random][longitud]);
     printf("ingrese su letra: ");
     scanf("%s",letra);
     printf("Tu letra es: %s\n",letra);     
     for (x=1;x<=longitud-2;x++){
if (letra[0]==palabra[random][x]) printf("adivinaste la letra %s\n",letra);
}
     getchar();
     }

el tema tambien esta que no manejo punteros , por temas de tiempo esto lo hago para distrarme cuando no trabajo o estoy diseniando :3
saludos

Khronos14

Estas intentando hacer un ahorcado y por lo que veo, no tienes mucha idea de programar.

1º.- La función main se define como int y debe devolver un valor.
2º.- Defines letra como un array cuando puedes hacer esto:

char letra;
scanf("%c", &letra);


3º.- Para hacer el ahorcado tienes que hacer búsquedas en las cadenas, y lo más normal es hacerlo con punteros.  En la cabecera string.h tienes funciones como strlen, strcpy, strstr, etc...

4º.- La lista de palabras la puedes definir así:


char  * palabra[]= {"cabina",
                    "olas",
                    "heladera",
                    "p0rno",
                    "mosca",
                    "monitor",
                    "pelota",
                    "viento"};


Saludos.

Darioxhcx

aver, trankilo señor anderson
1º vos hablas sobre el return para main ? na
2º si el usuario escriba , mas de 1 caracter va a funcionar mal si no me ekivoko , o no ?

3 y 4 , si gracias
me iluminase y me dio una gran idea señor anderson, gracias por mostrarme el camino

Khronos14

¿A qué viene lo de señor anderson?  :huh:

1º.- Si, me refiero al return del main. La función main hay que definirla para que devuelva un int, y finalizando el programa con un return 0 le comunicas al sistema operativo que tu aplicación se ejecutó con éxito.

2º.- Si, sólo te recoge un caracter. Lo que tu hacias con %s no te debería funcionar.
Para coger todos los caracteres hasta que se pulse enter, tienes que hacer algo como esto:

char buff[10];
scanf("%[^\n]", buff);


Saludos.

RyogiShiki

#4
alguna vez deje a medias un ahorcado en c haaaace muuuchisimo tiempo, cuando apenas comenzaba, antes de dejar de programar y ahora retomarlo... el caso es que lo voy a buscar, te lo voy a pasar para que lo estudies y saques tus propias conclusiones de como deberías hacerlo...

--EDIT--
Aquí está, está escrito usando las librerias ncurses (espero no sea problema) y las palabras son leidas desde un archivo de texto que se debe llamar palabras.txt aunque eres libre de cambiarlo es por eso que la cantidad de palabras es irrelevante, ya que el ciclo acaba cuando no hay nada más que leer, lo único que falto implementar (aparte de acabarlo XD) fue la selección aleatoria de palabras..... El código es muy viejo y está super incompleto, pero creo que debería servir como una idea general (es bueno que lo leas entiandas y hagas el tuyo porque no creo que el mio te sirva de mucho) de como deberias hacerlo: http://www.mediafire.com/?datuf1pr4x92ill

Espero sirva de algo saludos


Nork

#5
Así rápido se me ocurre una manera que quizá te sirva. Crear un array de boleanos del mismo tamaño que la palabra y cada vez que acierte una letra pones la posición del array de boleanos a 1 y así muestras las letras que lleva (la posición que este a 1 correspondrá a la letra de la palabra a mostrar. Si no muestras '_').

Ex:

array auxiliar de boleanos:   0 0 0 0 0
palabra a adivinar:              h  e l  l  o

Si el usuario introduce la h ->

array auxiliar de boleanos:   1 0 0 0 0
palabra a adivinar:              h  e l  l  o

Si el usuario introduce la l ->

array auxiliar de boleanos:   1 0 1 1 0
palabra a adivinar:              h  e l  l  o

S4ludos!
C' Est La Vie

Khronos14

Cita de: Nork en  1 Febrero 2011, 21:08 PM
Así rápido se me ocurre una manera que quizá te sirva. Crear un array de boleanos del mismo tamaño que la palabra y cada vez que acierte una letra pones la posición del array de boleanos a 1 y así muestras las letras que lleva (la posición que este a 1 correspondrá a la letra de la palabra a mostrar. Si no muestras '_').

Ese método es muy chorizo... la forma "normal" de hacerlo es usando las funciones de cadenas para buscar coincidencias, no tiene más ciencia.

Saludos.

Nork

Cita de: Khronos14 en  1 Febrero 2011, 23:47 PM
Ese método es muy chorizo... la forma "normal" de hacerlo es usando las funciones de cadenas para buscar coincidencias, no tiene más ciencia.

Saludos.

No sé que será para ti chorizo pero la idea que le he dado no tiene nada que ver con lo que dices... usando funciones de cadenas, como dices, puedes ver si esta la letra para luego marcar el 1 en el array de boleanos. Si no, ¿cómo sabes las que lleva acertadas? de algún modo tienes que anotarlo.
C' Est La Vie

do-while

¡Buenas!

Ya se que no se hacen trabajos, pero ya que se ha dejado un enlace, en este otro enlace tienes el codigo que acabo de colgar. Maneja structs, funciones, punteros y memoria dinamica. Evidentemente, se puede mejorar mucho cargando los datos desde un fichero, eso si quieres lo haces tu, ya que el hecho de utilizar vectores te limita la cantidad de datos. Si no tienes claro como funciona todo eso y las funciones de la biblioteca estandar que se manejan, no se si lo podras seguir, pero espero que te sirva de orientacion y que lo completes con el codigo que dejo gankutsuo.

Si no entiendes el codigo, te tocara estudiar. Hay algun comentario, pero no todo esta explicado, por lo tanto tendras que revisarlo linea a linea.

¡Saludos!

Por cierto, si no cambias de actitud poca ayuda mas vas a conseguir en esta vida.
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

Darioxhcx

te entiendo do-while , capas q si mi actitud no fue de las mejores, pero creo yo, que cuando tengo que dar opinion sobre el trabajo o lo realizado x alguien q necesita ayuda, eso mismo , necesita ayuda y/o orientacion , lo que pedi fue una idea de como seguir o como realizar el objetivo, no me van a servir comentarios como "ta todo mal , empesa de nuevo"  , si no me decis en que estoy mal o como minimo, como plantear la solucion, y se q no se hacen las tareas, o es una tarea ni trabajo de universidad ni nada x el estilo, eso lo hago x hoobie en mis ratos libres
voy a mirar los 2 codigos y si tengo tiempo libre a ver si entiendo sobre los fucking punteros q me terminaron haciendo kilombo cuando los vi :3
gracias