SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: xorionx2k2 en Viernes 13 de Diciembre de 2002, 23:00
-
Pues que apenas estoy comenzando con est dol C++ y que necesito el juego del Ahorcado para el Borland C++3.1 ¡¡¡y no me sale!!!
He medido varios arreglos, e comparada varios codigos y nada, que no me sale.
El juego debe funcionar de esta manera:
Dos jugadores.
Jugador 1 introduce la palabra.
Jugador 2 adivina la palabra.
Cada vez que se equivoque debe de aparecer las partes del ahorcado (cabeza, tronco, brazo izquierdo, brazo derecho, pierna izquierda, pierna derecha).
La verdad que ya no se que hacer...!!! Espero que alguien me pueda ayudar... se lo agradeceria muchisimo!!!:)
-
en esta pagina hay un programa hecho que quizas pueda darte una idea,
http://mundovb.net/mundoc/ahorcado.htm (http://mundovb.net/mundoc/ahorcado.htm)
espero te sirva
suerte!
-
ese codigo ya lo tengo, de hecho ya lo habia bajado, esoty estudiandolo y espero tenerlo hecho hoy mismoB);)
En cuanto lo tenga, lo subo para compartirlo con todos...B)
-
¡YA ESTE TERMINADO EL CODIGO DEL AHORCADO PARA 2 JUGADORES!
El juego funciona de la siguiente manera:
Jugador 1: Introduce la palabra (obiamente sin que vea el Jugador 2.)
Jugador 2:Adivina la palabra. El juego cuenta con 20 intentos, (el cual esta parte del codigo lo utilice del codigo anterior el cual esta en el link anterior).
He aqui el codigo para ver a quien le puede servir:
//PROGRAMA DISEÑADO POR CARLOS ISRAEL NEGRETE ROJAS, PARA LA
UNIVERSIDAD DE LEÓN.
LEÓN GUANAJUATO, MÉXICO DIC-2002//
#include <stdio.h> /*LIBRERIA STANDAR*/
#include <stdlib.h> /*LIBRERIA PARA MANEJAR EL EXIT*/
#include <ctype.h> /*LIBRERIA PARA MANEJAR EL ISALPHA*/
#include <conio.h> /*LIBRERIA DE GRAFICOS*/
#include <string.h> /*LIBRERIA PARA MANEJAR EL STRLEN*/
#include <dos.h> /*LIBRERIA PARA MANEJAR EL DELAY (PAGINA DE PRESENTACIÓN
Y DESPEDIDA*/
char palabra[80],respuesta[80]; /*VARIABLE DONDE IRE ALMACENANDO LAS LETRAS*/
char letra,opc; /*VARIABLE QUE ALMACENO LA LETRA*/
int i,j,y,elegida,longitud,opor,a;
int imprime(void);
int presenta(void);
int presenta2(void);
int main(void)
{
presenta();
clrscr(); /*LIMPIO PANTALLA*/
do{
textbackground(BLUE); /*COLOR DE FONDO AZUL*/
textcolor(WHITE); /*COLOR DE LETRA BLANCO*/
i=j=y=elegida=longitud=opor=a=0; /*INICIALIZO LAS VARIABLES CON CERO*/
for(i=0;i<10;i++)
{
respuesta=NULL; /*CON ESTE FOR LIMPIO LA CADENA*/
}
/*-------------DESPLIEGO EL JUEGO DEL AHORCADO----------------------*/
clrscr();
gotoxy(32,1);
cprintf("JUEGO DEL AHORCADO");
/*ESTE FOR DESPLIEGA EL ALFABETO*/
for(i=0;i<26;i++)
{
gotoxy(i*2+18,4);
cprintf("%c",65+i);
}
gotoxy(25,10);
cprintf("I N T R O D U C E U N A P A L A B R A");
gotoxy(30,14);
gets(palabra); /**AQUI CAPTURO LA PALABRA**/
/*---------------AQUI ES LA PANTALLA PARA ADIVINAR LA PALABRA------------*/
clrscr();
gotoxy(32,1);
cprintf("JUEGO DEL AHORCADO");
/*ESTE FOR DESPLIEGA EL ALFABETO*/
for(i=0;i<26;i++)
{
gotoxy(i*2+18,4);
cprintf("%c",65+i);
}
longitud=strlen(palabra);
imprime();
do{
gotoxy(25,9);
printf("A D I V I N A L A P A L A B R A");
gotoxy(28,12);
printf("E L I G E L A L E T R A=>>");
letra=getch(); /*CON ESTE DO NO ADMITO NUMEROS*/
gotoxy(10+opor*3,22);
printf("%c",letra);
gotoxy(25,15);
printf("MAXIMO 20 INTENTOS. INTENTO[%d]",opor+1);
for(i=0;i<longitud;i++)
{
if(letra==palabra)
{
gotoxy(15+i*4+18,19);
printf("%c",letra);
respuesta=letra;
}
}
y=strcmp(palabra,respuesta);
if(y==0)
{
gotoxy(32,23);
{
textcolor(YELLOW);
cprintf("C O R R E C T O");
}
}
opor++;
}
while(opor<20 && y!=0);
if(opor==20)
{
clrscr();
gotoxy(26,13);
textcolor(RED);
cprintf(" A H O R C A D O ! ! !");
{
textcolor(YELLOW);
gotoxy(28,16);
cprintf("LA PALABRA CORRECTA ES: %s",palabra);
{
textcolor(BROWN);
gotoxy(40,5);
cprintf("ßßßßßßß");
gotoxy(40,6);
cprintf("³ ²");
gotoxy(40,7);
cprintf(" ²");
gotoxy(38,8);
cprintf("--³-- ²");
gotoxy(40,9);
cprintf("³ ²");
gotoxy(40,10);
cprintf("^ ²");
gotoxy(38,11);
cprintf("/ ²");
}
}
}
{
textcolor(RED);
gotoxy(28,23);
cprintf("¨DESEAS VOLVER A JUGAR? [S/N]");
}
do{
opc=toupper(getch());
}
while(opc!='S' && opc!='N');
} /**FIN DEL PRIMER DO**/
while(opc!='N');
presenta2();
clrscr();
exit(1);
return 0;
}/**FIN DEL main(void)**/
presenta()
{
textbackground(BLACK);
textcolor(GREEN);
clrscr();
gotoxy(20,1);
cprintf("U N I V E R S I D A D D E L E à N");
gotoxy(25,8);
cprintf("CARLOS ISRAEL NEGRETE ROJAS");
gotoxy(31,9);
cprintf("MAT. 17029");
gotoxy(33,11);
cprintf("PRESENTA");
gotoxy(26,13);
cprintf("EL JUEGO DEL AHORCADO 2K2");
{
textbackground(BLUE);
textcolor(YELLOW);
gotoxy(1,25);
cprintf("ESPERA UN MOMENTO...");
}
delay(8000);
return 0;
}
presenta2()
{
textbackground(BLACK);
textcolor(GREEN);
clrscr();
gotoxy(20,1);
cprintf("U N I V E R S I D A D D E L E à N");
gotoxy(25,8);
cprintf("CARLOS ISRAEL NEGRETE ROJAS");
gotoxy(31,9);
cprintf("MAT. 17029");
gotoxy(33,11);
cprintf("PRESENTà");
gotoxy(26,13);
cprintf("EL JUEGO DEL AHORCADO 2K2");
{
textbackground(BLUE);
textcolor(YELLOW);
gotoxy(1,25);
cprintf("GRACIAS POR JUGAR...");
}
delay(8000);
return 0;
}
imprime()
{
for(i=1;i<=longitud;i++)
{
gotoxy(15+i*4+14,20);printf("_");
}
return 0;
}
B) :o B)
-
Para empezar a manejar vectores, programé un pequeño juego del ahorcado, muy sencillo comparado con el tuyo:)
Podéis verlo aquí (http://perso.wanadoo.es/josemmc76/cod_c/ahorca.c). Se admiten comentarios:P
-
xorio: ¿qué compilador usaste para crear el ejecutable de tu juego? es que no pude compilarlo con el mingw, voy a ver con el TurboC, pero igual me dices y me la pones más fácil;)
-
Hola.
Esta muy bueno el programita, pero bueno hay una serie de problemas que son faciles de ver a simple vista, el primero es que procure no usar VARIABLES GLOBALES, esto es un serio problema a la hora de hacer un programa medianamente grande (500 lineas de codigo). No deberia usar arrays sino seria mejor usar apuntadores, con esto no desperdiciaria espacio en memoria. Y por ultimo no me gusto para nada lo de introdicir la palabra (mi novia es una tramposa y se que mirara) asi que es mucho mejor usar la funcion getpass("...").
si quiere luego coloco las pequeñas mejoras en este mismo lugar.
Pero el programa le quedo bien.
Adios:)
-
Le he hecho algunas modificaciones a tu programa. Entre algunas cosas, convertí todas las variables a local con paso por parámetros. Lo modularicé, sin cambiar la esencia de lo que estaba hecho y le quite los retornos innecesarios.
Mientras mas modular sea un programa es mas fácil entenderlo y corregirlo. Además, la programación estructurada mientras sea mas modular, es mas fácil de pasar a objetos, hacia donde debe tender la programación.
Aún se pueden hacer mas mejoras pero esta es un comienzo,para aquellas personas que quieren ir avanzando y mejorando su forma de programar.
Espero os sirva.
Suerte,
gmantil
Está versión fue compilada en Turbo C 2.01.
#include <stdio.h> /*LIBRERIA STANDAR*/
#include <stdlib.h> /*LIBRERIA PARA MANEJAR EL EXIT*/
#include <ctype.h> /*LIBRERIA PARA MANEJAR EL ISALPHA*/
#include <conio.h> /*LIBRERIA DE GRAFICOS*/
#include <string.h> /*LIBRERIA PARA MANEJAR EL STRLEN*/
#include <dos.h> /*LIBRERIA PARA MANEJAR EL DELAY (PAGINA DE PRESENTACIÓN
Y DESPEDIDA*/
void imprime(int longitud);
void presenta(void);
void presenta2(void);
void alfabeto(void);
void captura(char *palabra);
void compara(int longitud,char *palabra,char *respuesta,int *opor);
void ahorcado(char *palabra);
void main(void)
{
char palabra[80],respuesta[80]; /*VARIABLE DONDE IRE ALMACENANDO LAS LETRAS*/
char letra,opc; /*VARIABLE QUE ALMACENO LA LETRA*/
int i,j,longitud,opor;
presenta();
clrscr(); /*LIMPIO PANTALLA*/
do{
textbackground(BLUE); /*COLOR DE FONDO AZUL*/
textcolor(WHITE); /*COLOR DE LETRA BLANCO*/
i=longitud=opor=0; /*INICIALIZO LAS VARIABLES CON CERO*/
for(i=0;i<10;i++)
{
respuesta=NULL; /*CON ESTE FOR LIMPIO LA CADENA*/
}
/*-------------DESPLIEGO EL JUEGO DEL AHORCADO----------------------*/
clrscr();
gotoxy(32,1);
cprintf("JUEGO DEL AHORCADO");
/*AQUI DESPLIEGA EL ALFABETO*/
alfabeto();
/*AQUI CAPTURA LA PALABRA*/
captura(palabra);
/*---------------AQUI ES LA PANTALLA PARA ADIVINAR LA PALABRA------------*/
clrscr();
gotoxy(32,1);
cprintf("JUEGO DEL AHORCADO");
/*AQUI DESPLIEGA EL ALFABETO*/
alfabeto();
longitud=strlen(palabra);
imprime(longitud);
/* COMPARA LA PALABRA DADA CON LAS LETRAS A ADIVINAR */
compara(longitud,palabra,respuesta,&opor);
/* MUESTRA EL AHORCADO */
if (opor==20)
ahorcado(palabra);
textcolor(RED);
gotoxy(28,23);
cprintf("¨DESEAS VOLVER A JUGAR? [S/N]");
do{
opc=toupper(getch());
} while(opc!='S' && opc!='N');
}while(opc!='N'); /**FIN DEL PRIMER DO**/
presenta2();
clrscr();
exit(1);
}/** FIN DEL main **/
/*ESTE MODULO DESPLIEGA EL ALFABETO*/
void alfabeto(void)
{
int i;
for(i=0;i<26;i++)
{
gotoxy(i*2+18,4);
cprintf("%c",65+i);
}
}
/* MODULO QUE CAPTURA LA PALABRA */
void captura(char *palabra)
{
gotoxy(25,10);
cprintf("I N T R O D U C E U N A P A L A B R A");
gotoxy(30,14);
gets(palabra);
}
/* COMPARA LA PALABRA DADA CON LAS LETRAS A ADIVINAR */
void compara(int longitud,char *palabra,char *respuesta,int *opor)
{
int i,y=0;
char letra;
do{
gotoxy(25,9);
printf("A D I V I N A L A P A L A B R A");
gotoxy(28,12);
printf("E L I G E L A L E T R A=>>");
letra=getch(); /*CON ESTE DO NO ADMITO NUMEROS*/
gotoxy(10+(*opor)*3,22);
printf("%c",letra);
gotoxy(25,15);
printf("MAXIMO 20 INTENTOS. INTENTO[%d]",(*opor)+1);
for(i=0;i<longitud;i++)
{
if(letra==palabra)
{
gotoxy(15+i*4+18,19);
printf("%c",letra);
respuesta=letra;
}
}
y=strcmp(palabra,respuesta);
if(y==0)
{
gotoxy(32,23);
{
textcolor(YELLOW);
cprintf("C O R R E C T O");
}
}
(*opor)++;
} while((*opor)<20 && y!=0);
}
/* MUESTRA EL AHORCADO */
void ahorcado(char *palabra)
{
clrscr();
gotoxy(26,13);
textcolor(RED);
cprintf(" A H O R C A D O ! ! !");
{
textcolor(YELLOW);
gotoxy(28,16);
cprintf("LA PALABRA CORRECTA ES: %s",palabra);
{
textcolor(BROWN);
gotoxy(36,5);
cprintf("ßßßßßßß");
gotoxy(38,6);
cprintf("³ ²");
gotoxy(38,7);
cprintf(" ²");
gotoxy(36,8);
cprintf("--³-- ²");
gotoxy(38,9);
cprintf("³ ²");
gotoxy(38,10);
cprintf("^ ²");
gotoxy(37,11);
cprintf("/ ²");
}
}
}
void presenta()
{
textbackground(BLACK);
textcolor(GREEN);
clrscr();
gotoxy(20,1);
cprintf("U N I V E R S I D A D D E L E à N");
gotoxy(25,8);
cprintf("CARLOS ISRAEL NEGRETE ROJAS");
gotoxy(31,9);
cprintf("MAT. 17029");
gotoxy(33,11);
cprintf("PRESENTA");
gotoxy(26,13);
cprintf("EL JUEGO DEL AHORCADO 2K2");
{
textbackground(BLUE);
textcolor(YELLOW);
gotoxy(1,25);
cprintf("ESPERA UN MOMENTO...");
}
delay(8000);
}
void presenta2()
{
textbackground(BLACK);
textcolor(GREEN);
clrscr();
gotoxy(20,1);
cprintf("U N I V E R S I D A D D E L E à N");
gotoxy(25,8);
cprintf("CARLOS ISRAEL NEGRETE ROJAS");
gotoxy(31,9);
cprintf("MAT. 17029");
gotoxy(33,11);
cprintf("PRESENTà");
gotoxy(26,13);
cprintf("EL JUEGO DEL AHORCADO 2K2");
{
textbackground(BLUE);
textcolor(YELLOW);
gotoxy(1,25);
cprintf("GRACIAS POR JUGAR...");
}
delay(8000);
}
void imprime(int longitud)
{
int i;
for(i=1;i<=longitud;i++)
{
gotoxy(15+i*4+14,20);printf("_");
}
}
-
Que bueno que todos nos pongamos a trabajar en equipo, asi podremos ir mejorando los programas.
Obiamente como podran observar, soy un principiante en programación, todavia no se utilizar puntadores y ese tipo de cosas, pero ahí la llevo, poco a poco y con la ayuda de vosotros.
Geo:
xorio: ¿qué compilador usaste para crear el ejecutable de tu juego? es que no pude compilarlo con el mingw, voy a ver con el TurboC, pero igual me dices y me la pones más fácil;)
Utilice el Borland C++ ver. 3.1, a ver si te sirve de algo;).
Se siguen aceptando comentarios!!!:D;)B)
-
Para el compañero desorden:
Si me hubieras pasado tu codigo cuando lo solicite, te hubiera puesto un altar de dios en programacón!!!:P
La verdad que esta muy sencillo y muy bueno tu codigo, pero estoy casi seguro de que el profesor se hubiera dado cuenta de que yo no lo hubiera hecho...
Exelente de todas formas(http://elotrolado.net/images/smilies/net_thumbsup.gif)!!!
-
Hola amigos, creo haber encontrado un error en su codigo fuente, trate de compilarlo con Turbo C++ 3.0 pero me daba un error raro, lo unico que hice fue midificar una linea de este codigo y el problema se soluciono, a continuacion les describo el cambio que realice en el fuente para poder compilarlo sin errores.
respuesta=NULL; /*CON ESTE FOR LIMPIO LA CADENA*/
Modifique la siguiente linea, lo unico que le agregue fue " = " el fuente me quedo de la siguiente forma:
respuesta == NULL; /*CON ESTE FOR LIMPIO LA CADENA*/
No digo que haya estado mal, capaz el error es mio pero colocandolo asi logre compilarlo sin problemas.
Saludos.
-
Hola Jonathan:
Yo también encontré este error, pero asumí que fue dejado a propósito, pues la variable respuesta es una cadena de caracteres, luego para poder asignar NULL a sus elementos se hace necesario subdindicar la variable.
Debes colocar ==> respuesta=NULL;
Sinembargo, de todas maneras esta operación debe ser revisada para ver su necesidad, pues date cuenta que inicializan solo 10 elementos de respuesta en NULL y la variable tiene 80 elementos.
gmantil
-
Error ===> respuesta=NULL;
gmantil
-
Sinceramente supongo que lo que pretende es colocar cada una de las posiciones del arreglo en 0 (NULL) y por eso es que hace ese for, o de algun otro modo el uso de ese for es inutil, y si nos damos cuenta en la ventana de mensajes del compilador, aun asi nos aparece 3 warning y uno de ellos corresponde a esa parte.
SOLUCION (en mi concepto)
original
for(i=0;i<10;i++)
{
respuesta=NULL; /*CON ESTE FOR LIMPIO LA CADENA*/
}
correccion
for(i=0;i<80;i++)
{
respuesta=NULL; /*CON ESTE FOR LIMPIO LA CADENA*/
}
es un manejo mas limpio y claro del error que aparece al compilar, aunque aun sigo deciendo que se deben manejar como apuntadores y no como arrays y mi modificacion al entrar la palabra es mejor que empleo el programador original y que despues dejo gmantil al hacer su seudo-correccion.
Otros warnings
el segundo warning mal hecha la conversion. Sencillo es la comparacion de un caracter (letra) con los caracteres de toda una cadena (palabra) y solo es la comparacion letra por letra.
original
for(i=0;i<longitud;i++)
{
if(letra==palabra) //error
{
gotoxy(15+i*4+18,19);
printf("%c",letra);
respuesta=letra;
}
}
correccion
for(i=0;i<longitud;i++)
{
if(letra==palabra) // correccion
{
gotoxy(15+i*4+18,19);
printf("%c",letra);
respuesta=letra;
}
}
tercer warning casi similar al error, y los demas warning
original corregido
for(i=0;i<longitud;i++)
{
if(letra==palabra)
{
gotoxy(15+i*4+18,19);
printf("%c",letra);
respuesta=letra; //error
}
}
correccion ultima
for(i=0;i<longitud;i++)
{
if(letra==palabra)
{
gotoxy(15+i*4+18,19);
printf("%c",letra);
respuesta=letra; //correccion
}
}
sencillo o no.
-
SOLUCION (en mi concepto)
original
for(i=0;i<10;i++)
{
respuesta=NULL; /*CON ESTE FOR LIMPIO LA CADENA*/
}
correccion
for(i=0;i<80;i++)
{
respuesta=NULL; /*CON ESTE FOR LIMPIO LA CADENA */
}
-
for(i=0;i<80;i++)
{
respuesta=NULL; /*CON ESTE FOR LIMPIO LA CADENA*/
}
Para que tenga sentido el for:
for(ind = 0; ind < 80; ind++)
{
respuesta[ind] = ' '; /*CON ESTE FOR LIMPIO LA CADENA*/
}
o también:
for (ind=0; ind < 80; ind++)
{
respuesta[ind] = (char) NULL;
}
for(i=0;i<longitud;i++)
{
if(letra==palabra)
{
gotoxy(15+i*4+18,19);
printf("%c",letra);
respuesta=letra;
}
}
for(ind = 0; ind < longitud; ind++)
{
if(letra == palabra[ind])
{
gotoxy(15 + ind * 4 + 18,19);
printf("%c", letra);
respuesta[ind] = letra;
}
}
NOTA
Aunque es parecido, no es lo mismo un vector de caracteres que un puntero a caracteres.
He tenido problemas con el contador del for y el código BB al hacer referencia a las posiciones del vector con la variable i, por eso he cambiado el nombre por ind.
Creo que es lo que les ha pasado a xorionx2k2 y a daviiid al publicar los códigos en el foro -no se ven las correcciones de daviiid-.