bueno aquí esta el código
Código PHP:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void desarrollo(int cantidad, int i);
struct nodo
{
char palabra[30];
struct nodo*sig;
};
typedef struct nodo listaPalabra;
char variable[30];
listaPalabra * crearLista(listaPalabra *inicio)
{
inicio=NULL;
return inicio;
}
listaPalabra *insertarEnLista(char palabra[30],listaPalabra *inicio)
{
listaPalabra *nuevoNodo;
listaPalabra *aux;
nuevoNodo=(listaPalabra*)malloc(sizeof(listaPalabra));
strcpy(nuevoNodo->palabra,palabra);
nuevoNodo->sig=NULL;
if (inicio == NULL)
{
inicio=nuevoNodo;
}
else
{
aux=inicio;
while (aux->sig !=NULL)
{
aux=aux->sig;
}
aux->sig=nuevoNodo;
}
return inicio;
}
void imprimir (listaPalabra *lista)
{
listaPalabra *auxiliar;
auxiliar=lista;
while (auxiliar!=NULL)
{
printf("%s \n",auxiliar->palabra);
auxiliar=auxiliar->sig;
}
}
listaPalabra *buscarPalabra (listaPalabra *lista)
{
if (lista != NULL)
{
listaPalabra *auxiliar;
auxiliar = lista;
strcpy(variable,lista->palabra);
lista = lista->sig;
}
return lista;
}
void Jugar()
{
system ("color b");
system("cls");
int cantidad,i,j,aux,x,indice,z;
char caracter,palabra[30];
printf("\n\n\t\tCon cuantas palabras desea jugar? (3 a 10)\n");
scanf("%d",&cantidad);
do
{
if((cantidad<3) || (cantidad>10))
{
system("cls");
printf("\n\n\n\t\tCon cuantas palabras desea jugar? (3 a 10)");
printf("\n\n\t Debe introducir un numero comprendido entre 3 y 10 \n");
scanf("%d",&cantidad);
}
}while((cantidad<3) || (cantidad>10));
x=1; i=1; j=0;
listaPalabra*lista;
lista=crearLista(lista);
while (i<=cantidad)
{
FILE *archivo;
archivo= fopen("prueba.txt","r");
if (archivo== NULL)
{
printf("El archivo no se encuentra");
}
else
{
while (feof(archivo)==0)
{
do
{
caracter=fgetc(archivo);
}while(caracter=='\n');
if (caracter!=';')
{
palabra[j]=caracter;
j++;
}
else
{
caracter=fgetc(archivo);
aux= (int)(caracter-48);
if (aux==i)
{
lista=insertarEnLista(palabra,lista);
}
indice=0;
while (indice<20)
{
palabra[indice]=0;
indice++;
}
j=0;
}
}
close(archivo);
}
i++;
}
for(z = 1; z <=cantidad; z++)
{
lista=buscarPalabra(lista);
desarrollo(cantidad,z);
}
getch();
}
void desarrollo(int cantidad, int i)
{
int vidas=6,cont=0,indice=0,contador=0,adivino;
char letra,palabra[30],introducidas[52],restantes[52],aux[52]="A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z";
printf("%s\n",variable);
while (indice < (strlen(variable))*2)
{
palabra[indice]='_';
palabra[indice+1]=' ';
indice+=2;
}
indice=0;
while (indice<52)
{
introducidas[indice]=0;
indice++;
}
indice=0;
strcpy(restantes,aux);
while((vidas > 0) && (cont < strlen(variable)))
{
system("cls");
printf("%s",variable);
printf("\n\n\n %s \n\n",palabra);
printf("\n\n Letras introducidas= %s",introducidas);
printf("\n\n Letras restantes= %s",restantes);
printf("\n\n palabra %i de %i ",i,cantidad);
printf("\n\n\n Vidas(%i)= ",vidas);
contador=0;
while (contador<vidas)
{
printf(" * ");
contador++;
}
printf("\n\n\n Salir de la partida tecla(0)");
printf("\n\n\n\n\t Ingrese letra\n");
scanf("%c",&letra);
adivino=0;
contador=0;
while (contador < strlen(variable))
{
if(letra==variable[contador])
{
palabra[contador*2]=letra;
adivino=1;
break;
}
contador++;
}
if (adivino==0)
{
vidas--;
}
introducidas[indice]=letra;
introducidas[indice+1]="-";
indice+=2;
cont++;
}
}
void menu()
{char resp;
do
{ system ("color b");
system("cls");
printf("\n\n\t\t\t* * * * * MENU DE OPCIONES * * * * *");
printf("\n\t\t---------------------------------------------------");
printf("\n\t\t\t Juego de el ahorcado ");
printf("\n\t\t---------------------------------------------------\n\n\n\n");
printf("\t\t\t\t (1) Jugar \n");
printf("\t\t\t\t (0) salir\n");
do
resp=getch();
while (resp<'0' || resp>'1');
switch(resp)
{
case '1': Jugar();
break;
case '0':
break;
}
}
while(resp!='0');
}
int main()
{
menu();
return(0);
}
eso es lo que tengo por ahora, todavía le faltan algunas cosas y acomodar algunos detalles, ahora les dijo mis dudas e inconvenientes, en la función desarrollo, tengo declarado la variable vidas, y le puse un valor de 6, cuando realmente son 5 vidas, porque hice eso? porque depure el código y fui paso a paso a ver porque fallaba y resulta que la primera vez que pasa por estas instrucciones:
Código PHP:
printf("\n\n\n\n\t Ingrese letra\n");
scanf("%c",&letra);
adivino=0;
contador=0;
no se detiene a esperar a que el usuario introduzca una letra, si no que sigue de largo y lógicamente me quita una vida,y ademas me llena de basura la variable introducidas, porque letra no tiene ningún valor, la segunda vez que pasa si se detiene, pensé que solo era al principio y ya, pero lo hace cada vez que introduzco una letra... entonces adivine o no la letra me quita una vida, porque pasa dos veces antes de detenerse a leer la letra y no entiendo porque, y estoy completamente seguro que sigue de largo la primera vez porque como dije lo depure y vi paso por paso y vi como siguió de largo, como si la primera vez no existiera el scanf, entonces esa es mi primera duda.. alguien sabe porque pasa eso?... realmente esto es solo por curiosidad, porque igual eso lo pondré en un ciclo que me valide que el usuario introduzca letras y no números o otros caracteres, pero igual me surge la curiosidad jeje, porque me parece raro que haga eso.... y la segunda duda es que cuando introduzco una letra en mayúscula si me la detecta en la palabra, pero si la pongo en minúscula no, es decir si la palabra es HORMIGA e introduzco H me la escribe, si introduzco h no me la escribe, porque las palabras del documento.txt están en mayúsculas, hay alguna función que me pueda pasar la letra que introduce el usuario a mayúscula? así introduzca la letra en minúscula o mayúscula de todas forma me la detectaría.... y tercera y ultima duda jeje, quiero pasar un valor por referencia en este caso es el valor de la variable vidas, porque? porque si la declaro dentro de esa función cada vez que sea una nueva palabra me la va a volver a poner en 6, y en el enunciado que les mande dice que no puedo hacer eso, que las vidas no se reinician, que son para toda la partida, yo crei que era asi:
Código PHP:
void desarrollo(int *vidas){códigos} //declaración de la función
int main(){int vidas=6; desarrollo(&vidas)} // llamado de la función
pasandole a la función la dirección, y que esta tomara el valor que esta dentro de esta dirección, pero me da error, no es así como se hace?
podría declarar la variable fuera de todas las funciones y me serviría, pero no quiero eso, quiero pasarla por referencia, porque ya lo he intentado varias veces y no me sale...
bueno esas son mis tres dudas por ahora, porque ignora el scanf la primera vez, como paso minusculas a mayusculas y como paso por referencia..
y desde ya, gracias por la ayuda
