PDA

Visualizza la versione completa : [C] saltare funzione getch() in assenza di input


glukosio
29-10-2013, 13:09
ciao a tutti, sto realizzando il giochino di snake tanto per divertirmi un po', e in pratica mi servirebbe che la funzione getch() che mi permette di premere i tasti freccia (72,75,77,80) senza necessità di premere invio, venga saltata in caso se non premo nulla. In pratica ho un ciclo infinito nel main che chiama la funzione con il getch che mi cambia direzione in base al tasto che premo. Come si potrebbe fare per proseguire con la direzione precedente in caso se non viene premuto alcun tasto?
grazie in anticipo ;)


while(1){
printM();
printf("\n %d %d %d\n",pX,pY,dir);
direction();
move();
delay(1000);
clrscr();
}




void direction()
{
switch (getch()) {
case 72: dir=3;
break;
case 75: dir=2;
break;
case 77: dir=0;
break;
case 80: dir=1;
break;
}
}

oregon
29-10-2013, 14:26
Non è chiaro ma se imposti dir a -1 prima dello switch saprai cosa è successo ...

glukosio
29-10-2013, 14:42
no ma non è che c'è un problema, funziona tutto a dovere, solo che voglio che continui anche se non viene premuto nessun pulsante... cioè il mio serpentino segue una direzione e la continua a seguire finquando non premo un tasto che la cambi! invece qui si ferma e aspetta l'input di un tasto, come dovrebbe essere, però vorrei aggirarlo!

oregon
29-10-2013, 14:51
Ah ... ma è la getch() che attende il tasto. Devi prevedere un'altra funzione che non attenda il tasto ...

glukosio
29-10-2013, 15:01
potresti consigliarmi una soluzione? su internet non riesco a trovare nulla :(
grazie in anticipo ;)

oregon
29-10-2013, 15:20
Dato che l'input di questo tipo non è direttamente supportato dal linguaggio, dipende anche dal sistema operativo che usi ...

glukosio
29-10-2013, 15:22
si, pensavo di appoggiarmi a funzioni esterne ovviamente, attualmente sono su ambiente windows

glukosio
29-10-2013, 16:24
Risolto questo problema con kbhit() appartenente alla conio.h! :ciauz:

oregon
29-10-2013, 16:26
Era quello che ti volevo suggerire anche se è un po' vecchiotta.

Su Windows però potresti usare apposite API (GetAsyncKeyState)

glukosio
29-10-2013, 16:34
non sono capace di integrarle, per adesso cerco di arrangiarmi con conio che mi ha aiutato parecchio altre volte, poi quando avrò tempo guarderò meglio su msdn ;) grazie mille dei consigli!

Loading