Juego Ta-Te-Ti (c++) (Problema)

Iniciado por Tengoku, 1 Junio 2010, 03:13 AM

0 Miembros y 1 Visitante están viendo este tema.

Tengoku

Hola gente, creo dos post casi seguido por dos dudas que no pude solventar a lo largo de mi semana =P. Para empezar, tengo que decir que todavia soy un principiante autodidacta en este tema con pocos conocimientos de programacion.

Tengo el codigo del programa funcionando, pero con un ligero incomveniente de comodidad (en realidad dos). Para empezar explico en sintesis el funcionamiento del juego.

El Ta-Te-Ti es de dos jugadores y funciona con el pad numerico de la derecha, siendo cada numero, la representacion del espacio virtual del "tablero" en cuestion. El asunto esta en que para ingresar una posicion, yo debo presionar el numero y luego apretar enter, para asi poder hacer que el programa continue, borre la pantalla y escriba nuevamente, con el tablero y la posicion elegida. De esta manera es excesivamente antiestiteco y molesto. Me gustaria encontrar la forma de poder hacer que se detecte lo que presione, simplemente apretando el boton, y sin la necesidad de mostrarlo en pantalla.

Para poner un simple ejemplo, propondre el siguiente codigo explicativo

#include <iostream>
#include <stdlib.h>

int main()
{
    using namespace std;
    char q = 'Y';
    while (q == 'Y')
    {
         cout << "Hola" << endl;
         cout << "Quieres leer eso de nuevo? (Y/N)" << endl;
         cin >> q;
         while (q != 'Y' && q != 'N')
         {
               cout << "Por favor, escribe 'Y' para Si, y 'N' para No" << endl;
               cin >> q;
         }
         system("cls");
     }
     return 0;
}

Lo que yo quisiera es que no se muestre que yo teclie "Y" sino que simplemente lo presione y el programa me lo detecte, sin la necesidad de mostrarlo en pantalla o utilizar "Enter".

Ahora en este programa, mi segundo problema es el siguiente.... si por ejemplo, en vez de apretar Y, N, o K.... escribo "pepe"... el programa me dice 4 veces "Por favor, escribe 'Y' para Si, y 'N' para No"... osea, 1 por cada letra de la palabra. En cambio si yo escribo "peYpe", me escribe dos veces "Por favor, escribe 'Y' para Si, y 'N' para No" y luego se re-ejecuta el programa. Alguien podria decirme una manera de limitar esto...  o quizas, algun metodo mas eficiente para esto?

Desde ya, muchas gracias



   



Og.

#1
conio.h

usa getch() :P

(aun que no sera funcional para otras plataformas que no sea Windows)


Edit: Lo mejor seria que hicieras la aplicación con su propia interface gráfica, pero igual la forma mas fácil seria con getch().
|-

.:BlackCoder:.

Haz la prueba con getch pero creo que igual debes precionar enter...
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




Littlehorse

Mas bien usar conio no es funcional en ningún sistema. Es obsoleta.

Dicha tarea requiere de funciones especificas del sistema, en Windows puedes hacer con WINAPI algo así:

Código (cpp) [Seleccionar]

#include <iostream>
#include <windows.h>
using namespace std;

int getch(void);

int main()
{
char cad[10];
int i;

 for(i=0;i<9;i++)
    cad[i]=getch();
cad[i]='\0';
   
cout<<cad<<endl;    
cin.get();
return EXIT_SUCCESS;
}

int getch(void)
{
  int car;
  DWORD leidos, modo;

  GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &modo);  
  SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo & !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT);
  ReadConsole(GetStdHandle(STD_INPUT_HANDLE), &car, 1, &leidos, NULL);
  SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), modo);  
  return car;  
}



Para Linux tal vez te sirva este link.

Hay mas información al respecto en otros hilos acerca de alternativas para getch.

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.