Ir para o conte√ļdo
  • Revista PROGRAMAR: J√° est√° dispon√≠vel a edi√ß√£o #60 da revista programar. Faz j√° o download aqui!

fasantos

Jogo do Galo

Mensagens Recomendadas

fasantos

ūüėé 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


FaSantos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Pessanha24

Posta o código concerteza vais obter ajuda

Pessanha24


Pessanha24"A vida √© mais do que Copy & Paste"<*(((-<<*(((-< <*(((-<<*(((-<N√£o pe√ßas ajuda por PM! A tua d√ļvida vai ter menos aten√ß√£o do que se for postada na sec√ß√£o correcta do f√≥rum!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fasantos

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


FaSantos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Pessanha24

Como est√°s a pensar implementar o jogador autom√°tico?


Pessanha24"A vida √© mais do que Copy & Paste"<*(((-<<*(((-< <*(((-<<*(((-<N√£o pe√ßas ajuda por PM! A tua d√ļvida vai ter menos aten√ß√£o do que se for postada na sec√ß√£o correcta do f√≥rum!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fasantos

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


FaSantos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Pessanha24

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


Pessanha24"A vida √© mais do que Copy & Paste"<*(((-<<*(((-< <*(((-<<*(((-<N√£o pe√ßas ajuda por PM! A tua d√ļvida vai ter menos aten√ß√£o do que se for postada na sec√ß√£o correcta do f√≥rum!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ricafilipe

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.

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site voc√™ aceita os nossos Termos de Uso e Pol√≠tica de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informa√ß√Ķes visite esta p√°gina.