australopiteci
11-04-2007, 17:00
Salve a tutti, non capisco per quale motivo questa getch sia non bloccante e tutti i valori vadano a finire sul case default. Ora incollo la parte del codice interessata.
while (in_esecuzione)
{
//pos_nave.x += SPOSTAMENTO_NAVE; /*sposta a sinistra la nave*/
pos_nave.vita +=1;
/*invia il dato alla funzione controllo i dati che indicano la nuova posizione della nave*/
scrivi_su_buffer(pos_nave);
//fflush(stdin);
/* input da tastiera*/
fflush(stdin);
switch(c = getch())
{
case TASTO_USCITA:
/*scrivi sul buffer (accedendo tramite l'opportuno mutex e verificando se vi
siano posizioni disponibili per la scrittura)relativo alla comunicazione con
controllo i dati che indicano che il giocatore ha scelto di uscire dal
gioco*/
pos_niente.tipo = USCITA;
in_esecuzione = false;/*esci dal ciclo esterno e quindi fai finire il thread*/
break;
/*se si preme la freccia sinistra la nave si sposta a sinistra*/
case SINISTRA:
/*se la nave è in una posizione dello schermo dove può stare*/
if(pos_nave.x > DISTANZA_DAI_LATI)
pos_nave.x -= SPOSTAMENTO_NAVE; /*sposta a sinistra la nave*/
scrivi_su_buffer(pos_nave);
break;
/*se si preme la freccia destra la nave si sposta a destra*/
case DESTRA:
/*se la nave è in una posizione dello schermo dove può stare*/
if(pos_nave.x < MAXX-DISTANZA_DAI_LATI)
pos_nave.x += SPOSTAMENTO_NAVE;/*sposta a destra la nave*/
scrivi_su_buffer(pos_nave);
break;
default:
sleep(1);
pos_nave.x -= SPOSTAMENTO_NAVE;
}
}
Ho provato anche ad usare fflush ma il problema rimane..
while (in_esecuzione)
{
//pos_nave.x += SPOSTAMENTO_NAVE; /*sposta a sinistra la nave*/
pos_nave.vita +=1;
/*invia il dato alla funzione controllo i dati che indicano la nuova posizione della nave*/
scrivi_su_buffer(pos_nave);
//fflush(stdin);
/* input da tastiera*/
fflush(stdin);
switch(c = getch())
{
case TASTO_USCITA:
/*scrivi sul buffer (accedendo tramite l'opportuno mutex e verificando se vi
siano posizioni disponibili per la scrittura)relativo alla comunicazione con
controllo i dati che indicano che il giocatore ha scelto di uscire dal
gioco*/
pos_niente.tipo = USCITA;
in_esecuzione = false;/*esci dal ciclo esterno e quindi fai finire il thread*/
break;
/*se si preme la freccia sinistra la nave si sposta a sinistra*/
case SINISTRA:
/*se la nave è in una posizione dello schermo dove può stare*/
if(pos_nave.x > DISTANZA_DAI_LATI)
pos_nave.x -= SPOSTAMENTO_NAVE; /*sposta a sinistra la nave*/
scrivi_su_buffer(pos_nave);
break;
/*se si preme la freccia destra la nave si sposta a destra*/
case DESTRA:
/*se la nave è in una posizione dello schermo dove può stare*/
if(pos_nave.x < MAXX-DISTANZA_DAI_LATI)
pos_nave.x += SPOSTAMENTO_NAVE;/*sposta a destra la nave*/
scrivi_su_buffer(pos_nave);
break;
default:
sleep(1);
pos_nave.x -= SPOSTAMENTO_NAVE;
}
}
Ho provato anche ad usare fflush ma il problema rimane..