Juego del Ahorcado en C

michael
26 de Abril del 2005
Hola amigos. Tengo que hacer el juego del ahorcado en C. Por el foro he visto varias soluciones. Lo que pasa es que tengo varias restricciones. No se permite:

-Volcado de "cores" durante la ejecución del programa en Linux
-Uso de sentencias "goto"
-Uso de variables globales con el único fin de evitar tener que pasar parámetros a funciones.
-Memoria sin liberar.
-Ficheros sin cerrar.
-No comprobar la apertura de ficheros ni la reserva de memoria.
-Funciones recursivas sin limitar (se llaman a sí mismas un numero de veces indeterminado) que pueden desbordar la pila.

A ver si alguno de los que hay aquí cumplen las especificaciones. Muchas gracias de antemano. Respondan por aquí que el correo no es correcto.

rossy
26 de Abril del 2005
espero te sirva este programa y si no te puede sbasar en el
bye

#include<iostream.h>
#include<conio.h>
#include<ctype.h>
#include<stdio.h>
#include<string.h>

void teclea_palabra(char palabra[],int &cont,int j)
{char c;
while((c=toupper(getch()))!='n' && c!=' ' && c>='A' && c<='Z' )
{ if(j==1) putchar('*');
else
putchar(c);
palabra[cont]=c;
if (cont>15) break;
++cont;
}
palabra[cont]=' ';
}

void adivina_palabra(char palabra[],char letra,int n,int &error,int cont,char l[])
{int i=0;
for(i=1;i<n;++i)
{ if(palabra[i]==letra)
{ l[i]=letra;
cont+=1;
}
}
if(cont==0) ++error;
}

int compara(char palabra[],char pal[],int x1,int x2)
{int i,error=0;//aqui
if(x1==x2)
{ for(i=0;i<x1;++i)
if(pal[i]!=palabra[i]) ++error;
if(error==0) return 0;
else return 1;
}
else return 1;
}

void ganar_x_letras(char palabra[],char l[],int n)
{ int b=0,i=0;
for(i=1;i<n;++i)
{ if(palabra[i]!=l[i])
++b;}
if(b==0)
{gotoxy(31,40);
cout<<"aG A N A S T E! ";
}
}

void imprime(char palabra[],char l[],int n,int bandera,int a,char pedidas[],int x)
{int i;
if(bandera==0)
{ gotoxy(31,4); cout<<palabra[0];
for(i=1;i<n;++i) cout<<" _";
}
if(bandera==3)
{ gotoxy(31,4);
for(i=0;i<n;++i) cout<<palabra[i]<<" ";
if(x==0)
{gotoxy(31,40);
cout<<"aG A N A S T E! ";
}
}
//letras pedidas
gotoxy(31,15);cout<<"Letras pedidas: ";
for(i=0;i<a;++i)
{ gotoxy(46+(i*2),15);
cout<<pedidas[i]<<", ";
}

if (bandera==2)
{ for(i=1;i<n;++i)
{gotoxy(31,4); cout<<palabra[0];
if(palabra[i]==l[i])
{ gotoxy(30+(i*2),4);
cout<<" "<<palabra[i];
}
else
{ gotoxy(30+(i*2),4);
cout<<" _";
}
}
}
ganar_x_letras(palabra,l,n);
}

int pierdes(int error)
{ if(error==8)
{ gotoxy(31,40);
cout<<"aP E R D I S T E! ";
return 1;
}
else
return 0;
}

void main()
{char palabra[15],pal[15],l[15],letra,pedidas[15];
int resp,n=0,n2=0,i,error=0,cont=0,a=0,j=0;
int bandera=0,x=1;
clrscr();
cout<<"nJUEGO DEL AHORCADO nnn***Jugador 1***nnnTeclea palabra: ";
j=1;
teclea_palabra(palabra,n,j);
for(;;)
{ clrscr();
gotoxy(25,1); cout<<"JUEGO DEL AHORCADO(***Jugador 2***)";
imprime(palabra,l,n,bandera,a,pedidas,x);
gotoxy(31,7); cout<<"1. Adivinar letra";
gotoxy(31,8); cout<<"2. Adivinar palabra";
gotoxy(31,9); cout<<"3. Salir ";
gotoxy(31,17); cout<<"Errores: "<<error;
gotoxy(31,11); cout<<"Opcion [ ]";
gotoxy(39,11); cin>>resp;
if(resp==3) { clrscr();
gotoxy(31,16);
textcolor(124 | BLINK);cprintf("G A M E O V E R");
break;
}
else if(resp!=1 || resp!=2)
switch(resp)
{case 1:gotoxy(31,13);cout<<"Letra: ";
letra=toupper(getch());
putchar(letra);
pedidas[a]=letra;
a++;
cont=0;
adivina_palabra(palabra,letra,n,error,cont,l);
bandera=2;
break;
case 2:gotoxy(31,13);cout<<"Palabra: ";
j=2;
teclea_palabra(pal,n2,j);
x=compara(palabra,pal,n,n2);
if (x==0) bandera=3;
else ++error;
n2=0;//inicializa la longitud de la palabra a adivinar
getch();
break;
}
if(pierdes(error))
{ getch();
break;}
}
getch();
}