elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  El ahorcado en Lenguaje C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: El ahorcado en Lenguaje C  (Leído 32,168 veces)
darkxxx

Desconectado Desconectado

Mensajes: 85


Ver Perfil
El ahorcado en Lenguaje C
« en: 3 Septiembre 2008, 02:19 »

Bueno el día de ayer empece con la elaboración de un algoritmo que funcione como el juego del ahorcado y esto es lo que hice lo dejo para que me den sus impresiones sobre el código que mejoras se le podría hacer o alguna ayuda constructiva por favor háganla saber para mejorarlo en la versión 2.0   ;D

NOTA: En la versión 1.0 (a continuación) no hice el típico dibujito que se hace mostrando el muñequito cuando se ahorca, eso lo tengo para la próxima versión en esta me dedique mas que todo a la funcionalidad y el buen desempeño del mismo.

Código:
/* Juego el Ahorcado
 * V1.0
 * Fase: Completado
 */

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

int main() {
   char frase[60],rep[100],temporal[100];
    char pal;
      int longitud,i,j,inicial,acertado=0,temp=0,chance=5;
       bool repetido=false,gano=false;
       
printf("Introduzca la palabra(s) a adivinar: ");
 gets(frase);

system("clear");

longitud = 0;
inicial = 0;
j = 0;

rep[0] = ' ';
rep[1] = '\0';


do {
system("clear");
temp=0;

if(inicial == 0) {
 for(i=0;i<strlen(frase);i++) {
  if(frase[i] == ' ') {
    temporal[i] = ' ';
     longitud++;
  }
  else {
     temporal[i] = '_';
     longitud++;
  }
 }
}

inicial = 1;

temporal[longitud] = '\0';

for(i=0;i<strlen(rep);i++) {
   if(rep[i] == pal) {
    repetido = true;
    break;
  }
  else {
   repetido = false;
 }
}

if(repetido == false) {
 for(i=0;i<strlen(frase);i++) {
if(frase[i] == pal) {
temporal[i] = pal;
  acertado++;
  temp=1;
}
  }
}


if(repetido == false) {
 if(temp == 0) {
   chance = chance - 1;
 }
}
else {
 printf("Caracter Repetido o Ya Consultado");
 printf("\n\n");
}

printf("\n");

for(i=0;i<strlen(temporal);i++) {
 printf(" %c ",temporal[i]);
}

printf("\n");

if(strcmp(frase,temporal) == 0) {
gano = true;
break;
}

printf("\n");
printf("Letras Acertadas: %d",acertado);
printf("\n");
printf("Oportunidades Restantes: %d",chance);
printf("\n");

  rep[j] = pal;
  j++;
 
  printf("Introduzca un caracter para adivinar la cadena:");
   scanf("\n%c",&pal);
   
}while(chance != 0);


if(gano) {
printf("\n\n");
 printf("Felicitaciones, adivinastes la palabra");
}
else {
printf("\n\n");
 printf("Perdistes, mejor suerte para la proxima");
}

printf("\n\n");
return 0;


 


En línea

-Ramc-


Desconectado Desconectado

Mensajes: 493



Ver Perfil
Re: El ahorcado en Lenguaje C
« Respuesta #1 en: 3 Septiembre 2008, 02:32 »

No se supone que iostream es el equivalente a stdio en C++?? osea que una de las 2 sobra y como usas printf ya sabes cual, aunque bool creo que también es de c++.


En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
darkxxx

Desconectado Desconectado

Mensajes: 85


Ver Perfil
Re: El ahorcado en Lenguaje C
« Respuesta #2 en: 3 Septiembre 2008, 02:52 »

La librería iostream.h la agregue para poder hacer el limpiado de pantalla es decir poder utilizar la función system("clear")

ah y por cierto el código esta compilado con el compilador nativo de linux.
En línea

viruss1362

Desconectado Desconectado

Mensajes: 204



Ver Perfil WWW
Re: El ahorcado en Lenguaje C
« Respuesta #3 en: 3 Septiembre 2008, 11:50 »

La librería iostream.h la agregue para poder hacer el limpiado de pantalla es decir poder utilizar la función system("clear")

ah y por cierto el código esta compilado con el compilador nativo de linux.

Para usar la función system hace falta #include <stdlib.h>, iostream.h no tiene nada que ver

http://es.wikipedia.org/wiki/Stdlib.h

El caso es que te va el system("clear") porque stdlib.h no hace falta ponerla explícitamente, supongo que como es la librería estándar de C el compilador ya se encarga de ello, pero bueno lo suyo es ponerlo por si hubiera algún problema con otros compiladores.
En línea

Más vale parecer un idiota con la boca cerrada, que abrir la boca y demostrar que lo eres

www.equipome.com
JuaN-ThE-HaCKeR

Desconectado Desconectado

Mensajes: 252


http://www.JBJ.esp.st


Ver Perfil WWW
Re: El ahorcado en Lenguaje C
« Respuesta #4 en: 3 Septiembre 2008, 16:58 »

Hola!

Código:
if(gano) {
printf("\n\n");
 printf("Felicitaciones, adivinastes la palabra");
//Aquí falta una pausa.
}
else {
printf("\n\n");
 printf("Perdistes, mejor suerte para la proxima");
//Aquí falta una pausa.
}

Una mejora sería ponerle un par de pausas a esta parte del código, pues se gane o se pierda no se pueden leer los mensajes "Felicitaciones, adivinastes la palabra" y "Perdistes, mejor suerte para la proxima".

Y para que funcione bien en Windows es necesario cambiar "system ("clear");" por "system ("cls");" para que limpie la pantalla.   :-\

Lo demás está todo muy bien.  :P
Suerte con tu proyecto de ahorcado.  ;)

Saludos! ;)



JuaN
« Última modificación: 3 Septiembre 2008, 17:02 por JuaN-ThE-HaCKeR » En línea





Karman


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: El ahorcado en Lenguaje C
« Respuesta #5 en: 3 Septiembre 2008, 18:02 »

fijense este... es un poco más animado xD:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5.  
  6. #define N 12
  7. char txt[9];
  8. char datos[N][9]={
  9. "anteojo","avioneta","zapallo","martir",
  10. "espejo","anzuelo","heciano","tripode",
  11. "insecto","agujero","carnada","cabeza"};
  12.  
  13. char dibuj[9][7]={
  14.  "____",
  15.  "|  |",
  16.  "|  |",
  17.  "|",
  18.  "|",
  19.  "|",
  20.  "|",
  21.  "|",
  22.  "------"
  23. };
  24.  
  25. struct pst{
  26.  int pos;
  27.  char part[5];
  28. }parts[7]={{3,"  O"},{4," /"},{4,"|"},
  29. {4,"\\"},{5,"  |"},{6," /"},{6," \\"}};
  30.  
  31. int main(int argc, char *argv[])
  32. {
  33.  int n,m,o,p,i,j,r,eq=0;char lc,tmp[10];
  34.  
  35.  srand(time(NULL));
  36.  o=rand()%N;
  37.  
  38.  m=strlen(datos[o]);p=m-2;
  39.  
  40.  txt[0]=datos[o][0];txt[m-1]=datos[o][m-1];
  41.  for(n=1;n<m-1;n++)txt[n]='_';txt[m]=0;
  42.  printf("Ahorcatesss!!! Vr. 1.0\n\n");tmp[0]=0;
  43.  for(i=0;i<9;i++)printf("%s\n",dibuj[i]);
  44.  
  45.  do{
  46.  
  47.    for(j=0;j<strlen(tmp);j++){
  48.      lc=tmp[j];r=p;
  49.      for(n=1;n<m-1;n++)
  50.        if(datos[o][n]==lc){
  51.          txt[n]=lc;datos[o][n]='_';p--;
  52.        }
  53.      if(r==p){
  54.        strcat(dibuj[parts[eq].pos],parts[eq].part);
  55.        eq++;
  56.      }
  57.      for(i=0;i<9;i++)printf("%s\n",dibuj[i]);
  58.    }
  59.  
  60.    if(eq>=7)break;
  61.  
  62.    if(p>0){
  63.      printf("\nPalabra: %s - Ingrese 1 letra (* para terminar): ",txt);
  64.      scanf("%10s",&tmp);
  65.    }lc=tmp[0];
  66.    system("cls");
  67.  }while(lc!='*'&&p);
  68.  
  69.  if(!p)printf("\nPalabra: %s - Ganaste cara de Naco!!!\n\n",txt);
  70.  else if(eq>=7)printf("\nJAJA!!! Loooooser!!!\n\n");
  71.  else printf("\nK c's Papá??? Recatate!!!\n\n");
  72.  
  73.  system("PAUSE");
  74.  return 0;
  75. }
  76.  

S2
En línea

darkxxx

Desconectado Desconectado

Mensajes: 85


Ver Perfil
Re: El ahorcado en Lenguaje C
« Respuesta #6 en: 3 Septiembre 2008, 19:13 »

La librería iostream.h la agregue para poder hacer el limpiado de pantalla es decir poder utilizar la función system("clear")

ah y por cierto el código esta compilado con el compilador nativo de linux.

Para usar la función system hace falta #include <stdlib.h>, iostream.h no tiene nada que ver

http://es.wikipedia.org/wiki/Stdlib.h

El caso es que te va el system("clear") porque stdlib.h no hace falta ponerla explícitamente, supongo que como es la librería estándar de C el compilador ya se encarga de ello, pero bueno lo suyo es ponerlo por si hubiera algún problema con otros compiladores.


umm pero yo intente luego de que leí tu post quitarle la librería iostream.h para ver si funcionaba pero me daba el error de que no conocía el comando system pero si lo reconocía cuando agregaba la iostream
En línea

darkxxx

Desconectado Desconectado

Mensajes: 85


Ver Perfil
Re: El ahorcado en Lenguaje C
« Respuesta #7 en: 3 Septiembre 2008, 19:17 »

Hola!

Código:
if(gano) {
printf("\n\n");
 printf("Felicitaciones, adivinastes la palabra");
//Aquí falta una pausa.
}
else {
printf("\n\n");
 printf("Perdistes, mejor suerte para la proxima");
//Aquí falta una pausa.
}

Una mejora sería ponerle un par de pausas a esta parte del código, pues se gane o se pierda no se pueden leer los mensajes "Felicitaciones, adivinastes la palabra" y "Perdistes, mejor suerte para la proxima".

Y para que funcione bien en Windows es necesario cambiar "system ("clear");" por "system ("cls");" para que limpie la pantalla.   :-\

Lo demás está todo muy bien.  :P
Suerte con tu proyecto de ahorcado.  ;)

Saludos! ;)

JuaN

Si tienes razón debí agregarle una pausa lo que pasa es que como estaba en linux y lo compilaba en consola me aparecía el mensaje al terminar la ejecución del programa ya que no se salia del comando si no que seguía

si yo probe el codigo en windows y me decia que no reconocia system("clear") y no sabia cual usar para limpiar la pantalla en windows pero ya probrare con el system("cls") que me estas mencionando gracias por el dato

saludos igualmente y gracias
En línea

The_Judgement

Desconectado Desconectado

Mensajes: 119


Ver Perfil
Re: El ahorcado en Lenguaje C
« Respuesta #8 en: 4 Septiembre 2008, 14:50 »

La librería iostream.h la agregue para poder hacer el limpiado de pantalla es decir poder utilizar la función system("clear")

ah y por cierto el código esta compilado con el compilador nativo de linux.

Para usar la función system hace falta #include <stdlib.h>, iostream.h no tiene nada que ver

http://es.wikipedia.org/wiki/Stdlib.h

El caso es que te va el system("clear") porque stdlib.h no hace falta ponerla explícitamente, supongo que como es la librería estándar de C el compilador ya se encarga de ello, pero bueno lo suyo es ponerlo por si hubiera algún problema con otros compiladores.


umm pero yo intente luego de que leí tu post quitarle la librería iostream.h para ver si funcionaba pero me daba el error de que no conocía el comando system pero si lo reconocía cuando agregaba la iostream

Pero para poder usar la funcion system, además de quitar la iostream.h tienes que añadir #include <stdlib.h>. Si estás compilando en C, si que es necesaria, pero en C++ ocurre lo que dice viruss1362.

Saludos.
En línea

Sacred Powers, cast your purifying light upon this corrupt souls, rest in peace sinners!, JUDGEMENT!!!
darkxxx

Desconectado Desconectado

Mensajes: 85


Ver Perfil
Re: El ahorcado en Lenguaje C
« Respuesta #9 en: 12 Octubre 2008, 07:01 »

Aqui traigo la Version 2.0 del ahorcado se hicieron muchas mejoras con respecto al anterior entre ellos se redujo la mitad de memoria en comparacion con el anterior y bueno ya saben cualquier comentario,mejora comentenlo para mejorar la calidad del mismo en la Version 3.0 que incluira archivos y el grafico del muñeco

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

char* dame_palabra(void);
void setear(char*);
void imprimir_subcadena(const char*);
void verificar_letra(const char*,const char *,char*,int*,int*);


int main() {

    int i,acertados=0,oportunidades=5;
    char letra,*copia,*palabra = dame_palabra();
   
copia = (char*) malloc(sizeof(char)*strlen(palabra));

for(i=0;i<strlen(palabra);i++) {
   copia[i] = palabra[i];       
   copia[i+1] = '\0';                       
}     

setear(copia);

do {

printf("\n");
imprimir_subcadena(copia);
printf("\nLetras Correctas: %d\n",acertados);
printf("Oportunidades Restantes: %d\n",oportunidades);
printf("Introduzca un caracter para adivinar la palabra: ");
scanf("\n%c",&letra);
verificar_letra(palabra,&letra,copia,&acertados,&oportunidades);
system("cls");

}while(oportunidades != 0 && strcmp(copia,palabra) != 0);

if(strcmp(copia,palabra) == 0) {
 system("cls");
 printf("\n\n\tFELICITACIONES ACERTASTES LA PALABRA\n\n");                                   
}
else {
 system("cls");
 printf("\n\n\tPERDISTES MEJOR SUERTE PARA LA PROXIMA\n\n");     
}

     printf("\n");
    system("pause");
 return 0;   
}


char* dame_palabra(void) {
 srand(time(NULL));
      char *diccionario[] = {"casa","auto","comida","foro","pitiyanky"};
   return diccionario[rand()%5];
 }
 
void setear(char *cadena) {
  int i;
  for(i=0;i<strlen(cadena);i++) {
   if(cadena[i] == ' ') {
    cadena[i] = ' ';             
   }
   else {
    cadena[i] = '_';                             
  }     
 }
}

void verificar_letra(const char *palabra,const char *letra, char *cadena,int *acertados,int *chances) {   
  int i,temp=0;
      for(i=0;i<strlen(palabra);i++) {
        if(palabra[i] == *letra) {
           cadena[i] = *letra;   
          *acertados += 1;         
         temp = 1;
     }                               
  }
  if(temp == 0) {
        *chances -= 1; 
  }
}

void imprimir_subcadena(const char *cadena) {
 int i;     
  for(i=0;i<strlen(cadena);i++) {
    printf(" %c ",cadena[i]);                               
  }
    printf("\n");
}

saludos
« Última modificación: 12 Octubre 2008, 07:04 por darkxxx » En línea

JuaN-ThE-HaCKeR

Desconectado Desconectado

Mensajes: 252


http://www.JBJ.esp.st


Ver Perfil WWW
Re: El ahorcado en Lenguaje C
« Respuesta #10 en: 12 Octubre 2008, 20:39 »

Hola!

Está muy bien, antes de hacer la version 3.0, podrias hacer la 2.5, siendo igual que la 2.0 pero añadiendo más palabras, ya que esta solo tiene 5 palabras a adivinar. :P

Una mejora sería que al introducir un carácter que no está, si se vuelve a poner ese mismo no te descuente una oportunidad, si no que te avise que ya fue introducido antes.

También si la palabra por ejemplo es "pitiyanky", e introduces una P, se suma 1 a "Letras correctas" pero si vuelves a introducir la P, te vuelve a sumar 1 más a "Letras correctas", así, si pones 150 veces la P, te dirá que tienes 150 "Letras correctas", y la palabra a adivinar solo tiene 9 letras (8 sin repetir). :xD
Osea, que si has introducido la P, y la vuelves a introducir te avise que ya fue introducida antes. :P

Lo demás todo muy bien, si encuentro algo más que se pueda mejorar lo posteo. :)

PD:Veo que añadiste "system ("cls");" como te dije.  :D :xD


Saludos! ;)



« Última modificación: 15 Octubre 2008, 16:23 por {[*JuaN-ThE-HaCKeR*]} » En línea





Erik#


Desconectado Desconectado

Mensajes: 1.138


Gundam


Ver Perfil
Re: El ahorcado en Lenguaje C
« Respuesta #11 en: 12 Octubre 2008, 20:41 »

Darkxxx ¿Te importa si lo modifico?
En línea

JuaN-ThE-HaCKeR

Desconectado Desconectado

Mensajes: 252


http://www.JBJ.esp.st


Ver Perfil WWW
Re: El ahorcado en Lenguaje C
« Respuesta #12 en: 12 Octubre 2008, 20:52 »

Hola!

Aquí estoy otra vez para proponerte otra mejora. :xD

También estaría muy bien al ganar o perder, dar la posibilidad de volver a jugar.
Sería algo así:

Código:
int blaaa;
home:
printf ("Pulse 1 para volver a jugar o cualquier otra tecla para salir...");
scanf ("%d" &blaaa);
if (blaaa==1){
system("cls");
goto home;
}
else {
return 0;
}

Pondrías "home:" al principio del código y "printf", "scanf", "if" y "else" sustituyendo el "system("pause");" que está cuando se gana o se pierde.

No se si me explique bien, pero es fácil, además todo este código es muy básico, seguro que sabes hacerlo y no hubiese hecho falta que lo posteara... :xD

Saludos! ;)



JuaN
« Última modificación: 15 Octubre 2008, 16:23 por {[*JuaN-ThE-HaCKeR*]} » En línea





Erik#


Desconectado Desconectado

Mensajes: 1.138


Gundam


Ver Perfil
Re: El ahorcado en Lenguaje C
« Respuesta #13 en: 12 Octubre 2008, 20:55 »

Es mejor hacer un bucle infinito:

Código
  1. int infinito;
  2. while(infinito != 9){
  3. // codigo
  4. }

o:

Código
  1. for(;;){
  2. // codigo
  3. }
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
C# el ahorcado
.NET
Err... 7 7,936 Último mensaje 10 Enero 2011, 15:24
por Khronos14
Juego del ahorcado C#
.NET
treblatp 3 4,917 Último mensaje 3 Febrero 2011, 20:18
por Khronos14
Ayuda, programa en C .. El ahorcado....
Programación C/C++
TopoJunior 4 926 Último mensaje 15 Febrero 2013, 23:34
por X3R4CK3R
Error juego el ahorcado en lenguaje c
Programación C/C++
KIDRAP1 3 458 Último mensaje 18 Junio 2013, 18:13
por KIDRAP1
Ayuda con juego el ahorcado en lenguaje c
Programación C/C++
KIDRAP1 4 1,103 Último mensaje 27 Junio 2013, 13:24
por satu
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines