quarta-feira, 2 de fevereiro de 2011

Jogo do galo (jogador vs jogador)

Nestas aulas, após ter feito o teste de avaliação que é o sistema de Gestão Escolar, estamos a programar jogos.
Hoje, vou apresentar o meu jogo do galo que foi feito com apoio de um site e esta todo comentado para melhor perceber.


Module Module1
    'Modulo --> Trata-se de código em projetos, módulos e procedimentos, de forma que seja 
    'fácil de entender e manter.
    'Uma completa aplicação do Visual Basic é normalmente contidos em um único projeto.
    'Dentro de um projeto, o código é colocado em ficheiros separados chamados de  
    'módulos de código, e dentro de cada módulo, o código do Visual Basic está ainda
    'dividido em auto-procedimentos contidos e reutilizáveis.

    Public Jogador1 As String
    Public Jogador2 As String
    Public Joga_Vez As Integer = 0
    Public PlacarJoga_1 As Integer = 0 ' ira contar o num de vezes que o utilizador 1 ganhou
    Public PlacarJoga_2 As Integer = 0 ' ira contar o num de vezes que o utilizador 1 ganhou

    'picturebox1, 2, 3, 4, 5, 6, 7, 8 e 9 toma valor 3 para não ser confundido com os valores que irá ser futuramente utilizados
    Public PictureBox1 As Integer = 3
    Public PictureBox2 As Integer = 3
    Public PictureBox3 As Integer = 3
    Public PictureBox4 As Integer = 3
    Public PictureBox5 As Integer = 3
    Public PictureBox6 As Integer = 3
    Public PictureBox7 As Integer = 3
    Public PictureBox8 As Integer = 3
    Public PictureBox9 As Integer = 3
    Public Function Draw(ByVal Valor_0_ou_1 As Integer, ByVal PictureBox As String) As System.Drawing.Image
        'verificar se é o 1ºjogador (valor_0_ou_1 = 0 ) ou se é o 2º(valor_0_ou_1 = 0 )
        If Valor_0_ou_1 = 0 Then
            Select Case PictureBox
                Case "PictureBox1" ' se for a picturebox1, ira tomar o valor 0, para demostrar que é o jogador um (circulo)
                    PictureBox1 = 0
                Case "PictureBox2" ' se for a picturebox2, ira tomar o valor 0
                    PictureBox2 = 0
                Case "PictureBox3"
                    PictureBox3 = 0 '...
                Case "PictureBox4"
                    PictureBox4 = 0
                Case "PictureBox5"
                    PictureBox5 = 0
                Case "PictureBox6"
                    PictureBox6 = 0
                Case "PictureBox7"
                    PictureBox7 = 0
                Case "PictureBox8"
                    PictureBox8 = 0
                Case "PictureBox9"
                    PictureBox9 = 0
            End Select

            'Draw ira fikar com a imagem circulo, pois esta a referir-se ao 2º jogador
            'origem da imagem

            Draw = Image.FromFile("I:\jogo\circulo.bmp") 'draw tem como valor retomado picturebox portanto este ira ficar com o caminho para a imagem
            Ganhou(Joga_Vez) ' ira para a função ganhou, como o valor 0 (pois este valor ainda não fui modificado e é a vez do 1ºjogador), para verificar se tem picturebox em linha, coluna ou diagonal
            Joga_Vez = 1     'Para permitir que o outro jogador possa jogar
            Form1.Circulo.Visible = False  'deixa de ser permitido o circulo, pois passa para outro jogador
            Form1.X.Visible = True   'visivel o x (referente ao outro jogador)
            Form1.Label1.Text = Jogador2 & ", é a sua vez"
        Else
            Select Case PictureBox
                Case "PictureBox1"
                    PictureBox1 = 1 ' se for a picturebox1, ira tomar o valor 1, pois sera o jogador 2
                Case "PictureBox2"
                    PictureBox2 = 1 '...
                Case "PictureBox3"
                    PictureBox3 = 1
                Case "PictureBox4"
                    PictureBox4 = 1
                Case "PictureBox5"
                    PictureBox5 = 1
                Case "PictureBox6"
                    PictureBox6 = 1
                Case "PictureBox7"
                    PictureBox7 = 1
                Case "PictureBox8"
                    PictureBox8 = 1
                Case "PictureBox9"
                    PictureBox9 = 1
            End Select

            'Draw ira fikar com a imagem x, pois esta a referir-se ao 2º jogador
            'origem da imagem
            Draw = Image.FromFile("I:\jogo\X.bmp")
            Ganhou(Joga_Vez) ' ira para a função ganhou, para verificar se tem picturebox em linha, coluna ou diagonal
            Joga_Vez = 0 'joga_vez ira tomar o valor 0 para permitir a passagem para o 1ºjogador
            Form1.Circulo.Visible = True 'foi x visibel passa agora a ser circulo visible
            Form1.X.Visible = False
            Form1.Label1.Text = Jogador1 & ", é a sua vez"
        End If
    End Function
    Public Sub liga_desliga(ByVal Valor As Boolean)
        'irá permitir que active ou não as picturesboxs quando ganhar ou quando quiser limpar o tabuleiro

        If Valor = True Then
            Form1.PictureBox1.Enabled = True
            Form1.PictureBox2.Enabled = True
            Form1.PictureBox3.Enabled = True
            Form1.PictureBox4.Enabled = True
            Form1.PictureBox5.Enabled = True
            Form1.PictureBox6.Enabled = True
            Form1.PictureBox7.Enabled = True
            Form1.PictureBox8.Enabled = True
            Form1.PictureBox9.Enabled = True
        Else
            Form1.PictureBox1.Enabled = False
            Form1.PictureBox2.Enabled = False
            Form1.PictureBox3.Enabled = False
            Form1.PictureBox4.Enabled = False
            Form1.PictureBox5.Enabled = False
            Form1.PictureBox6.Enabled = False
            Form1.PictureBox7.Enabled = False
            Form1.PictureBox8.Enabled = False
            Form1.PictureBox9.Enabled = False
        End If
    End Sub
    Public Sub lima_tabuleiro()
        ' irá coloacr os valores todos como era no inicio do programa

        PictureBox1 = 3
        PictureBox2 = 3
        PictureBox3 = 3
        PictureBox4 = 3
        PictureBox5 = 3
        PictureBox6 = 3
        PictureBox7 = 3
        PictureBox8 = 3
        PictureBox9 = 3

        Form1.PictureBox1.Image = Form1.PictureBox_.Image 'irá colocar todas as picturesboxes como a PictureBox_, pois esta não tem nada
        Form1.PictureBox2.Image = Form1.PictureBox_.Image
        Form1.PictureBox3.Image = Form1.PictureBox_.Image
        Form1.PictureBox4.Image = Form1.PictureBox_.Image
        Form1.PictureBox5.Image = Form1.PictureBox_.Image
        Form1.PictureBox6.Image = Form1.PictureBox_.Image
        Form1.PictureBox7.Image = Form1.PictureBox_.Image
        Form1.PictureBox8.Image = Form1.PictureBox_.Image
        Form1.PictureBox9.Image = Form1.PictureBox_.Image
    End Sub
    
Public Sub Ganhou(ByVal Jogador As Integer)
If Jogador = 0 Then ' se for o 1jogador
If PictBox1 = 0 And PictBox2 = 0 And PictBox3 = 0 Then 'linha1
liga_desliga(False) 'liga_desliga ira ser falso, pois assim ira inactivar as picturexboxes para que estas depois de saber quem ganha no continuarem
PlacarJoga_1 = PlacarJoga_1 + 1 'ir colocar no total das cotaes mais um. Por outras palavras, um contador para saber o resultado
Form1.Label5.Text = PlacarJoga_1 'ira escrever o resultado das cotaes
MsgBox("Parabns " & Jogador1 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox4 = 0 And PictBox5 = 0 And PictBox6 = 0 Then 'linha2 ...
liga_desliga(False)
PlacarJoga_1 = PlacarJoga_1 + 1
Form1.Label5.Text = PlacarJoga_1
MsgBox("Parabns " & Jogador1 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox7 = 0 And PictBox8 = 0 And PictBox9 = 0 Then ' linha3 ...
liga_desliga(False)
PlacarJoga_1 = PlacarJoga_1 + 1
Form1.Label2.Text = PlacarJoga_1
MsgBox("Parabns " & Jogador1 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox1 = 0 And PictBox4 = 0 And PictBox7 = 0 Then 'coluna1 ...
liga_desliga(False)
PlacarJoga_1 = PlacarJoga_1 + 1
Form1.Label5.Text = PlacarJoga_1
MsgBox("Parabns " & Jogador1 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox2 = 0 And PictBox5 = 0 And PictBox8 = 0 Then ' coluna2 ...
liga_desliga(False)
PlacarJoga_1 = PlacarJoga_1 + 1
Form1.Label5.Text = PlacarJoga_1
MsgBox("Parabns " & Jogador1 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox3 = 0 And PictBox6 = 0 And PictBox9 = 0 Then 'coluna3 ...
liga_desliga(False)
PlacarJoga_1 = PlacarJoga_1 + 1
Form1.Label5.Text = PlacarJoga_1
MsgBox("Parabns " & Jogador1 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox1 = 0 And PictBox5 = 0 And PictBox9 = 0 Then ' diagonal(1,5,9) ...
liga_desliga(False)
PlacarJoga_1 = PlacarJoga_1 + 1
Form1.Label5.Text = PlacarJoga_1
MsgBox("Parabns " & Jogador1 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox3 = 0 And PictBox5 = 0 And PictBox7 = 0 Then 'diagonal(3, 5, 7) ...
liga_desliga(False)
PlacarJoga_1 = PlacarJoga_1 + 1
Form1.Label5.Text = PlacarJoga_1
MsgBox("Parabns " & Jogador1 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If

 'mesma coisa, mas para o caso do jogador 2
Else
If PictBox1 = 1 And PictBox2 = 1 And PictBox3 = 1 Then
liga_desliga(False)
PlacarJoga_2 = PlacarJoga_2 + 1
Form1.Label6.Text = PlacarJoga_2
MsgBox("Parabns " & Jogador2 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox4 = 1 And PictBox5 = 1 And PictBox6 = 1 Then
liga_desliga(False)
PlacarJoga_2 = PlacarJoga_2 + 1
Form1.Label6.Text = PlacarJoga_2
MsgBox("Parabns " & Jogador2 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox7 = 1 And PictBox8 = 1 And PictBox9 = 1 Then
liga_desliga(False)
PlacarJoga_2 = PlacarJoga_2 + 1
Form1.Label6.Text = PlacarJoga_2
MsgBox("Parabns " & Jogador2 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox1 = 1 And PictBox4 = 1 And PictBox7 = 1 Then
liga_desliga(False)
PlacarJoga_2 = PlacarJoga_2 + 1
Form1.Label6.Text = PlacarJoga_2
MsgBox("Parabns " & Jogador2 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox2 = 1 And PictBox5 = 1 And PictBox8 = 1 Then
liga_desliga(False)
PlacarJoga_2 = PlacarJoga_2 + 1
Form1.Label6.Text = PlacarJoga_2
MsgBox("Parabns " & Jogador2 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox3 = 1 And PictBox6 = 1 And PictBox9 = 1 Then
liga_desliga(False)
PlacarJoga_2 = PlacarJoga_2 + 1
Form1.Label6.Text = PlacarJoga_2
MsgBox("Parabns " & Jogador2 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
If PictBox1 = 1 And PictBox5 = 1 And PictBox9 = 1 Then
liga_desliga(False)
PlacarJoga_2 = PlacarJoga_2 + 1
Form1.Label6.Text = PlacarJoga_2
MsgBox("Parabns " & Jogador2 & ", ganhou.", MsgBoxStyle.Information, "Ganhou")
Exit Sub
End If
If PictBox3 = 1 And PictBox5 = 1 And PictBox7 = 1 Then
liga_desliga(False)
PlacarJoga_2 = PlacarJoga_2 + 1
Form1.Label6.Text = PlacarJoga_2
MsgBox("Parabns " & Jogador2 & ", ganhou.", MsgBoxStyle.Information, "Ganhou!!!")
Exit Sub
End If
End If
Empate()
End Sub
    Public Sub limpa_tudo()

        ' inicializa todo os valores das variaveis ou coloca falso ou sem nada, ...
        Joga_Vez = 0
        PlacarJoga_1 = 0
        PlacarJoga_2 = 0
        lima_tabuleiro()
        liga_desliga(False)
        Form1.Joga1.Text = ""
        Form1.Joga2.Text = ""
        Form1.Label2.Text = "0"
        Form1.Label3.Text = "0"
    End Sub
   
Public Sub Empate() 'ira verificar para cada caso se empate
' verificar se ao contar as picturebox, (5 são 0 e 4 são 1) ou (4 são 0 e 5 são 1)
Dim res As Integer = PictBox1 + PictBox2 + PictBox3 + PictBox4 + PictBox5 + PictBox6 + PictBox7 + PictBox8 + PictBox9
'se for 4 ou 5, (5 ou 4 vezes o valor 1(jogador2), este significa que nem o jogador 1 nem o 2 conseguiram, pois caso tivesses ganhado no tinham terminado o jogo todo ou anterioemnete seriam conantado como victoria)
If res = 5 Or res = 4 Then
placa_emp = placa_emp + 1 'ir colocar no total das cotaes mais um. Por outras palavras, um contador para saber o numero total de empate
Form1.Label7.Text = placa_emp 'ira escrever o resultado das cotaes
MsgBox("Ningum ganhou", MsgBoxStyle.Exclamation, "Empate!!!")
End If
End Sub
End Module
'Fonte:
'http://www.codigofonte.net/scripts/vbnet/jogos/1700_jogo-da-velha-para-duas-pessoas


Public Class Form1

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Form2.Show() 'Irá chamar o form2, para saber o nome dos jogadores e possibilitar clicar nas pictureboxs
    End Sub

    Private Sub picturebox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        'ira permitir distinguir a imagem dependendo do valor do joga_vez e depois desactivar, para que não possa jogar no mesmo local
        PictureBox1.Image = Draw(Joga_Vez, "PictureBox1")
        PictureBox1.Enabled = False
    End Sub

    Private Sub picturebox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click
        'ira permitir distinguir a imagem dependendo do valor do joga_vez e depois desactivar, para que não possa jogar no mesmo local
        PictureBox2.Image = Draw(Joga_Vez, "PictureBox2")
        PictureBox2.Enabled = False
    End Sub

    Private Sub picturebox3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.Click
        'ira permitir distinguir a imagem dependendo do valor do joga_vez e depois desactivar, para que não possa jogar no mesmo local
        PictureBox3.Image = Draw(Joga_Vez, "PictureBox3")
        PictureBox3.Enabled = False
    End Sub

    Private Sub picturebox4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox4.Click
        'ira permitir distinguir a imagem dependendo do valor do joga_vez e depois desactivar, para que não possa jogar no mesmo local
        PictureBox4.Image = Draw(Joga_Vez, "PictureBox4")
        PictureBox4.Enabled = False
    End Sub

    Private Sub picturebox5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox5.Click
        'ira permitir distinguir a imagem dependendo do valor do joga_vez e depois desactivar, para que não possa jogar no mesmo local
        PictureBox5.Image = Draw(Joga_Vez, "PictureBox5")
        PictureBox5.Enabled = False
    End Sub

    Private Sub picturebox6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox6.Click
        'ira permitir distinguir a imagem dependendo do valor do joga_vez e depois desactivar, para que não possa jogar no mesmo local
        PictureBox6.Image = Draw(Joga_Vez, "PictureBox6")
        PictureBox6.Enabled = False
    End Sub

    Private Sub picturebox7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox7.Click
        'ira permitir distinguir a imagem dependendo do valor do joga_vez e depois desactivar, para que não possa jogar no mesmo local
        PictureBox7.Image = Draw(Joga_Vez, "PictureBox7")
        PictureBox7.Enabled = False
    End Sub

    Private Sub picturebox8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox8.Click
        'ira permitir distinguir a imagem dependendo do valor do joga_vez e depois desactivar, para que não possa jogar no mesmo local
        PictureBox8.Image = Draw(Joga_Vez, "PictureBox8")
        PictureBox8.Enabled = False
    End Sub

    Private Sub picturebox9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox9.Click
        'ira permitir distinguir a imagem dependendo do valor do joga_vez e depois desactivar, para que não possa jogar no mesmo local
        PictureBox9.Image = Draw(Joga_Vez, "PictureBox9")
        PictureBox9.Enabled = False
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        'aparecer um caixa de texto a perguntar se tem a certeza que quer sair.
        If MsgBox("Tem a certeza que quer sair?", MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo, "Tem Certeza") = MsgBoxResult.Yes Then
            End
        Else
            Exit Sub
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'ira para a funcão lim_tabuleiro e liga_desligar, pois este quer que limpe o tabuleiro e inicialize novamnete o jogo
        lima_tabuleiro()
        liga_desliga(True)
    End Sub
End Class




Public Class Form2
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' os utilizadores irám colocar os nomes para cada jogadores
        Jogador1 = TextBox1.Text
        Jogador2 = TextBox2.Text

        Form1.Show() 'volta para o form1
        Form1.Circulo.Visible = True 'permite ser visivel o circulo para inicalizar a jogada para o 1ºjogador
        Form1.Label1.Text = Jogador1 & ", é a sua vez."
        Form1.Joga1.Text = Jogador1 & ":"
        Form1.Joga2.Text = Jogador2 & ":"
        Me.Close() 'fechar
        liga_desliga(True) 'permitir que possa ser utilizados as variaveis
    End Sub
End Class