![]() | ![]() |
|
|
DOCUMENTAZIONE PROGETTO "TRIS"
Testo dell'esercitazione:
Si realizzi un programma in ambiente MS Visual Basic 6.0 che implementi il gioca del tris.
Questa versione prevede la presenza di due giocatori distinti.
Componenti:
Brachino Marco, Fulgoni Paolo, Marchionni Marco, Mastracco Fabio.
Data di inizio:
Data di fine:
Analisi del problema:
Cliccando su una casella già segnata non succede nulla.
E' possibile annullare l'ultima mossa e ripeterla.
Il vincitore è colui che raggiunge il punteggio di 10 punti, dopodiché si può decidere se incominciare una nuova partita o uscire dal programma.
Abbiamo scelto di utilizzare i bottoni piuttosto che le caselle di testo perché graficamente più accattivanti e più semplici da gestire.
Nella matrice dello schema il valore zero corrisponde alla casella vuota, l'1 alla croce ( giocatore 1 ), mentre il valore 2 corrisponde al cerchio ( giocatore 2 ).
Obiettivi:
Creare un programma che permetta di giocare a tris uno contro uno.
Interfaccia:
frmPrincipale |
||||
|
cmdCasella |
|
|
|
|
|
Elenco proprietà |
|
|
|
|
|
enabled |
False |
|
|
|
font |
Times New Roman, 28 |
|
|
|
index |
Da 0 a 8 |
|
|
|
caption |
|
|
|
Elenco eventi |
|
|
|
|
|
click |
in base al giocatore corrente, mette il segno sul bottone, imposta il valore nella matrice, predispone l'annullamento della mossa, controlla se è stato fatto un tris e passa il comando all'altro giocatore |
|
|
|
|
|
|
mnuNuovo |
|
|
|
|
|
Elenco eventi |
|
|
|
|
|
click |
Richiama la routine nuovo |
|
|
|
|
|
|
mnuEsci |
|
|
|
|
|
Elenco eventi |
|
|
|
|
|
click |
Esce dal programma |
|
|
|
|
|
|
mnuAnnulla |
|
|
|
|
|
Elenco eventi |
|
|
|
|
|
click |
Annulla l'ultima mossa nello schema e nella matrice; imposta il prossimo giocatore l'ultimo che ha fatto la mossa |
|
|
|
|
|
|
mnuRipeti |
|
|
|
|
|
Elenco eventi |
|
|
|
|
|
click |
Ripete l'ultima mossa nello schema e nella matrice; imposta il prossimo giocatore l'ultimo che fatto la mossa; non consente di ripetere la mossa |
|
|
|
|
|
|
frmPunteggi |
|
|
|
|
|
Elenco proprietà |
|
|
|
|
|
caption |
Punteggi |
|
|
|
font |
Book Antiqua |
|
|
|
|
|
|
txtP1, txtP2 |
|
|
|
|
|
Elenco proprietà |
|
|
|
|
|
font |
Book Antiqua |
|
|
|
text |
|
|
|
|
enabled |
False |
|
label1, label2 |
|
|
|
|
|
Elenco proprietà |
|
|
|
|
|
caption |
Giocatore 1, Giocatore 2 |
|
|
|
|
|
|
lblP1, lblP2 |
|
|
|
|
|
Elenco proprietà |
|
|
|
|
|
caption |
|
|
|
|
font |
Book Antiqua |
|
|
|
|
|
|
lblStato |
|
|
|
|
|
Elenco proprietà |
|
|
|
|
|
caption |
Scegliere nuova partita per giocare |
|
|
|
font |
Book Antiqua |
|
|
|
|
|
Variabili globali
P1, P2, giocatore, inizia, giocatore1, giocatore2, ultima, X, Y
Routine
a) cmdCasella_Click() : inserisce i simboli
b) Public Sub Nuovo() : consente di iniziare una partita
c) mnuEsci_Click(): consente di uscire dal programma
d) mnuAnnulla_Click(): permette di annullare l'ultima mossa
e) mnuRipeti_Click(): permette di ripetere la mossa precedentemente annullata
f) mnuNuovo_Click(): richiama la routine Nuovo
g) Public Sub Converti: trova le coordinate sulla matrice
h) Public Sub Converti2: date le coordinate restituisce il numero del bottone corrispondente
i) Public Sub Controllo(): controlla la matrice e individua i tris
Listato VB:
'Dichiarazione variabili generali:
'punteggi
Dim P1 As Byte, P2 As Byte
'schema della partita
Dim schema(3, 3) As Byte
'giocatore corrente
Dim giocatore As Byte
'giocatore che inizia
Dim inizia As Byte
'coordinate
Dim X As Byte, Y As Byte
'nomi dei giocatori
Dim giocatore1, giocatore2 As String
'ultima mossa (primo numero=giocatore, secondo=riga, terzo=colonna)
Dim ultima As String
Private Sub cmdCasella_Click(Index As Integer)
'Gestione errori
On Error GoTo ErrorHandler
'esegue il codice solo se la casella non era gia stata usata
If cmdCasella(Index).Caption = "" Then
'in base al giocatore corrente, mette il segno sul bottone,
'imposta il valore nella matrice, predispone l'annullamento
'della mossa, controlla se è stato fatto un tris e passa il
'comando all'altro giocatore
If giocatore = 1 Then
cmdCasella(Index).Caption = "X"
Converti (Index)
schema(X, Y) = 1
ultima = "1" & LTrim(Str(X)) & LTrim(Str(Y))
mnuAnnulla.Enabled = True
mnuRipeti.Enabled = False
Controllo
giocatore = 2
lblStato.Caption = "Tocca al giocatore 2"
Else
cmdCasella(Index).Caption = "O"
Converti (Index)
schema(X, Y) = 2
ultima = "2" & LTrim(Str(X)) & LTrim(Str(Y))
mnuAnnulla.Enabled = True
mnuRipeti.Enabled = False
Controllo
giocatore = 1
lblStato.Caption = "Tocca al giocatore 1"
End If
End If
'Gestione errori
Exit_sub:
Exit Sub
ErrorHandler:
MsgBox "Errore numero " & Err.Number & "(" & Err.Description & ")" & " in " & Err.Source
Resume Exit_sub
End Sub
Private Sub mnuAnnulla_Click()
'Gestione errori
On Error GoTo ErrorHandler
'a=riga b=colonna della casella da annullare
Dim a As Byte, b As Byte
'annulla l'ultima mossa nello schema e nella matrice
a = Val(Mid(ultima, 2, 1))
b = Val(Mid(ultima, 3, 1))
cmdCasella(Converti2(a, b)).Caption = ""
schema(a, b) = 0
'imposta il prossimo giocatore l'ultimo che ha fatto la mossa
If giocatore = 1 Then
giocatore = 2
Else
giocatore = 1
End If
lblStato.Caption = "Tocca al giocatore" & Str(giocatore)
'consente di ripetere la mossa
mnuRipeti.Enabled = True
'toglie la possibilità di annullare nuovamente la mossa
mnuAnnulla.Enabled = False
'Gestione errori
Exit_sub:
Exit Sub
ErrorHandler:
MsgBox "Errore numero " & Err.Number & "(" & Err.Description & ")" & " in " & Err.Source
Resume Exit_sub
End Sub
Private Sub mnuEsci_Click()
'esci dal programma
End
End Sub
Private Sub mnuNuovo_Click()
'richiama la routine Nuovo
Nuovo
End Sub
Public Sub Controllo()
'controlla la matrice e individua i tris
'Gestione errori
On Error GoTo ErrorHandler
'contatori
Dim i As Byte, c As Byte, z As Byte
'risultato
Dim risultato As Integer
'vincitore(1 o 2) o pareggio (3)
Dim vinpar As Byte
'risposta alla domanda finale
Dim risposta As String
'azzera il risultato
risultato = 0
'controlla se sono state usate tutte le caselle disponibili
vinpar = 3
For c = o To 2
For i = 0 To 2
If schema(c, i) = 0 Then
vinpar = 0
End If
Next i
Next c
'controlla se ci sono dei tris nelle righe
For c = 0 To 2
For i = 0 To 2
If schema(c, i) = 1 Then
risultato = risultato + 1
ElseIf schema(c, i) = 2 Then
risultato = risultato - 1
End If
Next i
If risultato = 3 Then
vinpar = 1
ElseIf risultato = -3 Then
vinpar = 2
End If
risultato = 0
Next c
'controlla se ci sono dei tris nelle colonne
For c = 0 To 2
For i = 0 To 2
If schema(i, c) = 1 Then
risultato = risultato + 1
ElseIf schema(i, c) = 2 Then
risultato = risultato - 1
End If
Next i
If risultato = 3 Then
vinpar = 1
ElseIf risultato = -3 Then
vinpar = 2
End If
risultato = 0
Next c
'controlla se ci sono dei tris nella diagonale principale
For c = 0 To 2
If schema(c, c) = 1 Then
risultato = risultato + 1
ElseIf schema(c, c) = 2 Then
risultato = risultato - 1
End If
Next c
If risultato = 3 Then
vinpar = 1
ElseIf risultato = -3 Then
vinpar = 2
End If
risultato = 0
'controlla se ci sono dei tris nella diagonale secondaria
For c = 0 To 2
If schema(2 - c, c) = 1 Then
risultato = risultato + 1
ElseIf schema(2 - c, c) = 2 Then
risultato = risultato - 1
End If
Next c
If risultato = 3 Then
vinpar = 1
ElseIf risultato = -3 Then
vinpar = 2
End If
risultato = 0
Select Case vinpar
'vittoria del giocatore 1
Case 1
'messaggio
MsgBox "HAI STRAVINTO" & vbCrLf & "DAMMI IL CINQUE" & vbCrLf & "HAI VINTO" & vbCrLf & "HAI VINTO"
'aggiorna i punteggi
P1 = P1 + 1
txtP1.Text = Str(P1)
'determina il giocatore che inizia la prossima partita
If inizia = 1 Then
inizia = 2
giocatore = 2
Else
inizia = 1
giocatore = 1
End If
'azzera le caselle
For i = 0 To 8
cmdCasella(i).Caption = ""
Next i
'azzera la matrice
For i = 0 To 2
For z = 0 To 2
schema(i, z) = 0
Next z
Next i
'vittoria del giocatore 2
Case 2
'messaggio
MsgBox "HAI STRAVINTO" & vbCrLf & "DAMMI IL CINQUE" & vbCrLf & "HAI VINTO" & vbCrLf & "HAI VINTO"
'aggiorna i punteggi
P2 = P2 + 1
txtP2.Text = Str(P2)
'determina il giocatore che inizia la prossima partita
If inizia = 1 Then
inizia = 2
giocatore = 2
Else
inizia = 1
giocatore = 1
End If
'azzera le caselle
For i = 0 To 8
cmdCasella(i).Caption = ""
Next i
'azzera la matrice
For i = 0 To 2
For z = 0 To 2
schema(i, z) = 0
Next z
Next i
'pareggio
Case 3
'visualizza il messaggio
MsgBox "AVETE PAREGGIATO!!!"
'dermina il giocatore che inizerà la prossima partita
If inizia = 1 Then
inizia = 2
giocatore = 2
Else
inizia = 1
giocatore = 1
End If
'azzera le caselle
For i = 0 To 8
cmdCasella(i).Caption = ""
Next i
'azzera le matrici
For i = 0 To 2
For z = 0 To 2
schema(i, z) = 0
Next z
Next i
End Select
'se è stato raggiunto il punteggio limite (10 punti) visualizza i complimenti
If P1 = 10 Then
MsgBox "COMPLIMENTI " & giocatore1 & "!!!" & vbCrLf & "HAI SOPRAFFATTO IL TUO AVVERSARIO!" & vbCrLf & "HAI CONQUISTATO LA GLORIA, SARAI RICORDATO NEI SECOLI DEI SECOLI!" & vbCrLf & "VERRAI RICORDATO NEGLI ANNALI DEL GIOCO DEL TRIS!!!!"
'consente di cominciare una nuova partita
risposta = MsgBox("Vuoi cominciare una nuova partita?", vbYesNo + vbQuestion + vbDefaultButton1, "Nuova partita?")
If risposta = vbYes Then
Nuovo
Else
MsgBox "E' STATO BELLO, FINCHE' E' DURATO!" & vbCrLf & "MA ADESSO VATTENE!!!"
End
End If
ElseIf P2 = 10 Then
MsgBox "COMPLIMENTI " & giocatore2 & "!!!" & vbCrLf & "HAI SOPRAFFATTO IL TUO AVVERSARIO!" & vbCrLf & "HAI CONQUISTATO LA GLORIA, SARAI RICORDATO NEI SECOLI DEI SECOLI!" & vbCrLf & "VERRAI RICORDATO NEGLI ANNALI DEL GIOCO DEL TRIS!!!!"
'consente di cominciare una nuova partita
risposta = MsgBox("Vuoi cominciare una nuova partita?", vbYesNo + vbQuestion + vbDefaultButton1, "Nuova partita?")
If risposta = vbYes Then
Nuovo
Else
MsgBox "E' STATO BELLO, FINCHE' E' DURATO!" & vbCrLf & "MA ADESSO VATTENE!!!"
End
End If
End If
'Gestione errori
Exit_sub:
Exit Sub
ErrorHandler:
MsgBox "Errore numero " & Err.Number & "(" & Err.Description & ")" & " in " & Err.Source
Resume Exit_sub
End Sub
Public Sub Converti(n As Byte)
'Gestione errori
On Error GoTo ErrorHandler
'dato n, trova le coordinate nella matrice corrispondenti al bottone n
X = n \ 3
Y = n Mod 3
'Gestione errori
Exit_sub:
Exit Sub
ErrorHandler:
MsgBox "Errore numero " & Err.Number & "(" & Err.Description & ")" & " in " & Err.Source
Resume Exit_sub
End Sub
Public Function Converti2(a, b As Byte)
'Gestione errori
On Error GoTo ErrorHandler
'date le coordinate restituisce il numero del bottone corrispondente
Converti2 = a * 3 + b
'Gestione errori
Exit_sub:
Exit Function
ErrorHandler:
MsgBox "Errore numero " & Err.Number & "(" & Err.Description & ")" & " in " & Err.Source
Resume Exit_sub
End Function
Private Sub mnuRipeti_Click()
'Gestione errori
On Error GoTo ErrorHandler
'a=riga b=colonna della casella da annullare
'c=giocatore che ha fatto la mossa
Dim a As Byte, b As Byte, c As Byte
'ripete l'ultima mossa nello schema e nella matrice
a = Val(Mid(ultima, 2, 1))
b = Val(Mid(ultima, 3, 1))
c = Val(Mid(ultima, 1, 1))
If c = 1 Then
cmdCasella(Converti2(a, b)).Caption = "X"
Else
cmdCasella(Converti2(a, b)).Caption = "O"
End If
schema(a, b) = c
'imposta il prossimo giocatore l'ultimo che ha fatto la mossa
If giocatore = 1 Then
giocatore = 2
Else
giocatore = 1
End If
lblStato.Caption = "Tocca al giocatore" & Str(giocatore)
'non consente di ripetere la mossa
mnuRipeti.Enabled = False
'consente di annullare nuovamente la mossa
mnuAnnulla.Enabled = True
'Gestione errori
Exit_sub:
Exit Sub
ErrorHandler:
MsgBox "Errore numero " & Err.Number & "(" & Err.Description & ")" & " in " & Err.Source
Resume Exit_sub
End Sub
Public Sub Nuovo()
'Gestione errori
On Error GoTo ErrorHandler
'Dichiarazione variabili:
'contatore
Dim i, c As Byte
'abilita le caselle e le cancella
For i = 0 To 8
cmdCasella(i).Enabled = True
cmdCasella(i).Caption = ""
Next i
'azzeramento punteggi
P1 = 0
P2 = 0
'azzera la matrice
For i = 0 To 2
For c = 0 To 2
schema(i, c) = 0
Next c
Next i
'abilita le caselle dei puntaggi
txtP1.Enabled = True
txtP2.Enabled = True
'azzera le caselle dei punteggi
txtP1.Text = " 0"
txtP2.Text = " 0"
'chiede i nomi dei giocatori e li inserisce nelle etichette solo se
'la lunghezza non supera i 15 caratteri
Do
giocatore1 = InputBox("Inserire il nome del giocatore 1 (max 15 caratteri)")
Loop Until Len(giocatore1) < 16 And Len(giocatore1) > 0
Do
giocatore2 = InputBox("Inserire il nome del giocatore 2 (max 15 caratteri)")
Loop Until Len(giocatore2) < 16 And Len(giocatore2) > 0
lblP1.Caption = giocatore1
lblP2.Caption = giocatore2
'imposta il giocatore corrente e quello iniziale a 1
giocatore = 1
inizio = 1
'cambio lo stato
lblStato.Caption = "Tocca al giocatore 1 "
'Gestione errori
Exit_sub:
Exit Sub
ErrorHandler:
MsgBox "Errore numero " & Err.Number & "(" & Err.Description & ")" & " in " & Err.Source
Resume Exit_sub
End Sub
Piano di test
Dati ingresso |
Uscita prevista |
Uscita reale |
Tris su una riga |
Vincita |
Vincita |
Tris su una colonna |
Vincita |
Vincita |
Tris sulla diagonale principale |
Vincita |
Vincita |
Tris sulla diagonale secondaria |
Vincita |
Vincita |
Pareggio |
Pareggio |
Pareggio |
Conclusioni:
Il programma è stato realizzato senza particolari problemi. Il funzionamento è corretto e non sono stati rilevati bug.
GESTIONE DEGLI ERRORI
All' interno della nostra applicazione, abbiamo inserito una parte di codice atta alla gestione degli errori. Si tratta un procedimento che al riconoscimento di un errore attiva una msgbox che informa l'utente dell'errore in cui è incorso facendo interrompere l'esecuzione della routine interessata; evitando così che il programma vada in crash. Esso è stato inserito in ogni routine componente il nostro programma.
Esempio:
Private Sub cmdEsci_Click()
On Error GoTo ErrorHandler
'esce
End
Exit_sub:
Exit Sub
ErrorHandler:
MsgBox " Errore numero " & Err.Number & " ( " & Err.Description & " ) in " & Err.Source, vbCritical
Resume Exit_sub
End Sub
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2025