domenica 7 giugno 2015

Scacchiera e Dama in Excel

Qualche tempo fa mi venne un idea, quella di sviluppare in Excel il gioco della Dama. Il tempo è poco e l'idea non si è poi concretizzata fino in fondo, è rimasto comunque un po di codice che può sempre tornare utile per altre applicazioni.
La parte di applicazione che pubblico consiste in una scacchiera (8x8) sulla quale vengono disposte delle pedine. L'applicazione consente di spostare le pedine tramite un doppio click del mouse. Il primo doppio click preleva la pedina, il secondo la deposita in una nuova cella.
Per iniziare costruiamo la scacchiera formattando 8 righe e 8 colonne di un foglio di calcolo in maniera che sembrino quadrati. Nella Fig. 1 ho impostato la larghezza delle colonne al valore di 6,57, l'altezza delle righe al valore di 30,75. Successivamente ho impostato il colore di riempimento delle celle con il nero a celle alterne.

Fig. 1 - Costruzione della scacchiera

Impostare il tipo di carattere di queste celle su "Wingdings", dimensione carattere 26.
Definire come colore del carattere di alcune celle ad esempio il rosso, per altre ad esempio il giallo. Sulle celle in cui è stato definito un colore (giallo o rosso) inserire il carattere 108 (ALT +108). Dopo queste operazioni la scacchiera dovrebbe apparire come in Fig. 2

Fig. 2 - Disposizione delle pedine

Aprire ora l'editor VBA e all'interno della finestra di Gestione progetti (tasti veloci CTRL+R se non è visualizzata) dare un doppio click sul foglio in cui è stata disegnata la scacchiera.
Nel primo combo in alto a sinistra dovrebbe essere selezionato l'oggetto "Worksheet" in quello di destra selezionare l'evento "BeforeDoubleClick". L'edito VBA inserisce dunque una routine che si attiva dopo aver fatto doppio click su una qualsiasi cella del foglio selezionato.
Il parametro più importante della routine è "Target" che rappresenta la cella (il range) su cui si è fatto doppio click.
Prima della routine inserire una variabile per il passaggio dei dati tra 2 lanci consecutivi della routine stessa e una costante string come messaggio da visualizzare quando si tenta di spostare una pedina da una cella nera a una bianca.
Il codice completo della routine è allora:

========================================================================
Dim cellaTemp As Range             'variabile temporanea
Const strAvviso As String = "Mossa non consentita!"
_______________________________________________________________________________
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
'
If cellaTemp Is Nothing Then  'se cellaTemp è Nothing la mossa è di partenza se Not Nothing è di arrivo
    If ActiveCell.Value = "" Then  'la cella di partenza non deve essere vuota
        MsgBox strAvviso, vbExclamation, "Dama"
    Else
        Set cellaTemp = ActiveCell
    End If
Else
    If ActiveCell.Interior.ColorIndex = 1 Then 'verifica che la cella di arrivo sia nera
        With ActiveCell
            .Value = cellaTemp.Value
            .Font.ColorIndex = cellaTemp.Font.ColorIndex
        End With
        cellaTemp.ClearContents
        Set cellaTemp = Nothing
    Else
        MsgBox strAvviso, vbExclamation, "Dama"
        Set cellaTemp = Nothing
    End If
End If
Range("A1").Select
'
End Sub

========================================================================
(A seconda dello schermo e delle impostazioni del browser in uso il codice può apparire più o meno in linea, eventualmente per un utilizzo conviene fare il copia-incolla)

Salvare il tutto con l'attivazione delle macro, chiudi e riapri il foglio attivando le macro. Una volta fatto il doppio click su una cella contenente una pedina, facendo un nuovo doppio click su una cella vuota la pedina viene spostata.

Buon riutilizzo!

Nessun commento:

Posta un commento

Converti Minuti in Ore,Minuti

Capita avvolte di dover convertire un numero di minuti nel corrispondente (ore,minuti). Se il valore da convertire si trova nella cella ...