Proyecto Ahorcado

Mensaje
Autor
Avatar de Usuario
eagleoneraptor
Mensajes: 187
Registrado: 20/05/2008 10:24 am
Ubicación: Buenos Aires(Argentina)

#31 Mensaje por eagleoneraptor » 27/08/2008 6:22 pm

Si es cierto, es que no se como emular la función para que cumpla ese cometido. Y me acabo de dar cuenta de otro inconveniente justo después de envíar el código, es que no limpio la entrada del teclado y ocaciona muchos errores por ello si se tocan teclas inutiles (digitos por ejemplo) en el turno del uso de getch() ya que no limpia la entrada.

Pero creía que conio estaba en mas compiladores, por lo menos la versión que incluye las funciones mas comunes. Use la conio que me viene con Dev-C++.

Hagan una cosa, cambien la función PulsarLetra por la siguiente y no incluyan conio.h:

Código: Seleccionar todo

char PulsarLetra() 
{ 
    char Pulsado; 
    do{ 
        Pulsado=getchar(); 
        fflush(stdin);
    }while(!isalpha(Pulsado)&&Pulsado!='1'&&Pulsado!='0'); 
    if(isupper(Pulsado)) 
        Pulsado=tolower(Pulsado); 
    return Pulsado; 
} 
Ahí va de maravilla.

Ah y otra cosa, los usuarios de Linux tendran que reemplazar 'system("cls");' por 'system("clear");'. o usar el preprocesador como hizo v4r3t, algo que no sabía como implementar, gracias.
Algo nuevo siempre se aprende :D

Un saludo!
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#32 Mensaje por polly » 28/08/2008 1:53 am

Tienes razon eagleoneraptor en cuanto a las llamadas a system , yo he usado system("clear") y no me habia dado cuenta de que solo vale en linux, pero esas cosas se pueden cambiar facilmente

S2
enrmarc

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#33 Mensaje por polly » 28/08/2008 2:18 am

Si es cierto, es que no se como emular la función para que cumpla ese cometido
Yo creo (creo) que getchar casi lo mismo que getch


Por cierto he ejecutado los 2 codigos y estan bastante bien.

Esperaremos a que warc3l cuelgue su codigo y luego comentamos todos

S2
enrmarc

WaRc3L
Mensajes: 199
Registrado: 12/06/2008 12:27 pm
Ubicación: en el registro de la CPU

#34 Mensaje por WaRc3L » 28/08/2008 4:56 am

Bueno!, aqui va mi proyecto el ahorcado, he divido el fichero en 2 partes,
el programa principal, y el programa de funciones(el ahorcado).
Voy a empezar por le main.

main:

Código: Seleccionar todo

/*

!IMPORTANTE!:

PROYECTO: EL AHORCADO
LENGUAJE: C++
FICHERO: PROGRAMA PRINCIPAL
POR: www.elrincondelc.com / Mini-Proyectos
SISTEMA OPERATIVO COMPATIBLE: Windows y Linux
TRABAJADO EN: Windows ( en casa )
EJECUTABLE DESDE: MSDOS - TERMINAL

AUTOR: WaRc3L ( elrincondelc.com )

ESTE PROGRAMA FUE HECHO POR WaRc3L, Y COMPARTIDO POR LOS USUARIOS PARTICIPANTES EN LOS MINI-PROYECTOS
DE LA PAGINA WEB: www.elrincondelc.com.

*/ 



// FICHEROS SECUNDARIOS:

#include <iostream>
#include "FunAho.h" // Funciones y variables globales el ahorcado
#include <string>
// FIN DE FICHEROS SECUNDARIOS

using namespace std;

// ENTRADA PRINCIPAL:

int main(void)
{
     char chr_LetEnt01; // La letra entrada
     char chr_FraEnt01[30]; // Para la frase entrada
     char chr_LetGua01[6]; // Letras que no estan en la frase
     int int_LetCon01 = 0; // Contador de letras, si vale 0, no hay ninguna letra, si vale mas hay letras
     int int_TamFra01 = 0; // El tamaño de la frase
     int int_NumErr01 = 0; // El numero de errores
     char temp; // linux o windows, para poder limpiar la pantalla, y para el final de todo.     
     int i = 0; // Variable para el while

     cout << "Bienvenido el Ahorcado!" << endl << endl;

     cout << endl << endl;
     
     cout << "Escribe una palabra: ";

     cin.getline(chr_FraEnt01,30);

     // Entra en un bucle.
     
     while ( chr_FraEnt01[i] != '\0' )
     {
         if ( chr_FraEnt01[i] == ' ' ) // Si se encuentra un espacio en blanco
         {
              chr_RalEnt01[i] = ' '; // La frase con barras, tendra un espacio en la posicion i.
         }
         i++;
     }
     i = 0; // Vuelve a poner el contador i a zero.

     cout << endl;


     cout << "Linux ( 1 ) Windows ( 2 ) : "; // Pregunta que SO tienes, Linux o Windows
     cin >> temp; // Lee la variable temp.

     cout << endl << endl;


     if ( temp == '1' )
     {
         system("clear"); // Si el usuario escogio Linux, se limpia la pantalla con clear
     }
     else if( temp == '2' )
     {
         system("cls"); // Si el usuario escogio Windows, se limpia la pantalla con cls
     }

     temp = '0'; // Vuelve a poner temp a 0.
     // Conseguir el tamaño de la frase.
     for ( int_TamFra01=0;chr_FraEnt01[int_TamFra01]!='\0';int_TamFra01++);

     // Cambiar el tamaño del vector, al tamaño de la frase
     chr_RalEnt01.resize(int_TamFra01);

     fDibAho01(int_NumErr01); // Dibuja el ahorcado, con el argumento, el numero de errores.
     fMosFra01(chr_FraEnt01); // Muestra la frase, con parametro la frase entrada

     while ( i == 0 )
     {
         cout << endl << endl;

         cout << "Escribe una letra: ";
         cin >> chr_LetEnt01;

         fComLet01(chr_LetEnt01,chr_FraEnt01); // Comprueva si la letra pasada por 1 argumento, esta
                                               // en la frase del segundo arguemento.

         if ( int_ComLet01 == 0 ) // La funcion de arriba, modifica el valor de int_ConLet01, si es 0
         {
              chr_LetGua01[int_NumErr01] = chr_LetEnt01; // No se he ha encontrado la letra, y la pone
                                                         // guardada en un array, para mostrar las letras
                                                         // equivocadas
              int_NumErr01+= 1; // Sube a uno, el contador de errores.
         }
         
         int_ComLet01 = 0; // Vuelve a poner el comprovador de letras a zero.
         
         // Si el numero de errores, es el maximo ( 7 )
         if ( int_NumErr01 == 7 )
         {
              i = 1; // Pone el contador a 1, y se acaba el programa
              temp = '1'; // Y pone el temp a 1, para poder mostrar la palabra al final.
         }

         for ( int int_ConFor01=0;chr_FraEnt01[int_ConFor01] != '\0';int_ConFor01++)
         {
              // Si se encuentra una barra.
              if ( chr_RalEnt01[int_ConFor01] != '_' ) // Si no se encuentra ninguna barra, ( hay letra )
              {
                  int_LetCon01+= 1; // Sube el contador de letras.
              }
         }     
 
         fDibAho01(int_NumErr01); // Dibuja el ahorcado
         fMosFra01(chr_FraEnt01); // Muestra la frase con las barras
         
         // Muestra las letras que el usuario no ha acertado.
         for ( int int_ConFor01=0;int_ConFor01<int_NumErr01;int_ConFor01++)
         {
              cout << chr_LetGua01[int_ConFor01] << " ";
         }
     
         cout << endl << endl;
         if ( int_LetCon01 == int_TamFra01 ) // Si el contador de letras, es igual al tamaño de la frase
         {
              i = 1; // Pone a 1, el contador i, para que acabe el bucle, y el programa
              cout << "NO SE HA QUEDADO COLGADO!";
              cout << endl << endl;
         }
         int_LetCon01 = 0; // Vuelve poner el contador de letras a zero.
         
         if ( temp == '1' )
         {
              cout << "LA FRASE/PALABRA ERA: " << chr_FraEnt01;
         }

     }


     cout << endl << endl;
     cout << "Copyright de WaRc3L ( en elrincondelc.com ) --- MiniProyectos ---";
     cout << endl << endl;
     system("pause");


     return 0;
}

Funciones el Ahorcado:

Código: Seleccionar todo



/*

!IMPORTANTE!:

PROYECTO: EL AHORCADO
LENGUAJE: C++
FICHERO: FUNCIONES PARA EL AHORCADO
POR: www.elrincondelc.com / Mini-Proyectos
SISTEMA OPERATIVO COMPATIBLE: Windows y Linux
TRABAJADO EN: Windows ( en casa )
EJECUTABLE DESDE: MSDOS - TERMINAL

AUTOR: WaRc3L ( elrincondelc.com )

ESTE PROGRAMA FUE HECHO POR WaRc3L, Y COMPARTIDO POR LOS USUARIOS PARTICIPANTES EN LOS MINI-PROYECTOS
DE LA PAGINA WEB: www.elrincondelc.com.

*/

#ifndef _FUNAHO_H
#define _FUNAHO_H

#include <iostream>
#include <vector>

using namespace std;

void fDibAho01(int int_Par01); // Dibuja el ahorcado.
void fMosFra01(char chr_Par01[]); // Muestra el vector, con las letras o las barras
void fComLet01(char chr_Letra,char chr_Frase[]); // Comprueva si la letra, esta en la frase.

#define MAX 30

vector<char> chr_RalEnt01(MAX,'_'); // Vector para mostrar las barras y las letras acertadas.
int int_ComLet01 = 0; // Controlador si la letra entrada esta en la frase.

void fDibAho01(int int_Par01)
{
     switch(int_Par01) 
     {
         case 0:
              cout << "+----+" << endl;
              cout << "|/" << endl;
              cout << "|" << endl;
              cout << "|" << endl;
              cout << "|" << endl;
              cout << "+----+" << endl;
              break;
         case 1:
              cout << "+----+" << endl;
              cout << "|/   |" << endl;
              cout << "|" << endl;
              cout << "|" << endl;
              cout << "|" << endl;
              cout << "+----+" << endl;
              break;         
         case 2:
              cout << "+----+" << endl;
              cout << "|/   |" << endl;
              cout << "|    O" << endl;
              cout << "|" << endl;
              cout << "|" << endl;
              cout << "+----+" << endl;
              break;         
         case 3:
              cout << "+----+" << endl;
              cout << "|/   |" << endl;
              cout << "|    O" << endl;
              cout << "|    |" << endl;
              cout << "|" << endl;
              cout << "+----+" << endl;
              break;         
         case 4:
              cout << "+----+" << endl;
              cout << "|/   |" << endl;
              cout << "|    O" << endl;
              cout << "|    |\\" << endl;
              cout << "|" << endl;
              cout << "+----+" << endl;
              break;         
         case 5:
              cout << "+----+" << endl;
              cout << "|/   |" << endl;
              cout << "|    O" << endl;
              cout << "|   /|\\" << endl;
              cout << "|" << endl;
              cout << "+----+" << endl;
              break;         
         case 6:
              cout << "+----+" << endl;
              cout << "|/   |" << endl;
              cout << "|    O" << endl;
              cout << "|   /|\\" << endl;
              cout << "|   /" << endl;
              cout << "+----+" << endl;
              break;         
         case 7:
              cout << "+----+" << endl;
              cout << "|/   |" << endl;
              cout << "|    O" << endl;
              cout << "|   /|\\" << endl;
              cout << "|   / \\" << endl;
              cout << "+----+" << endl;
              cout << "TE HAS QUEDADO COLGADO!";
              cout << endl;
              break;         
         default:
              break;

     }


}
void fMosFra01(char chr_Par01[])
{
     for ( int int_ConFor01=0;chr_Par01[int_ConFor01]!='\0';int_ConFor01++)
     {
         if ( chr_RalEnt01[int_ConFor01] == ' ' )
         {
              cout << " ";
              continue;
         }
         cout << chr_RalEnt01[int_ConFor01] << " ";
     }
     cout << endl << endl;     

}

void fComLet01(char chr_Letra,char chr_Frase[])
{
     for ( int int_ConFor01=0;chr_Frase[int_ConFor01]!='\0';int_ConFor01++)
     {
         // Si la letra, esta en la frase
         if ( chr_Frase[int_ConFor01] == chr_Letra )
         {
              chr_RalEnt01[int_ConFor01] = chr_Letra; //Coloca la letra, en el vector
              int_ComLet01 = 1; // Pone a uno, la variable que comprova, si se ha encontrado la letra              
         }
     }

}

#endif 
Este es el codigo, puede que se vea un poco mal, por el espacio del post, pero si quieren el codigo, le envio un mail con los dos codigos fuente.

Saludos! y opinene! valen criticas! y perdon por la espera :oops:
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#35 Mensaje por polly » 28/08/2008 5:29 am

Bueno, ya estan todos los codigos (salvo clavo que esta ausente).

Lo de la calificacion no se como lo podriamos hacer, o quiza no haria falta deicir el ganador, en esto opinen.

Lo que si podriamos hacer es que cada uno (si quiere) diga las cosas que le han gustado/disgustado en los codigos de los demas, sugerencias, etc


S2
enrmarc

Avatar de Usuario
eagleoneraptor
Mensajes: 187
Registrado: 20/05/2008 10:24 am
Ubicación: Buenos Aires(Argentina)

#36 Mensaje por eagleoneraptor » 28/08/2008 6:56 am

Yo creo (creo) que getchar casi lo mismo que getch
No, la función getch termina cuando se presiona cualquier caracter, getchar termina cuando se presiona el retorno de linea (ENTER), pero devuelve el 1º caracter presionado, al igual que getch que devuelve el único caracter que la función permite ingresar.

Yo lo hice con la función getch simplemente porque quedaba mas elegante que el programa solo reaccione ante teclas válidas y no haga falta presionar ENTER.

Un saludo!
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#37 Mensaje por polly » 28/08/2008 7:20 am

Es verdad, no me acordaba,
enrmarc

Avatar de Usuario
eagleoneraptor
Mensajes: 187
Registrado: 20/05/2008 10:24 am
Ubicación: Buenos Aires(Argentina)

#38 Mensaje por eagleoneraptor » 28/08/2008 7:55 am

Veo que WaRc3L ha usado la clase vector, quería saber donde puedo conseguir una referencia a este tipo de clases (STL si no me equivoco), de preferencia en español XD.

He compilado y visto todos los proyectos, es increible las maneras que se le ocurren a cada uno para llegar a tecnicamente lo mismo.

Yo la verdad no sabría opinar sobre sus proyectos, me cuesta mucho leer código ajeno (de programas medianamente largos), ya que no entiendo adonde quieren llegar, ni lo que tiene en mente el programador al momento de escribir el código.

Lo único que podría percibir son fallas que encontre durante la ejecución que todos seguro ya encontraron.

Un saludo!
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson

Avatar de Usuario
v4r3t
Mensajes: 103
Registrado: 06/03/2007 12:00 am

#39 Mensaje por v4r3t » 28/08/2008 7:59 am

El problema de getchar es...no sé como explicarlo, ya lo comentamos en anteriores posts, si tú escribes "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..." las pilla todas, es decir, va a esta poniendo "la letra ya está puesta" tantas veces como "aes" hayan. No sé si me explico, pero probadlo para entenderlo mejor. Por eso polly y yo hemos salvado ese detalle. En mi caso lo que hago es leer una cadena y asigar a la letra únicamente la primera letra de la cadena y polly muestra un mensaje de carácter inválido si se pone más de una letra.
-=v4r3t=-

Avatar de Usuario
eagleoneraptor
Mensajes: 187
Registrado: 20/05/2008 10:24 am
Ubicación: Buenos Aires(Argentina)

#40 Mensaje por eagleoneraptor » 28/08/2008 8:11 am

Es verdad lo que dice v4r3t pero esto se puede evitar sí luego del getchar() se usa la función fflush(stdin), con esto podemos liberar la entrada de la consola y el programa no "flashea" que apretamos 500 retornos de línea.

Un Saludo!
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson

WaRc3L
Mensajes: 199
Registrado: 12/06/2008 12:27 pm
Ubicación: en el registro de la CPU

#41 Mensaje por WaRc3L » 28/08/2008 12:09 pm

eagleoneraptor escribió:Veo que WaRc3L ha usado la clase vector, quería saber donde puedo conseguir una referencia a este tipo de clases (STL si no me equivoco), de preferencia en español XD.
Encantado de ayudarte eagleoneraptor, pero la lastima, que no he encontrado informacion hecha por algun experto en español, solo he encontrado en ingles ( que si quieres el link, esta abajo de todo ) .
Pero te explicare lo que se ok?, intentare ayudarte en lo que se.

Un vector, es un tipo de clase, juntamente con una plantilla para poder escoger un tipo ( cualquier tipo ) para poder crear el vector.

Un vector se podria comparar con matrices, la unica diferencia es, que puede variar el tamaño, puedes poner todos los valores inicializados, puedes esborrar los valores...etc

Es facil hacer servir un vector:
Codigo:

Código: Seleccionar todo

#include <vector> // Necesitas esta libreria

vector<int> VectorDeInt(100,10);
El codigo de arriba, he declarado una variable de tipo vector, que todas sus posiciones son de tipo int. El numero de posiciones, se pone en el primer parametro, en este caso, tiene 100 posiciones, y el segundo argumento ( que es opcional ) se inicializan todas las 100 posiciones con el valor 10.

Para poder, invocar, ( imprimir ) un valor, es exactamente igual, que lo haces cualquier matriz:

Código: Seleccionar todo

#include <iostream>
#include <vector>

vector<int> VectorDeInt(100,10);

std::cout << VectorDeInt[0];

Lo que hace, es invocar el VectorDeInt, de la posicion 0, ( que enseñaria un 10).

De momento, no se encuentra nada especial sobre la clase vector, pero tiene cosas interesantes que voy a explicar seguidamente:

Puede cambiar el tamaño, con mucha sencillez, se hace simplemente lo siguiente:

Código: Seleccionar todo

#include <iostream>
#include <vector>

vector<int> VectorDeInt(100,10);

std::cout << VectorDeInt[0];

VectorDeInt.resize(10);

Con el metodo resize de la clase vector, podemos cambiar el tamaño sin ningun problema, esta vez, el tamaño es de 10 ints, que sus valores, no se han perdido, son los 10 primeros del antiguo vector de 100 posiciones.


Bueno, si necesitas algo mas, o no entiendes algo, por favor hacmelo saber.

El link en ingles: http://www.cplusplus.com/reference/stl/ ... ector.html

Puede que te sirve por los ejemplos.

Saludos! y espero que te haya ayudado en algo! :wink:
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#42 Mensaje por polly » 28/08/2008 12:20 pm

Bueno y ahora que hemos acabado el ahorcado que hacemos ?
Yo propongo : el juego de la vida
http://es.wikipedia.org/wiki/Juego_de_la_vida

O hacemos uno de hundir la flota (http://es.wikipedia.org/wiki/Batalla_naval_(juego))

o algun otro, nose

S2
enrmarc

Avatar de Usuario
v4r3t
Mensajes: 103
Registrado: 06/03/2007 12:00 am

#43 Mensaje por v4r3t » 28/08/2008 2:31 pm

Yo no sé, la verdad es que los juegos no son santo de mi devoción, al menos para programar en C, pero de todas maneras no tengo otras propuestas.
-=v4r3t=-

Avatar de Usuario
eagleoneraptor
Mensajes: 187
Registrado: 20/05/2008 10:24 am
Ubicación: Buenos Aires(Argentina)

#44 Mensaje por eagleoneraptor » 30/08/2008 7:54 am

Ya se que esta pregunta es un poco colgada, pero ya que polly es usuario de Linux, te quería preguntar que versión tenes y donde la descargaste, porque he intentado instalar múltiples versiones del ubuntu y todas salen con el mismo error, que es algo así:

[ 545646] I/O buffer error device sr0, logical block 1

y salen múltiples líneas de formato parecido.

Se lo estoy intentando instalar a un Pentium III de 256 de RAM, al que anteriormente le instale un Windows XP sin ningun problema y funciona perfectamente.

Perdón por las molestias.

Un Saludo!
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#45 Mensaje por polly » 30/08/2008 2:29 pm

Pues ahora mismo tengo el ubuntu 7.10, encargue el cd por internet y lo instale.
Ahora esta la version 8.04 que es la mas actual,

Te dejo la pagina donde se encargan los cd (gratuitamente), tienes que registrarte primero:
https://shipit.ubuntu.com/login

Y aqui la pagina de donde te lo puedes descargar:
http://www.ubuntu.com/getubuntu/download

Y respecto a tu error, en que momento de la instalacion sale ?, no creo que pueda ayudarte mucho, nunca me aparecieron errores al instalar el ubuntu.

Si quieres ayuda sobre Linux (ubuntu en especifico) te dejo la pagina
www.ubuntu-es.org
que es un portal donde se pueden resolver muchas dudas (en la seccion foro)

S2
enrmarc

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado