Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Vorrei implementare in Visual Basic il gioco dell'impiccato. Il problema in esame non è complesso, ma richiede un bel po' di
codice. Nel nostro esempio daremo al giocatore fino a 10 possibilità e le parole saranno scelte in maniera casuale dal computer da un file di testo di nome PAROLE.TXT presente nella stessa cartella dove si trova il programma. Prima di cominciare ci si assicuri di avere tale file o crearlo ed inserirlo nella cartella del programma.
Cominciamo
disegnando l'interfaccia utente per il giocatore.
Definita l'interfaccia utente, spieghiamone rapidamente il funzionamento, per comprendere cosa dovrà fare il codice. All'inizio della partita il giocatore premerà il pulsante "Nuova parola" e sarà mostrata la frase in maniera nascosta, ovvero ogni carattere della parola sarà sostituito con un trattino. Il giocatore di tale frase capirà soltanto la lunghezza ed il numero di parole di cui si compone; per il resto vedrà soltanto una serie di trattini. Vediamo le singole routine di cui il codice si compone:
Innanzitutto definiamo alcuni dati globali all'interno del form.
Alla riga 2 abbiamo definito la costante MAXTENTATIVI che indica il numero massimo di tentativi concessi per indovinare la frase. Alla riga 3 abbiamo la variabile TENTATIVI che conterrà il numero di tentativi finora fatti per indovinare la frase. Il numero andrà da 0 a MAXTENTATIVI. Abbiamo definito anche una Collection di nome LISTAPAROLE che conterrà tutte le frasi estratte dal file. Per semplificare il processo, inizialmente tutte le frasi del file saranno lette e memorizzate nella Collection. Man mano avanti con il gioco le frasi saranno estratte in maniera casuale dalla Collection. Alla riga 5 abbiamo la variabile PAROLACERCATA che ospiterà la parola (frase) ricercata durante il gioco.
All'esecuzione dell'eventoLoad del form verranno eseguite alcune inizializzazioni dei controlli del form e delle variabili. Alla riga 8 abbiamo dichiarato la variabile FILENR che conterrà il numero dell'handle del file da cui leggere i dati. Alla riga 9 dichiariamo la variabile BUFFER che servirà come buffer di lettura dal file contenente le frasi. Prima di poter utilizzare la Collection LISTAPAROLE è necessario istanziare la classe mediante l'utilizzo della parola chiave New (riga 10). Nelle righe dal 10 al 15 vengono inizializzati i controlli sul form: viene azzerata la ListBox Lettere, viene preparata la Label TentativiRimasti scrivendo in essa il numero massimo di tentativi MAXTENTATIVI, viene azzerata la Label PAROLA che conterrà la frase da indovinare ed infine viene posta l'area Shape AreaAttuale alle stesse coordinate dell'altra area AreaCompleta. Alle righe da 16 a 22 viene effettuata l'apertura, la lettura e chiusura del file. Ogni riga del file viene scritta (in maiuscolo) all'interno della Collection.
Poiché abbiamo istanziato la Collection LISTAPAROLE è consigliabile effettuare la deallocazione della Collection alla chiusura del form. L'evento Terminate è l'ultima routine eseguita prima dell'effettivo scaricamento del form dalla memoria.
La riga 26 effettua lo scaricamento della Collection LISTAPAROLE dalla memoria.
Il click sopra il pulsante NuovaParola effettuerà la scelta casuale di una frase dalla Collection, nasconderà la frase immettendo trattini al posto delle lettere alfabetiche e reinizializzerà i controlli. All'interno di questa routine abbiamo dichiarato tre variabili: PAROLACASUALE indicherà il numero casuale della frase da estrarre dalla Collection, CONTA servirà per effettuare dei cicli ripetitivi e PAROLANASCOSTA sarà uno spazio temporaneo per preparare la frase da indovinare. Alla riga 33 viene inizializzato il generatore di numeri casuali ed alla riga successiva viene scelta una frase casuale compresa tra 1 ed il numero complessivo di frasi contenute nella Collection. Il numero della frase viene memorizzato nella variabile PAROLACASUALE. Alla riga 35 viene memorizzata nella variabile globale PAROLACERCATA la frase da indovinare. Nelle righe comprese tra 36 e 45 viene creata la frase nascosta. Prima
viene azzerata la variabile PAROLANASCOSTA, e man mano viene estratto
un carattere dalla frase PAROLACERCATA e memorizzato in PAROLACASUALE.
Se il carattere estratto è compreso nell'insieme delle lettere
alfabetiche esso viene sostituito con un trattino, altrimenti non viene
toccato. Così, man mano viene generata la frase in maniera nascosta
e memorizzata in PAROLANASCOSTA. Nelle righe tra 46 e 57 vengono reinizializzati i controlli.
Prepariamo una funzione booleana di nome TrovaLettera. Essa effettua la sostituzione dei trattini della frase nascosta con la lettera scelta e passata come parametro. Il valore che la funzione restituisce indica se la frase da indovinare conteneva almeno un'occorrenza della lettera ricercata. Alla riga 62 viene dichiarata la variabile PAROLANASCOSTA che conterrà la frase nascosta, contenuta nella Label Parola. Alla riga 65 inizia un ciclo che controlla tutte le lettere della frase originale memorizzata nella variabile PAROLACERCATA. Se la lettera in analisi è uguale a quella ricercata (riga 66), viene sostituito il trattino della frase nascosta con la lettera ricercata (riga 67) e viene impostato a True il valore TrovaLettera che sarà restituito all'uscita della funzione (riga 68). Alla riga 71, infine, viene aggiornata la Label Parola con la nuova frase.
Nel momento in cui l'utente clicca due volte rapidamente sopra una lettera della ListBox viene effettuato il controllo di tale lettera. Se essa esiste, saranno scoperte le occorrenze della lettera, altrimenti il numero di tentativi incrementerà di 1. La lettera sarà in ogni caso elimininata dalla ListBox Lettere. Alla riga 77 viene chiamata la funzione TrovaLettera con la lettera al momento selezionata, indicata dalla proprietà ListIndex della ListBox. Il valore restituito dalla funzione TrovaLettera viene memorizzato nella variabile LETTERAOK. Se è stata trovata almeno un'occorrenza della lettera cercata viene verificato se la nuova frase (riga 81), con le lettere scoperte, è uguale alla frase originale PAROLACERCATA. In tal caso il giocatore ha completato il gioco. Sarà mostrato un messaggio e verranno bloccati i controlli Lettere, Soluzione e Arrendo. Se, invece, la ricerca della lettera specificata dà esito negativo (riga 87), il giocatore ha commesso un errore; viene aumentato il valore di TENTATIVI (riga 88) e viene aggiornata la posizione dell'area AreaAttuale, spostandola di una certa misura, data dalla divisione dell'area complessiva per il numero massimo di tentativi. Alla riga 94 viene aggiornata la Label che indica il numero di tentativi rimasti. Se il numero di tentativi effettuati è uguale al numero massimo di tentativi concessi, la partita termina, come se il giocatore si arrendesse (riga 95).
Il click sopra il pulsante Arrendo provoca la perdita della partita, la visualizzazione di un messaggio (riga 101) ed il blocco dei soliti controlli Lettere, Soluzione e Arrendo. Alla riga 105 viene mostrata la frase da indovinare (PAROLACERCATA).
L'ultima routine da vedere è il click sopra il pulsante Soluzione. Esso provoca la visualizzazione di una finestra che chiede la soluzione secondo il giocatore. Se il messaggio immesso è uguale alla frase ricercata (riga) 109, viene mostrata la frase, appare un messaggio che indica la vittoria e sono bloccati i controlli Lettere, Soluzione ed Arrendo. Se la soluzione proposta dal giocatore è sbagliata, la partita termina immediatamente, come se il giocatore si arrendesse (riga 116). Il progetto termina qui. Rimane solo di provarlo. All'avvio del programma appare soltanto un form tutto bloccato. È attivo soltanto il pulsante la cui Caption indica "Nuova parola". Provando a cliccarlo inizia una nuova parita, con un frase scelta a caso dal file PAROLE.TXT. Si attiva la ListBox Lettere ed i pulsanti "Mi arrendo" e "Propongo la soluzione". Man mano che il gioco procede, le lettere dalla ListBox spariscono. Se la lettera scelta compare nella frase da indovinare essa sarà mostrata. In caso contrario il numero di tentativi rimasti diminuisce di 1 e la barra gialla alla sinistra scende. Se, entro il numero massimo di tentativi concessi, il giocatore indovina la frase apparirà il messaggio mostrato nella figura 4. Se il giocatore si arrende, non riesce ad indovinare la frase nascosta entro il numero di tentativi messi a disposizione, o sbaglia la soluzione, apparirà il messaggio mostrato nella figura 5. Nel momento in cui l'utente clicca sul pulsante "Propongo la soluzione" gli viene presentata la finestra mostrata nella figura 6. Viene richiesta la soluzione. Se la frase inserita è quella corretta apparirà un messaggio che indica la vittoria (figura 4), altrimenti la partita si chiuderà con una sconfitta (figura 5).
|
Il gioco non offre alcuna tecnica particolare. È dedicata soltanto una particolare cura sugli elementi che compongono l'interfaccia utente. Non è un progetto ambizioso, ma può essere uno spunto per
qualche altro progetto. Fibia
FBI
|
Torna all'introduzione delle Richieste dei lettori |