1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

AJUDA URGENTISSIMO!(trabalho VB)

Discussão em 'Programação' iniciada por _flash_, 8 de Dezembro de 2007. (Respostas: 13; Visualizações: 916)

  1. _flash_

    _flash_ Power Member

    boa noite, estou a fazer o jogo do galo para a minha disciplina de programação, para entregar até às 8h da manhã.

    surgiume um grande problema, utilizei um contador de jogadas para alternar entre jogadores (quando é um numero par=jogador 2 quando é um numero impar=jogador 1) mas acontece que na primeira jogada o programa n altera a o jogador, ou seja o jogador um joga 2 vezes depois o jogador 2 depois o 1 depois o 2 e assim socessivamente.

    alguma ideia de qual seria o meu erro?

    agradecia imenso a vossa ajuda.
     
  2. AliFromCairo

    AliFromCairo Power Member

    Boas, se puderes, coloca o modo como estás a inicializar esse contador. Alternativamente, podias ter uma variável que variava entre 0 e 1 (primeiro e segundo jogador). Bastava por exemplo, teres uma variável jogador inicializada a 0 (primeiro jogador), e no final de cada turno, utilizavas aritmética modular para mudar de jogador (i.e. jogador = (jogador + 1) % 2).

    Espero que ajude.
     
  3. _flash_

    _flash_ Power Member

    inicializo a variavel que conta as jogadas a 1 e depois para ver que jogador é tenho o seguinte código:
    If jog Mod 2 = 0 Then 'se o numero de jogada for par é porque é o jogador 2 a jogar'
    label11.Caption = "X" 'escreve o X no quadrado clicado'
    J1.ForeColor = vbBlack 'altera a vez do jogador'
    J2.ForeColor = vbRed 'altera a vez do jogador'
    Else 'se o numero de jogada for impar é porque é o jogador 1 a jogar'
    J2.ForeColor = vbBlack 'altera a vez do jogador'
    J1.ForeColor = vbRed 'altera a vez do jogador'
    label11.Caption = "O" 'escreve o O no quadrado clicado'
    End If
     
  4. balute

    balute Power Member

    Tenta inicializar a variável a 0
     
  5. _flash_

    _flash_ Power Member

    se inicializar a 0 é o jogador 2 que joga duas vezes
     
  6. AliFromCairo

    AliFromCairo Power Member

    Boas, coloca um pouco mais de código, nomeadamente na forma como estás a actualizuar as jogadas. Podes também experimentar utilizar o método que sugeri no post acima.
     
  7. _flash_

    _flash_ Power Member

    Código da jogada:



    Código:
     
    If jog = 2 And J1.ForeColor = vbBlack Then
        J1.ForeColor = vbRed
        J2.ForeColor = vbBlack
    ElseIf jog = 1 And J1.ForeColor = vbRed Then
        J1.ForeColor = vbBlack
        J2.ForeColor = vbRed
    End If
    If label11.Caption = "" Then    'se o quadrado estiver desocupado faz:'
        If jog Mod 2 = 0 Then       'se o numero de jogada for par é porque é o jogador 2 a jogar'
            label11.Caption = "X"   'escreve o X no quadrado clicado'
            J1.ForeColor = vbBlack  'altera a vez do jogador'
            J2.ForeColor = vbRed    'altera a vez do jogador'
        Else                        'se o numero de jogada for impar é porque é o jogador 1 a jogar'
            label11.Caption = "O"   'escreve o O no quadrado clicado'
            J2.ForeColor = vbBlack  'altera a vez do jogador'
            J1.ForeColor = vbRed    'altera a vez do jogador'
        End If
        jog = jog + 1
    Else
        ffi = MsgBox("Ja jogaram nesse quadrado, escolha outro!", , "batota")
    End If
    



    Código de todo o quadrado:



    Código:
     If label11.Caption = "" Then    'se o quadrado estiver desocupado faz:'
        If jog Mod 2 = 0 Then       'se o numero de jogada for par é porque é o jogador 2 a jogar'
            label11.Caption = "X"   'escreve o X no quadrado clicado'
            J1.ForeColor = vbBlack  'altera a vez do jogador'
            J2.ForeColor = vbRed    'altera a vez do jogador'
        Else                        'se o numero de jogada for impar é porque é o jogador 1 a jogar'
            label11.Caption = "O"   'escreve o O no quadrado clicado'
            J2.ForeColor = vbBlack  'altera a vez do jogador'
            J1.ForeColor = vbRed    'altera a vez do jogador'
        End If
        jog = jog + 1
    Else
        ffi = MsgBox("Ja jogaram nesse quadrado, escolha outro!", , "batota")
    End If
    If label11.Caption = "X" And label12.Caption = "X" And Label13.Caption = "X" Then
        win = 1
        Line24.Visible = True
    ElseIf Label21.Caption = "X" And Label22.Caption = "X" And Label23.Caption = "X" Then
        win = 1
        Line25.Visible = True
    ElseIf Label31.Caption = "X" And Label32.Caption = "X" And Label33.Caption = "X" Then
        win = 1
        Line26.Visible = True
    ElseIf label11.Caption = "X" And Label21.Caption = "X" And Label31.Caption = "X" Then
        win = 1
        Line21.Visible = True
    ElseIf label12.Caption = "X" And Label22.Caption = "X" And Label32.Caption = "X" Then
        win = 1
        Line22.Visible = True
    ElseIf Label13.Caption = "X" And Label23.Caption = "X" And Label33.Caption = "X" Then
        win = 1
        Line23.Visible = True
    ElseIf label11.Caption = "X" And Label22.Caption = "X" And Label33.Caption = "X" Then
        win = 1
        Line19.Visible = True
    ElseIf Label13.Caption = "X" And Label22.Caption = "X" And Label31.Caption = "X" Then
        win = 1
        Line20.Visible = True
    ElseIf label11.Caption = "O" And label12.Caption = "O" And Label13.Caption = "O" Then
        win = 2
        Line24.Visible = True
    ElseIf Label21.Caption = "O" And Label22.Caption = "O" And Label23.Caption = "O" Then
        win = 2
        Line25.Visible = True
    ElseIf Label31.Caption = "O" And Label32.Caption = "O" And Label33.Caption = "O" Then
        win = 2
        Line26.Visible = True
    ElseIf label11.Caption = "O" And Label21.Caption = "O" And Label31.Caption = "O" Then
        win = 2
        Line21.Visible = True
    ElseIf label12.Caption = "O" And Label22.Caption = "O" And Label32.Caption = "O" Then
        win = 2
        Line22.Visible = True
    ElseIf Label13.Caption = "O" And Label23.Caption = "O" And Label33.Caption = "O" Then
        win = 2
        Line23.Visible = True
    ElseIf label11.Caption = "O" And Label22.Caption = "O" And Label33.Caption = "O" Then
        win = 2
        Line19.Visible = True
    ElseIf Label13.Caption = "O" And Label22.Caption = "O" And Label31.Caption = "O" Then
        win = 2
        Line20.Visible = True
    ElseIf label11 <> "" And label12 <> "" And Label13 <> "" And Label21 <> "" And Label22 <> "" And Label23 <> "" And Label31 <> "" And Label32 <> "" And Label33 <> "" Then
        MsgBox (" Empate!!")
        *****.Enabled = True
        label11.Caption = ""
        label12.Caption = ""
        Label13.Caption = ""
        Label21.Caption = ""
        Label22.Caption = ""
        Label23.Caption = ""
        Label31.Caption = ""
        Label32.Caption = ""
        Label33.Caption = ""
        Line19.Visible = False
        Line20.Visible = False
        Line21.Visible = False
        Line22.Visible = False
        Line23.Visible = False
        Line24.Visible = False
        Line25.Visible = False
        Line26.Visible = False
        
        win = 0
    End If
    If win = 1 Then
        tdgfh = MsgBox(" O jogador1(" & nome1 & ") Ganhou ", , "winner")
        win1 = win1 + 1
        *****.Enabled = True
        label11.Caption = ""
        label12.Caption = ""
        Label13.Caption = ""
        Label21.Caption = ""
        Label22.Caption = ""
        Label23.Caption = ""
        Label31.Caption = ""
        Label32.Caption = ""
        Label33.Caption = ""
        Line19.Visible = False
        Line20.Visible = False
        Line21.Visible = False
        Line22.Visible = False
        Line23.Visible = False
        Line24.Visible = False
        Line25.Visible = False
        Line26.Visible = False
        
        win = 0
    ElseIf win = 2 Then
        tdgfh = MsgBox(" O jogador2(" & nome2 & ") Ganhou ", , "winner")
        win2 = win2 + 1
        *****.Enabled = True
        label11.Caption = ""
        label12.Caption = ""
        Label13.Caption = ""
        Label21.Caption = ""
        Label22.Caption = ""
        Label23.Caption = ""
        Label31.Caption = ""
        Label32.Caption = ""
        Label33.Caption = ""
        Line19.Visible = False
        Line20.Visible = False
        Line21.Visible = False
        Line22.Visible = False
        Line23.Visible = False
        Line24.Visible = False
        Line25.Visible = False
        Line26.Visible = False
        
        win = 0
    End If
    
     
  8. _flash_

    _flash_ Power Member

    e da forma que sugeriste acima não tenho conhecimentos suficientes:sad::confused:
     
  9. Morais

    Morais Power Member

    Essas noções de Matemática...

    Resto da divisão de 1 por 2 = 0; (Jogador 2)
    Resto da divisão de 2 por 2 = 0; (Jogador 2)
    Resto da divisão de 3 por 2 = 1; (Jogador 1)
    Resto da divisão de 4 por 2 = 0; (Jogador 2)
    Resto da divisão de 5 por 2 = 1; (Jogador 1)

    (Já entendeste aonde é que estás a errar? Matemática básica...)

    Basicamente inicializa o teu contador com um numero ímpar superior a 2, pode ser 3, 5, ou até 101, desde que seja ímpar.
    E, porque não simplesmente usares um marcador em booleano? É tão mais simples de controlar e implementar

    Basta associar o 0 ao Jogador 1 e o 1 ao Jogador 2.
    So precisas de alterar a "polaridade" cada vez que um joga:

    - Quando é a vez do Jogador 1 mete o valor em 1;
    - Quando é a vez do Jogador 2 mete o valor em 0;

    - Se Valor == 0 'Vez do Jogador 1';
    - Se Valor == 1 'Vez do Jogador 2';

    Epah, até dá para simplificar o sistema se compreenderes que 0 indica um 'Não' e 1 um 'Sim':

    - Se Valor 'Vez do Jogador 2';
    - Se Não Valor (em C é !Valor, acho que em VB é o mesmo) 'Vez do Jogador 1';

    São praticas muito mais "nucleares" que te vão criar um programa muito mais limpo, simples e eficiente.
    Epah, até podias muito bem nem usar contadores, bastava usares recursividade aplicando apenas uma função que estava desenvolvida para se ir chamando a si própria alterando apenas certos dados.

    Mas já pedias ao teu professor para vos ensinar os benefícios de uma traçagem...
    Olhei para a tua função de controle e encontrei logo o erro, nem tive que ler o resto do programa.

    Mas deves estar no 9º/10º e ainda vais no primeiro Período... é compreensível.
     
  10. _flash_

    _flash_ Power Member


    a tua teoria da inicialização de inicializar a um numero impar maior q dois não funcionou, até tentei com 101 e mesmo assim não funcionou, continua com o mesmo problema...


    e sim temos poucos conhecimentos ainda de VB, estamos no 11º ano, o primeiro ano de VB ainda temos muito poucas aulas e muito pouca experiencia.
     
  11. balute

    balute Power Member

    também podes declarar a variável jog como boolean e metê-la a true/false, conforme o jogador que é a jogar. Depois fica assim:

    Código:
    if jog then
    'é o jogador 1 a jogar
    else
    'é o 2º jogador a jogar
    end if
    @Moralez: 1 Mod 2 = 1
     
  12. AliFromCairo

    AliFromCairo Power Member

    Código:
    ...
    jogador = 0
    ...
    jogador = (jogador + 1) Mod 2
    
    Ou então usas uma variável do tipo Boolean como o Moralez e o Ш¡zard·σf·Шαr referiram.

    :p.
     
  13. _flash_

    _flash_ Power Member

    queria evitar utilizar valores booleanos, embora ja tenha percebido como fazer para valores booleanos, mas eu perciso de fazer com contador para outras funçoes do programa, resta saber como, não percebo porque não funciona bem, se a matemática não me falha devia resultar como tenho.
     
  14. Morais

    Morais Power Member

    eheh, era capaz de jurar que o resto da divisão inteira de 1 por dois era zero...
     

Partilhar esta Página