Juego del Ahorcado en C
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.
-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.
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();
}
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();
}
