Salve Sono un newbie del c++ e girovagando sui vari siti web ho trovato questo video {http://www.youtube.com/watch?v=TiSAH_MNHN0} dove viene realizzata una versione base del celebre gioco Space Invaders realizzata su sistema operativo Windows in c++
Provo a realizzare da 2 giorni questo piccolo progetto ma Poiché utilizzo come sistema operativo Linux non posso utilizzare la libreria window.h e sono bloccato perchè non riesco a prelevare gl'input da tastiera in modo asincrono cioè senza pressione successiva del tasto enter, (cosa che nel video viene fatta con GetAsyncKeyState, funzione della libreria window.h)
Ho provato ad ovviare a questo problema includendo la libreria ncurse.h e usare la funzione getch() e getchar() ma nonostante ciò non riesco a fare quello che mi serve.
Le cose fondamentali che dovrebbe fare questa funzione alternativa sono:
1. Avere una funzione che preleva input da tastiera senza la pressione successiva del tasto enter.
2. Lo script quando arriva a quella linea di codice non deve fermarsi ad attendere l'input da tastiera ma deve restituire vuoto o 0 e deve andare avanti (come succede con GetAsyncKeyState).
C'è un modo alternativo per prelevare input da tastiera in modo asincrono per linux come succede su windows con "GetAsyncKeyState"?
Grazie mille in anticipo
Andrea
codice:#include <iostream> #include <cstdlib> #include <ncurses.h> #include <time.h> #include <unistd.h> using namespace std; //Inizializzo la mappa (array di caratteri bidimensionale) char Map[20][20] = { "###################", "# #", "# #", "# #", "# #", "# #", "# #", "# #", "# #", "# #", "# #", "# #", "# #", "# #", "# #", "# #", "# #", "# #", "# W #", "###################" }; bool endgame = false; int GameSpeed = 400; int k = 0; int main(){ while(endgame == false){ unsigned int sleep(unsigned int seconds = 0); #ifdef WINDOWS system("CLS"); #else // Assume POSIX system("clear"); #endif for( int y=0; y<20; y++ ){ cout << Map[y] << endl; } cout << k << endl; k++; int ch = 0; initscr(); timeout(0); ch = getch(); endwin(); if(ch >= 0 && ch!=10){ endgame = true; } /*int ch; ch = getchar( );*/ cout << "Tasto premuto è: " << ch << endl; /*//Controllo ogni carattere nello schermo for(int y = 0; y < 20; y++){ //Scorro le righe for(int x = 0; x<20; x++){ //Scorro i singoli caratteri su ogni riga switch(Map[y][x]){ case 'w': break; } } } */ } return 0; }

Rispondi quotando