Necesito ayuda para ponerle categorias al juego del Ahorcado en C++

Jonathan
18 de Junio del 2005
Quien me puede ayudar yo ya tengo hecho el codigo del juego del ahorcado en c++ pero el problema es que me lo dejaron que lo hiciera en categorias quien me ayuda por favor miren aqui les pongo el codigo y me ayudan

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<trucker.h>
#include<ctype.h>
#include<dos.h>
#include<graphics.h>
#define enter 13
#define espacio 32
#define back 8
#define tab 9
#define escape 27
#define max 50

void dibujo(void);
void asterisco(char cadena[max]);
void inicio(void);
int existe(char,char letras[max],int);
void despedida(void);
void jugar(void);
void estado(int);
//void introduce(void);//
void main()
{
FILE *arch;
char palabra[10];
char op;
int driver,modo;
driver=DETECT;
modo=VGAHI;

initgraph(&driver,&modo,"C:\TC\BGI");
inicio();
do {
cleardevice();
marco_sombra(15,5,65,15,0,0);
gotoxy(21,3); printf("M E N U");
gotoxy(15,6); printf(" [1] "); printf(" JUEGO NUEVO ");
gotoxy(15,8); printf(" [2] "); printf(" OPCIONES AVANZADAS ");
marco_sombra(15,18,65,20,0,0);
gotoxy(22,19); printf(" t [ESC]"); printf(" t SALIR DEL AHORCADO"); op=getch();
switch(op)
{
case '1': jugar(); break;
// case '2': introduce(); break;
case escape: despedida(); break;
}

} while(op!=escape);
closegraph();
}

void jugar(void)
{
char palabra[max],letra,letras[max];
int i,largo,pos,vida,cont,enc,exi,j,k; //k=posicion para imprimir
//la letra elegida
cleardevice();
setbkcolor(4);
for(j=0;j<max;j++)
letras[j]=NULL;
marco_sombra(6,6,74,20,2,1);
gotoxy(23,2);
printf("AHORCADO");
gotoxy(10,4);



{
FILE *arch;
FILE *arch_datos;
palabra = datos.dat[x];
//printf("Imprimiendo el archivo");
{
if ((arch=fopen("C:\datos.dat","r"))==NULL)
{
//printf("no se puede abrir");
}
else
{
rewind(arch);
while(!feof(arch))
{
fscanf(arch,"%sn", &palabra);
printf("n palabra: %s",palabra);
}

}
}}


printf("nt JUGADOR INGRESE LA PALABRA : ");
asterisco(palabra);
largo=strlen(palabra);
for(i=0;i<largo;i++)
{
palabra[i]=toupper(palabra[i]);
if(palabra[i]=='q')
palabra[i]='q'; //el toupper no afecta a la '¤'
} //jugador 2
pos=(68-largo*2)/2;
cleardevice();
setbkcolor(4);
marco_sombra(3,4,77,30,1,1); gotoxy(25,2);
printf("JUGADOR ADIVINE LA PALABRA"); gotoxy(pos,15);
dibujo();
for(i=0;i<largo;i++)
printf(" * ");
vida=6;
cont=0;
j=0;
k=4;
gotoxy(57,24);
printf("[ESC] SALIR");
do {
gotoxy(5,12);
clreol();
printf("OPORTUNIDADES : %d",vida);
setcolor(10);
setlinestyle(0,0,3);
rectangle(60,200,160,230);
gotoxy(5,16);
printf(" DAME LA LETRA --> ");
do {
do{
letra=toupper(getch());
if(letra==escape)
return;
if(letra=='q')
letra='q';
}while( letra!='q' && (letra<65 || letra>90) );
letras[j]=letra;
exi=existe(letra,letras,j);
} while(exi==1);
j++;
gotoxy(k,18); printf("%c",letra); k=k+2;
enc=0;
for(i=0;i<largo;i++)
{
if(letra==palabra[i])
{
enc=1;
gotoxy(pos+i*2,14);
printf("%c",letra);
cont++;
}
}
if(enc==0)
{
vida--;
estado(vida);
}
if(vida==0)
{
gotoxy(23,20);
printf("LO SIENTO PERDISTE");
gotoxy(10,21);
printf("LA PALABRA ERA : %s",palabra);
gotoxy(5,12);
clreol();
printf("OPORTUNIDADES : %d",vida);
setcolor(6);
setlinestyle(0,0,4);
rectangle(60,200,160,230);
getch();
}
if(cont==largo && palabra[0]!=13)
{
gotoxy(23,20);
printf("­FELICITACIONES!, GANO");
getch();
vida=0;
}
}while(vida>0 && cont<largo);
return;
}

void dibujo(void)
{
setcolor(10);
setlinestyle(0,0,3);
rectangle(60,200,160,230); //base
line(105,65,105,200); //pilar
line(105,65,150,65); //travesa¤o
line(150,65,150,80); //soporte
setcolor(BLUE);
circle(150,90,10); //cabeza
line(150,100,170,120); //brazo iz
line(150,100,130,120); //brazo der
line(150,100,150,130); //tronco
line(150,130,170,150); //pierna iz
line(150,130,130,150); //pierna der
return;
}

void estado(int a)
{
setcolor(8);
switch(a)
{
case 0: gotoxy(4,19);
printf("­Incorrecto! Pierde la cabeza"); gotoxy(8,20);
printf("Presione una tecla para continuar");
getch(); gotoxy(4,19); clreol();
gotoxy(8,20); clreol();
circle(150,90,10);
break;
case 1: gotoxy(4,19);
printf("­Incorrecto! Pierde el brazo derecho"); gotoxy(8,20);
printf("Presione una tecla para continuar");
getch(); gotoxy(4,19); clreol();
gotoxy(8,20); clreol();
line(150,100,170,120);
break;
case 2: gotoxy(4,19);
printf("­Incorrecto! Pierde el brazo izquierdo"); gotoxy(8,20);
printf("Presione una tecla para continuar");
getch(); gotoxy(4,19); clreol();
gotoxy(8,20); clreol();
line(150,100,130,120);
break;
case 3: gotoxy(4,19);
printf("­Incorrecto! Pierde el cuerpo"); gotoxy(8,20);
printf("Presione una tecla para continuar");
getch(); gotoxy(4,19); clreol();
gotoxy(8,20); clreol();
line(150,100,150,130);
break;
case 4: gotoxy(4,19);
printf("­Incorrecto! Pierde la pierna derecha"); gotoxy(8,20);
printf("Presione una tecla para continuar");
getch(); gotoxy(4,19); clreol();
gotoxy(8,20); clreol();
line(150,130,130,150);
break;
case 5: gotoxy(4,19);
printf("­Incorrecto! Pierde la pierna izquierda"); gotoxy(8,20);
printf("Presione una tecla para continuar");
getch(); gotoxy(4,19); clreol();
gotoxy(8,20); clreol();
line(150,130,170,150);
break;
}
return;
}

int existe(char letra,char letras[max],int j)
{
int i,enc=0;
for(i=0;i<j;i++)
if(letra==letras[i])
enc=1;
return(enc);
} //sirve para saber si la letra ingresada * el 2do jug. estaba previamente
//ingresada

void despedida()
{
cleardevice();
setbkcolor(4);
marco_sombra(15,5,65,15,0,0);
gotoxy(14,5);
printf("SALIENDO DEL AHORCADO");
delay(1000);
return;
}

void asterisco(char cadena[max]) /*Ingresa una palabra mostrando cuadros*/
{
int i=0,j;
for(j=0;j<max;j++)
cadena[j]=NULL;
do {

cadena[i]=getch();
if(cadena[i]!=enter && cadena[i]!=back && cadena[i]!=espacio && cadena[i]!=tab && cadena[i]!=escape)
{
printf("þ");
i++;
}
if(cadena[i]==back && i>0)
{
cadena[i]=NULL;
i--;
cadena[i]=NULL;
gotoxy(wherex()-1,wherey());
clreol();
}
} while(cadena[i]!=enter);
cadena[i]=NULL;
return;
}

void inicio()
{
setbkcolor(4);
marco_sombra(15,2,65,19,0,0);
_setcursortype(_NOCURSOR);

gotoxy(16,7);
printf("A H O R C A D O");
delay(2000);
return;
}