In questa guida spiego come creare in visual basic.net il gioco del classico Tris con windows form. Useremo un solo form.
Create il progetto.
Posizionate sul form 10 bottoni.
9 bottoni disponeteli cercando di creare una matrice 3x3, poichè i simboli X ed O per stabilire la mossa verranno immessi cliccando sui bottoni.
Dovrebbe uscire una cosa del genere, non fate caso allo stile dei bottoni:
Io ho usato questo metodo per capire a chi sta la mossa da fare.
Ho creato una flag, chiamata FlagMossa (impostata a priori su False), una volta cliccato il decimo bottone, inizierà la partita impostando la flag su True e automaticamente verrà immesso come primo simbolo la X.
Quindi cliccando su un qualsiasi bottone della matrice per immettere il proprio segno verrà immessa la X. Dal codice vi accorgerete come.
VBNET Programming
Private Sub b1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b1.Click
If FlagMossa = True And b1.Text = "" Then
b1.Text = "X"
turno.Text = "Turno di " & nome2.Text & "."
FlagMossa = False
ElseIf FlagMossa = False And b1.Text = "" Then
b1.Text = "O"
turno.Text = "Turno di " & nome1.Text & "."
FlagMossa = True
End If
If b1.Text = "X" And b2.Text = "X" And b3.Text = "X" Then
MsgBbox("Ha vinto " & nome1.Text & ".")
ElseIf b1.Text = "X" And b4.Text = "X" And b7.Text = "X" Then
MsgBbox("Ha vinto " & nome1.Text & ".")
ElseIf b1.Text = "X" And b5.Text = "X" And b9.Text = "X" Then
MsgBbox("Ha vinto " & nome1.Text & ".")
ElseIf b1.Text = "O" And b2.Text = "O" And b3.Text = "O" Then
MsgBbox("Ha vinto " & nome2.Text & ".")
ElseIf b1.Text = "O" And b4.Text = "O" And b7.Text = "O" Then
MsgBbox("Ha vinto " & nome2.Text & ".")
ElseIf b1.Text = "O" And b5.Text = "O" And b9.Text = "O" Then
MsgBbox("Ha vinto " & nome2.Text & ".")
End If
NoWin()
Il primo If dice: se FlagMossa è uguale a True e il testo del bottone è vuoto ci immetterò una X. Faccio controllare che il bottone è vuoto, così evito di sovrascrivere una mossa già stabilita in precedenza.
Ad ogni bottone della matrice dovete fare un controllo se la partita è stata vinta da un giocatore o se la partita è finita con nessun vincitore.
Quindi col secondo if andrò a fare questo controllo, molto semplice da capire. Considerate che b1 è il primo bottone della prima linea, b4 della seconda linea eccetera. Come fossero i tasti di un telefonino.
In quel codice è incluso il controllo se la partita è finita e nessuno ha fatto tris, richiamando la funzione NoWin. Useremo questo codice:
VBNET Programming
Public Sub NoWin()
If b1.Text.Any = True And b2.Text.Any = True And b3.Text.Any = True And b4.Text.Any = True
And b5.Text.Any = True And b6.Text.Any = True And b7.Text.Any = True And b8.Text.Any = True
And b9.Text.Any = True Then
MsgBbox("Nessuno ha vinto!")
End If
Sul bottone per far cominciare la partita dobbiamo cambiare la flag impostandola su True.
Io ho anche disabilitato tutti i botton, e abilitati non appena questo bottone venisse cliccato.
VBNET Programming
Private Sub start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles start.Click
FlagMossa = True
b1.Enabled = True
End Sub
Sarebbe inutile scrivere il codice completo, perchè se avete capito il codice che ho scritto, completare il programma non dovrebbe essere un problema. In ogni caso per qualsiasi cosa basta che chiedete.
Bug minori sono presenti.