Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

DOCUMENTAZIONE PROGETTO "TRIS"

informatica



DOCUMENTAZIONE PROGETTO "TRIS"


  1. Intestazione:

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:



  1. Analisi del problema:

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:




  1. Progettazione dell'interfaccia utente:

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








  1. Progettazione del programma

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


Hits: 1974
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024