Gioco dei 15 tasselli
Gioco
Fig. 1 - il Gioco dei 15 Tasselli.
Finalità
Il gioco consiste nel riportare i tasselli nell'ordine indicato nella figura 1, a partire da una configurazione
disordinata.
ModalitàIl giocatore, con il doppio clic su un tassello,
scambia la cella numerata con la cella vuota, purchè queste due celle siano adiacenti.
Preparazione del foglio
- Con riferimento alla figura 1, assegnare le opportune proprietà di carattere, allineamento, bordo e sfondo alle celle
dell'intervallo A1:F6,
- nell’intervallo B2:E5, disegnare un quadrato contenente 16 caselle (non è necessario numerarle).
Nel seguito sarà necessario collocare un tassello numerato nella sua cella, Per trovare una formula matematica affinchè la numerazione nelle celle venga generata da programma
si osservi che tra un numero e le coordinate della cella che lo deve contenere (a gioco completato) esiste la seguente corrispondenza:
se il numero n è compreso tra | | la coordinata di riga deve essere |
1 e 4 | → | 2 |
5 e 8 | → | 3 |
9 e 12 | → | 4 |
13 e 15 | → | 5 |
la coordinata di colonna, invece, deve variare tra 2 e 5;
Si può verificare che, dato il numero n, la corrispondente coordinata di riga è il quoziente intero di
((n-1)/4) + 2,
mentre la coordinata di colonna è il resto della divisione dello stesso rapporto aumentato di 2.
Ad esempio il numero 6 deve essere scritto nella cella le cui coordinate sono:
Riga = ((6 - 1) / 4) +2) = 3
Colonna = ((6-1) MOD 4) + 2 = 3
Collocazione dei tasselli numerati
- Avviare il registratore di macro (assegnare alla macro il nome:SchemaBase)
- Selezionare l’intervallo B2:E5
- premere il tasto Cancella.
- Fermare il registratore di macro
- Modificare la macro, completandola come la seguente subroutine (nota le linee 1 e 2 sono state ottenute con il registratore di macro):
Fig. 2 - Generazione dello schema.
Il gestore di evento onOpen
Una funzione definita dall'utente o una macro devono essere inserite in un "Modulo".
Un
gestore di evento deve essere inserito nell'appropriato foglio.
Per
Evento si intende un'azione dell'utente o di un programma in esecuzione, che richiede l'attenzione del programma o del sistema operativo.
In pratica richiamare l'
attenzione significa richiamare un programma che contiene le istruzioni per trattare l'evento, tale programma si chiama
gestore di evento.
Un gestore di evento si deve trovare in un foglio del
Progetto, se tratta gli eventi generati sul foglio, o in
thisWorkbook se tratta gli eventi sulla cartella.
- Nella finestra “Progetto” del Visual Basic Editor fare doppio clic su ThisWorkbook.
- Si apre la finestra codice in cui si scriveranno i gestori degli eventi che si possono verificare sulla cartella di lavoro.
- Nella casella a discesa di sinistra, della finestra codice, scegliere “Workbook”
- nella casella a discesa di destra scegliere Open
e completare la routine:
Fig. 3 - Gestore di Evento.
In questo modo, quando si apre la cartella di lavoro, lo schema sarà inizializzato con i tasselli nella loro posizione finale perchè si verifica l'evento Open,
ma sarà anche possibile richiamare la macro SchemaBase, avendola inserita in un modulo, per iniziare una nuova partita.
Cercare la cella vuota
Nella finestra codice del modulo inserire la funzione seguente, avente lo scopo di fornire, sotto forma di stringa, le coordinate della cella vuota:
Fig. 4 - Funzione cercaVuota.
La riga 1 produce un ciclo attraverso ciascuna cella dell’intervallo B2:E5.
Quando si trova una cella vuota (riga 2) la sua coordinata di colonna viene trasformata nella lettera di colonna corrispondente:
Cella.Column + 64
e, dopo averle concatenato il numero di riga,
viene restituita (riga 3) la coppia
<Colonna, Riga> sotto forma di stringa (esempio E5).
- Nella finestra “Progetto” del Visual Basic Editor fare doppio clic su “Foglio1”
Si aprirà la finestra codice in cui si scriveranno i gestori degli eventi che si possono verificare sul foglio.
- Nella casella a discesa di sinistra, della finestra codice, scegliere “Worksheet”
- nella casella a discesa di destra scegliere BeforeDoubleClick
completare la routine:
Fig. 5 - gestore evento
BeforeDoubleClick.
L’intestazione del gestore dell’evento specifica due parametri ricevuti dalla funzione.
Il primo è il riferimento alla cella su cui si è fatto il doppio click.
(normalmente il doppio click su una cella permette di modificarne il contenuto direttamente nella cella anziché nella barra della formula)
il secondo è un parametro, passato per riferimento, che offre la possibilità di annullare l’operazione di modifica della cella qualora si dovesse verificare un errore.
Le istruzioni 1 e 2 calcolano le coordinate della cella su cui si fatto doppio click.
Le istruzioni da 3 a 6 calcolano un valore booleano che indica la possibilità di spostare un tassello verso una delle quattro direzioni.
Se almeno una (riga 7) delle direzioni è consentita allora (riga 9) si legge il valore contenuto nella cella e (riga 10) lo si scrive nella casella vuota, mentre la cella diventa vuota (riga 11).
Infine (riga 13) il parametro Cancel viene posto a True per uscire dalla modalità modifica cella.
Infatti se questa istruzione mancasse, allora dopo il doppio clic comparirebbe il cursore all’interno della cella in attesa di modifiche.
A questo punto è possibile verificare il funzionamento del gioco lanciando la macro “SchemaBase” e facendo doppio clic su una casella adiacente quella vuota.
Calcolare le caselle fuori posto e gli spostamenti fatti.
Nel modulo inserire la funzione seguente:
In una casella vuota prossima allo schema del gioco inserire la funzione:
=FuoriPosto(B2:E5)
Ottenere uno schema da riordinare.
Il modo in cui funziona il gioco, finora, presuppone che un giocatore debba prima disordinare i tasselli e poi provare a riordinarli,
la funzione seguente, richiamata dalla subroutine Disordina sposta casualmente i tasselli.