Giocare e vincere con Excel

Gestire il timer per dare un ritmo al gioco

Nei giochi interattivi si sfrutta quindi lo stesso principio alla base dei filmati. Si eseguono i fotogrammi del gioco in modo veloce uno sull’altro in modo da dare l’impressione del movimento. Per fare questo bisogna avere un timer che faccia eseguire il codice a un ritmo costante e sufficientemente elevato per dare alla sequenza di immagini statiche l’aspetto di un movimento.
Per fare in modo che una porzione di codice venga eseguita con un ritmo cadenzato constante, anche in questo caso sono necessarie poche righe. Vediamo un piccolo programma che muove avanti e indietro una scritta sullo schermo:

Sub timer_esempio()
Dim F As Worksheet
Dim Stato As Range
Dim TIMEDELAY As Double
Dim StartTimer
Dim NSpace As Integer
Dim DIR As Integer
Dim testo As String

Set F = Worksheets(“Esempio”)
Set Stato = F.Cells(5, 5)

TIMEDELAY = 0.05 ‘velocità di movimento
DIR = 1
NSpace = 1
testo = “vado a destra -->”
Do While Stato.Value <> “” 
   DoEvents 
   NSpace = NSpace + DIR 
   F.Cells(10, 5).Value = Space(NSpace) & testo 
   If NSpace < 1 Then 
      DIR = -DIR 
      testo = “vado a destra -->” 
   End If 
   If NSpace > 80 Then 
      DIR = -DIR 
      testo = “<-- vado a sinistra” 
   End If 
   StartTimer = Timer 
   While Timer < StartTimer + TIMEDELAY 
   Wend
Loop

End Sub

Il codice viene eseguito fintanto che nella cella Stato è presente un valore qualunque (<>””). Il comando DoEvents permette all’utente di muovere il cursore e gestire il foglio di lavoro esattamente come se la macro non fosse in esecuzione. Ciò consente all’utente di modificare la condizione di Stato a suo piacimento.
In questo caso si utilizza la funzione Timer per rilevare il tempo in termini di secondi. Timer è già inclusa in Excel, ed è sufficiente per i nostri scopi di gestione. Se si desidera invece anche in questo caso utilizzare una funzione delle API vi consigliamo GetTickCount, che rileva il numero di millisecondi trascorsi.
Osservando il codice appare evidente che ci sono due cicli uno nell’altro. Il ciclo:

StartTimer = Timer
While Timer < StartTimer + TIMEDELAY

è semplicemente un ciclo di ritardo all’interno del ciclo principale. Questo ciclo fa in modo che il ciclo principale venga eseguito una volta ogni TIMEDELAY secondi. In questo caso il ciclo principale viene eseguito una volta ogni 0,05 secondi, cioè 20 volte al secondo.
Potete dunque sbizzarrirvi nella programmazione per trovare il modo migliore di dare il ritmo al vostro codice, utilizzando le funzioni di Excel oppure sfruttando le API di Windows.
Torniamo al ciclo principale, che a sua volta aggiunge e toglie dalla scritta uno spazio (Space(NSpace) & testo). In questo modo la scritta si sposta di uno spazio a destra o a sinistra 20 volte al secondo. Ammettendo che sul vostro monitor uno spazio abbia le dimensioni di 2 mm, la scritta si sposterà sul vostro monitor di 2*20mm ogni secondo, cioè avrà una velocità di 4 cm al secondo.
La Figura 1 rappresenta, uno sotto l’altro, diversi momenti dell’esecuzione della macro per dare l’idea del movimento al quale si assiste sullo schermo.

Figura 1

xxx

Gianclaudio Floria - Autore top seller su Excel per Edizioni FAG, collabora con Microsoft ed è il fondatore del portale www.excelling.it
Andrea Terzaghi - Ingegnere con esperienza pluriennale nell'uso lavorativo e ludico di Excel; condivide trucchi e segreti sul suo sito www.terzaghi.it

Articolo tratto da:
Gianclaudio Floria, Andrea Terzaghi, Giocare e vincere con Excel, Assago (Milano), FAG, 2006.


In partnership con Fag
**
**
**
**

Risorse