• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

fasantos

Jogo do Galo

10 mensagens neste tópico

:ipool: Boas  sou novo por aqui eu gostava que alguém me ajudasse no jogo que é para entregar ao meu stor na escola.

Eu queria por jogador automático, e  que alguém verificasse potenciais erros....

o trabalho é para entregar 2ª...

ainda sou um bocado nub :wallbash:

e gostava da ajuda de um pro  :)

já tenho quase tudo feito é uma questão de eu enviar a alguém

pf

Imports System.IO.File
Imports System.IO.Path

Public Class Form1

    Const area As Integer = 93
    Const sep As Integer = 10
    Const jog1 As Integer = 1
    Const jog2 As Integer = 10

    Dim jogo(2, 2) As Integer
    Dim jogadas As Integer = 0
    Dim emjogo As Boolean = True
    Dim jogador As Integer = jog1

    Sub desenhajogada(ByVal g As Graphics, ByVal p As Point, ByVal j As Integer)
        Dim credtgrafic As Boolean = False
        If g Is Nothing Then
            g = Panel1.CreateGraphics
            credtgrafic = True
        End If
        Try
            p = MenEcre(p)


            If j = jog1 Then
                Dim cruz As New Bitmap("C:\Users\Fabio\Desktop\inico_jogo_galo\inico_jogo_galo\Imagens\X.gif")

                g.DrawImage(cruz, p.X, p.Y, area, area)
            Else

                Dim bola As New Bitmap("C:\Users\Fabio\Desktop\inico_jogo_galo\inico_jogo_galo\Imagens\O.gif")
                g.DrawImage(bola, p.X, p.Y, area, area)
            End If
        Finally
            If credtgrafic Then
                g.Dispose()
            End If
        End Try

    End Sub

    Private Sub Panel1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown
        posx.Text = e.X.ToString
        posY.Text = e.Y.ToString

        Dim p As New Point(e.X, e.Y)
        p = EcreMen(p)
        If emjogo Then


            If jogo(p.X, p.Y) = 0 Then 'casa vazia
                jogo(p.X, p.Y) = jogador
                desenhajogada(Nothing, p, jogador)
                jogadas += 1

                ' chamada para testar vencedor
                If jogadas > 4 Then
                    If venceu(jogador) Then
                        MessageBox.Show("Venceu")
                        emjogo = False
                    Else
                        If jogadas = 9 Then
                            MessageBox.Show("empate")
                            emjogo = False

                        End If

                    End If

                End If
                If jogador = jog1 Then
                    jogador = jog2
                Else
                    jogador = jog1

                End If
            End If
        End If


    End Sub

    Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
        Dim pen As New Pen(Color.Black, 8)
        Try
            e.Graphics.DrawLine(pen, 100, 0, 100, 310)
            e.Graphics.DrawLine(pen, 200, 0, 200, 310)
            e.Graphics.DrawLine(pen, 0, 100, 310, 100)
            e.Graphics.DrawLine(pen, 0, 200, 310, 200)

            For x As Integer = 0 To 2
                For y As Integer = 0 To 2
                    If jogo(x, y) <> 0 Then
                        Dim p As New Point(x, y)
                        desenhajogada(e.Graphics, p, jogo(x, y))
                    End If
                Next
            Next
        Finally
        End Try
    End Sub
    'entre cordenada matris sai cordenada por posiçao
    Function MenEcre(ByVal men As Point) As Point
        Dim r As New Point
        r.X = (men.X * area) + (men.X * sep)
        r.Y = (men.Y * area) + (men.Y * sep)
        Return r
    End Function
    'enre cordenada em posiçao e sai em matris
    Function EcreMen(ByVal ecr As Point) As Point
        Dim r As New Point
        r.X = ecr.X \ area
        If r.X = 3 Then
            r.X = 2
        End If
        r.Y = ecr.Y \ area
        If r.Y = 3 Then
            r.Y = 2
        End If
        Return r

    End Function

    Function venceu(ByVal jog As Integer) As Boolean
        Return ((jogo(0, 0) = jog AndAlso jogo(1, 0) = jog AndAlso jogo(2, 0) = jog) OrElse _
        (jogo(0, 1) = jog AndAlso jogo(1, 1) = jog AndAlso jogo(2, 1) = jog) OrElse _
        (jogo(0, 2) = jog AndAlso jogo(1, 2) = jog AndAlso jogo(2, 2) = jog) OrElse _
        (jogo(0, 0) = jog AndAlso jogo(0, 1) = jog AndAlso jogo(0, 2) = jog) OrElse _
        (jogo(1, 0) = jog AndAlso jogo(1, 1) = jog AndAlso jogo(1, 1) = jog) OrElse _
        (jogo(2, 0) = jog AndAlso jogo(2, 1) = jog AndAlso jogo(2, 2) = jog) OrElse _
        (jogo(0, 0) = jog AndAlso jogo(1, 1) = jog AndAlso jogo(2, 2) = jog) OrElse _
        (jogo(2, 0) = jog AndAlso jogo(1, 1) = jog AndAlso jogo(2, 2) = jog))


        'Dim t As Integer = jog * 3

        'Return(jogo(0,0) + jogo(1,0) + jogo(2,0)=t) orelse _
        '(jogo(0,1)+ jogo(1,1)+ jogo(2,1)=t) orelse _
        '(jogo(0,2)+jogo(1,2)+ jogo(2,2)=t) orelse _
        '(jogo(0,0)+jogo(0,1)+ jogo(0,2)=t) orelse _
        '(jogo(1,0)+jogo(1,1)+ jogo(1,1)=t) orelse _
        '(jogo(2,0)+ jogo(2,1)+ jogo(2,2)=t) orelse _
        '(jogo(0,0)+(1,1)+ jogo(2,2)=t) orelse _
        '(jogo(2,0)+ jogo(1,1)+ jogo(2,2)=t)


    End Function


    Private Sub Novo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Novo.Click
        Form2.ShowDialog()
        If Form2.DialogResult = Windows.Forms.DialogResult.OK Then
            NomeJog1.Text = Form2.txtJog1.Text
            NomeJog2.Text = Form2.txtJog2.Text

            If Form2.cbxJog1.Text = "X" Then
                jogador = jog1

            Else
                jogador = jog2
            End If
            If Form2.cbxJog2.Text = "X" Then
                jogador = jog1
            Else
                jogador = jog2
            End If

            PecaJog1.Text = Form2.cbxJog1.Text
            PecaJog2.Text = Form2.cbxJog2.Text

            If Form2.chkPrimeiroJog1.Checked = True Then

            End If


        End If

    End Sub

    Private Sub Acerca_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Acerca.Click
        AboutBox1.ShowDialog()

    End Sub

    Private Sub Sair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Sair.Click
        Me.Close()

    End Sub
End Class

----------------------------------------------------------------------------------------------------------------
Public Class Form2

    Private Sub cbxJog1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbxJog1.SelectedIndexChanged

    End Sub

    Private Sub txtJog1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtJog1.TextChanged
      
    End Sub

    Private Sub chkTempo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTempo.CheckedChanged
        nudTempo.Enabled = chkTempo.Checked
        If Not chkTempo.Checked Then
            nudTempo.Value = 0
        End If
    End Sub
   

    Private Sub txtJog2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtJog2.TextChanged


    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    End Sub

    Private Sub chkPrimeiroJog1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPrimeiroJog1.CheckedChanged
        chkPrimeiroJog2.Checked = Not chkPrimeiroJog1.Checked
    End Sub

    Private Sub chkPrimeiroJog2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPrimeiroJog2.CheckedChanged
        chkPrimeiroJog1.Checked = Not chkPrimeiroJog2.Checked
    End Sub
End Class

cumps

Fábio

EDIT: Removido o "urgente" do assunto

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, é só a função do por a jogar humano vs maquina para acrescentar ao jogo.

e aparecer o numero de jogadas de cada player

obg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei bem ao certo, eu tenho no segundo form uma checkbox onde se escolhe se é contra a maquina ou não.

e queria por a funcionar esta parte n sei mesmo fazer

obg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tive de implementar o jogo do 4 em linha com jogador automático em C, e utilizei o algoritmo Mini-max com cortes alfa-beta.

Em que basicamente desenvolves uma árvore de jogo com todas as situações de jogo possíveis. Tentando através de uma busca nessa árvore obter a melhor jogada possível.

Por exemplo para a situação:

x|-|-|

-|-|-|

-|-|-|

No nível de profundidade um (1) serão criados os seguintes tabuleiros de jogo

x|o|-| 

-|-|-|

-|-|-|

x|-|o|

-|-|-|

-|-|-|

x|-|-|

o|-|-|

-|-|-|

x|-|-|

-|o|-|

-|-|-|

x|-|-|

-|-|o|

-|-|-|

x|-|-|

-|-|-|

o|-|-|

x|-|-|

-|-|-|

-|o|-|

x|-|-|

-|-|-|

-|-|o|

Após aplicares a função heurística consegues saber qual o melhor tabuleiro a escolher. É claro que com um nível de profundidade terás um jogador "burro", mesmo para o jogo do galo. Em profundidade dois (2) corresponde a um tabuleiro do nível um (dos 8 desenvolvidos em nível um) com uma peça do jogador "x" neste caso. E o interesse é conseguir fazer um jogador que consiga "ver" o maior numero de jogadas à frente possiveis. Para melhorar a performance do algoritmo utilizam-se os "cortes" em que ramos da árvore que levem à derrota ou a situações muito desfavoráveis sejam ignorados, não sendo desenvolvidos. Estes cortes tornam-se importantes em jogos com árvores muito grandes mas penso que num jogo de quatro em linha não será necessária grande preocupação com isso.

Existe muita documentação online basta pesquisares um pouco. 

Vou-te deixar aqui um link com algum conteúdo que tinha espero que te ajude:

http://www.box.net/shared/9alli0ahq5

Pessanha24

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu criei o jogo mas player vs player.

Estou a pensar criar contra o PC e já tenho umas ideias.

Verificas cada jogada do player e depois com um random metes o pc a jogar nas "caixinhas" que faltam.

Assim nunca é igual.

E para o PC não ser estúpido, se faltar uma peça para o jogador ganhar metes o pc a cortar.

Dá trabalho e o código vai ser grande, mas acho que é a única maneira de criar um BOT inteligente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora