[C++] Input istantaneo

di il
3 risposte

[C++] Input istantaneo

Buon giorno,
Avrei bisogno di un paio di riferimenti e indirizzamenti riguardo ad uno ostacolo che ho riscontrato durante la programmazione un paio di giorni fa, e a cui non ho trovato molte risposte.

Il problema in questione, è " l'input istantaneo"; mi spiego meglio.
A me sarebbe utile, trovare il modo di ottenere dall'utente un input (oppure non ottenerlo) in un determinato istante ripetuto nel corso dello svolgimento del programma.

Inizialmente avevo pensato ad una cosa del genere, che avevo già provato a usare:

// [...]
	//Input Mossa
	int inputKey=getch();
	if(inputKey==224){
		inputKey=getch();
		switch(inputKey){
			case 72: Direc='N'; break;
			case 75: Direc='W'; break;
			case 77: Direc='E'; break;
			case 80: Direc='S'; break;
		}
	}
// [...]
In questa maniera, appena l'utente preme un qualsiasi tasto, essendo un input unbuffered, non occorre che l'utente prema invio.
Tramite la funziona sopra riportata infatti, riuscivo a determinare Direc in base a quale freccia direzionale si era premuta.

Il problema, sorge nell'esatto momento in cui l'utente non preme nulla, e infatti, il codice attende (e continuerà ad attendere) fino a quando l'utente non premerà nulla.
Così facendo mi impedisce di eseguire il resto del codice.

Quello che cerco dunque, e un modo che mi permette di richiedere un input all'utente non bufferandolo, proprio come sopra, ma che al tempo stesso, se l'utente non inserisce nulla in un arco di tempo relativamente breve (tipo 100ms al massimo) saltare l'operazione di input e procedere con il resto del programma.
So bene che questo, tecnicamente sarebbe risolto tramite la programmazione concorrente, e che quindi gestisse in modo separato i due processi (il resto del codice e l'input dell'utente), ma so anche, che si può sfruttare la velocità dei processori odierni evitando questo metodo di programmazione, anche se possa complicare le carte in tavola.

Grazie mille dell'eventuale aiuto,
- MoraGames

3 Risposte

  • Re: [C++] Input istantaneo

    Se ho ben capito, credo di aver affrontato questo stesso problema non molto tempo fa:
    https://www.iprogrammatori.it/forum-programmazione/cplusplus/tetris-aiuto-rotazione-t41397-15.html

    Dagli un'occhiata, poi se hai qualche dubbio chiedi pure!
  • Re: [C++] Input istantaneo

    Nippolo ha scritto:


    Se ho ben capito, credo di aver affrontato questo stesso problema non molto tempo fa:
    https://www.iprogrammatori.it/forum-programmazione/cplusplus/tetris-aiuto-rotazione-t41397-15.html

    Dagli un'occhiata, poi se hai qualche dubbio chiedi pure!
    Grazie mille, anche io mi sto dilettando nella realizzazione di un giochino, e proprio come te volevo evitare di andare nella "sezione" di programmazione concorrente, ben conscio che non è roba facile e che non voglio sbagliare inizialmente convincendomi magari di cose non corrette e poi ritrovarmi nei guai al momento di dover affrontare veramente l'argomento.

    Ti ringrazio anche, perché avevo pensato di trovare argomenti simili, ma non mi era passato per la testa che il problema da me riscontrato era sostanzialmente lo stesso di tanti altri giochi che funzionano "a tempo", e infatti avevo mirato le ricerche di vecchi post solo al mio gioco / argomenti inerenti a input "istantanei".

    Grazie, ora mi studio bene il tuo codice, anche se a prima vista mi era sembrato proprio il caso di cui mi dovevo interessare, ti faccio i miei più sentiti complimenti per il gioco ben sviluppato, e se avrò bisogno di aiuto riguardo ciò che è stato usato allungherò con una domanda inerente questo post.

    Grazie ancora,
    - MoraGames
  • Re: [C++] Input istantaneo

    Di niente!
Devi accedere o registrarti per scrivere nel forum
3 risposte