Top Banner

of 38

Giocare Exce

Oct 11, 2015

ReportDownload

Documents

danikt

  • Giocare e vincere con Excel

    Gianclaudio Floria - Andrea Terzaghi

  • Giocare e vincere con Excel

    Autore: Gianclaudio Floria - Andrea Terzaghi

    Collana:

    Coordinamento collana: Fabrizio ComolliProgetto graco: escom - Milano

    Prima edizioneISBN: 88-8233-?????

    Copyright 2006 Edizioni FAG Milano Via G.Garibaldi 5 20090 Assago (MI) - www.fag.it

    Finito di stampare: nel mese di marzo 2006 da G. Canale & C. S.p.a., Borgaro Torinese (Torino)

    Edizione Speciale per Vogel Burda Communications srl stampata su licenza di FAG

    Nessuna parte del presente libro pu essere riprodotta, memorizzata in un sistema che ne permetta lelaborazione, n trasmessa in qualsivoglia forma e con qualsivoglia mezzo elettronico o meccanico, n pu essere fotocopiata, riprodotta o registrata altrimenti, senza previo consenso scritto delleditore, tranne nel caso di brevi citazioni contenute in articoli di critica o recensioni.

    La presente pubblicazione contiene le opinioni dellautore e ha lo scopo di fornire informazioni precise e accurate. Lelaborazione dei testi, anche se curata con scrupolosa attenzione, non pu comportare speciche responsabilit in capo allautore e/o alleditore per eventuali errori o inesattezze.

    Nomi e marchi citati nel testo sono generalmente depositati o registrati dalle rispettive aziende.Lautore detiene i diritti per tutte le fotograe, i testi e le illustrazioni che compongono questo libro.

  • 123

    7. Costruire i videogiochi interattivi

    Se siete curiosi di capire come possibi-

    le realizzare i giochi del capitolo preceden-

    te, scoprirete adesso che i principi alla

    base della programmazione dei giochi sono

    semplici. La difcolt vera non nel-

    la programmazione, ma nel trovare

    unidea creativa.

    Dopo aver visto Pacman su Excel, vogliamo mostrare al lettore nel detta-glio come costruire questo tipo di giochi interattivi.Di fatto servono soprattutto fantasia, immaginazione e tanta voglia di di-vertirsi, mentre non sono richieste grandi capacit di programmazione. In questo capitolo ci concentreremo sulla programmazione, lasciando a voi il piacere di scatenare le vostre capacit creative. Gli elementi di base, comuni a tutti i giochi interattivi, sono tre:

    la gestione degli eventi da tastiera: il giocatore deve premere i tasti per interagire con il gioco;

  • 124

    Giocare e vincere con Excel

    la gestione del timer, per dare limpressione del movimento facen-do scorrere il tempo a intervalli regolari, in modo da far succedere continuamente qualcosa (un quadretto che si muove, una pallina che rimbalza, un ore che gira);

    la gestione delle immagini che rappresentano gli elementi del gio-co (eroi, mostri, palline, spade, proiettili, mura, cibo ecc.).

    Vediamo prima degli esempi semplici, in poche righe di codice, di gestione della tastiera e del timer, per comprenderne il signicato. Comporremo i due elementi in un primo gioco interattivo, Snake (lo stesso che si trova sui cellulari) e inne mostreremo ancora una volta con poche righe di codice come gestire le immagini. A questo punto il lettore avr tutti gli elementi per comprendere appieno il codice di Pacman e, dando fondo alla sua crea-tivit e alla sua fantasia, potr sviluppare un suo proprio gioco interattivo.

    Gestire gli eventi di tastiera

    La prima cosa da avere chiara che il gioco deve girare allinterno 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.Per fare in modo che una macro di Excel rilevi gli eventi di tastiera (pres-sione e rilascio di un tasto) necessario utilizzare una funzione di libreria di Windows:

    Declare Function GetAsyncKeyState Lib User32.dll (ByVal vKey As Long) As Long

    La 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 funzio-nalit comuni a tutte le versioni del sistema sfruttandone appieno le po-tenzialit. 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.

  • 125

    Giocare e vincere con Excel

    Il funzionamento di questa funzione molto semplice. Richiede come ar-gomento 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 specico 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 de-niscono 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 interrom-

  • 126

    Giocare e vincere con Excel

    pendo lesecuzione della macro. Allinterno 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 vericata 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 resti-tuisce 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 allutente nella cella A1, (Cells(1,1)) del foglio di lavoro attivo.Non ce nulla di pi. Se volete vericare 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.

    Gestire il timer per dare un ritmo al gioco

    Nei giochi interattivi si sfrutta quindi lo stesso principio alla base dei l-mati. Si eseguono i fotogrammi del gioco in modo veloce uno sullaltro in modo da dare limpressione del movimento. Per fare questo bisogna avere un timer che faccia eseguire il codice a un ritmo costante e sufcien-temente elevato per dare alla sequenza di immagini statiche laspetto 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)

  • 127

    Giocare e vincere con Excel

    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 =

  • 128

    Giocare e vincere con Excel

    MEDELAY 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 mi-gliore 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 spo-ster sul vostro monitor di 2*20mm ogni secondo, cio avr una velocit di 4 cm al secondo.La Figura 7.1 rappresenta, uno sotto laltro, diversi momenti dellesecu-zione della macro per dare lidea del movimento al quale si assiste sullo schermo.

    Figura 7.1 - Il programma di gestione del timer in vari momenti della sua esecuzione.

  • 129

    Giocare e vincere con Excel

    Scriviamo un gioco interattivo: Snake

    Snake un simpatico serpente che si muove allinterno di un campo di celle dove trova ostacoli e cibo. Ogni volta che mangia un boccone di cibo, oltre a fare

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.