La prima cosa da avere chiara è che il gioco deve girare all’interno di una macro, dunque non è possibile sfruttare la gestione della tastiera normale di Excel, per intenderci quella che usiamo quando scriviamo qualcosa in una cella o spostiamo il cursore nel foglio. Declare Function GetAsyncKeyState Lib “User32.dll” (ByVal vKey As Long) As LongLa funzione GetAsyncKeyState appartiene alla libreria User32.dll Questa, a sua volta, è una API (Application Programming Interface) di Windows. Le API sono uno strumento che ogni versione del sistema operativo Windows mette a disposizione. Esse permettono di accedere a funzionalità comuni a tutte le versioni del sistema sfruttandone appieno le potenzialità. Quella che sfrutteremo in questo caso è una semplice funzione che rileva lo stato (premuto o rilasciato) di ogni singolo tasto. La funzione restituisce un valore diverso da zero se il tasto è premuto nello stesso esatto momento in cui essa viene eseguita. Il funzionamento di questa funzione è molto semplice. Richiede come argomento un numero intero che rappresenta il codice del tasto virtuale (Virtual-key Code) della tastiera. Per dirla in parole semplici, a ogni tasto corrisponde un numero, e la funzione GetAsyncKeyState interroga lo stato di quel tasto specifico che corrisponde al numero passatole. Il codice che rileva lo stato dei tasti è il seguente:
Declare Function GetAsyncKeyState Lib “User32.dll”
ByVal vKey As Long) As Long
Const VK_LEFT As Long = 37
Const VK_DOWN As Long = 40
Const VK_RIGHT As Long = 39
Const VK_UP As Long = 38
Const VK_Z As Long = 90
Const VK_SHIFT As Long = 16
Sub start()
Dim Direzione As String
While True
If GetAsyncKeyState(VK_LEFT) <> 0 Then
Direzione = “Sinistra”
ElseIf GetAsyncKeyState(VK_RIGHT) <> 0 Then
Direzione = “Destra”
ElseIf GetAsyncKeyState(VK_UP) <> 0 Then
Direzione = “Su”
ElseIf GetAsyncKeyState(VK_DOWN) <> 0 Then
Direzione = “Giu”
Else
Direzione = “”
End If
Cells(1, 1) = Direzione
Wend
End Sub
La prima parte dichiara che nel codice verrà utilizzata la funzione e che quindi essa deve essere recuperata dalla corrispondente libreria. Si definiscono quindi delle costanti che rappresentano i codici di tasto virtuale appena discussi. Finalmente, si giunge al codice vero e proprio. Si tratta di un semplice ciclo perpetuo senza uscita dove t è sempre vero. Dunque, non si esce mai dal ciclo while-wend se non premendo Esc, cioè interrompendo l’esecuzione della macro. All’interno del ciclo vi è una variabile Direzione che assume il valore corrispondente alla freccia premuta. Nel ciclo (che data la velocità dei calcolatori attuali viene eseguito centinaia di volte al secondo) viene infatti verificata la pressione di quattro tasti: le quattro frecce di direzione. Nel caso in cui una determinata freccia sia premuta, la funzione GetAsyncKeyState corrispondente a quel tasto restituisce un valore diverso da zero, quindi viene eseguita la parte then del corrispondente if e la variabile Direzione assume il valore corrispondente alla freccia premuta. Tale valore viene poi presentato all’utente nella cella A1, (Cells(1,1)) del foglio di lavoro attivo.Non c’e’ nulla di più. Se volete verificare la pressione di un altro tasto oltre ai tasti freccia dovete solo reperire da Internet il codice del tasto virtuale corrispondente e aggiungere un altro if-then nel ciclo.
| In questo articolo |