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

Jogo do Galo em Pascal

Discussão em 'Programação' iniciada por Transfixer, 8 de Junho de 2008. (Respostas: 6; Visualizações: 11423)

  1. Boas!

    Tenho aqui um jogo do galo que fiz durante as aulas de IP este ano (com ajuda em jogos já feitos), mas tem um erro que não consigo arranjar. Quando faço o 3 em linha, o último simbolo não aperece, ou seja, por exemplo, quando tenho 2 X na diagonal e ponho o 3º X no canto, simplesmente não aparece, mas diz quem ganhou que neste caso era o jogador do X.

    Será que alguém me pode dar um jeitinho e arranjar o problema? E já agora, queria fazer um quadrado à volta do jogo, mas sem ser com muitos gotoxy (só consigo fazer assim).

    Eu sei que tá muito simples, mas não sou nenhum génio da programação :Whatever:

    Código:
    program jogo_do_galo_final;
    uses crt;
    var jogada:integer;
        vez:char;
        posicao:array[1..9] of string;
        fim:integer;
        i:integer;
        vencedor:char;
     
    {========================}
     
    procedure teclas;
    begin
            clrscr;
            writeln;
            writeln('Teclas do Jogo');
            writeln;
            writeln(' 7 | 8 | 9 ');
            writeln('---+---+---');
            writeln(' 4 | 5 | 6 ');
            writeln('---+---+---');
            writeln(' 1 | 2 | 3 ');
    end;
     
    {=======================}
     
    procedure jogo;
    begin
            gotoxy(30,10);
            writeln('Jogo do Galo');
            gotoxy(30,12);
            writeln(' ',posicao[7],' | ',posicao[8],' | ',posicao[9]);
            gotoxy(30,13);
            writeln('---+---+---');
            gotoxy(30,14);
            writeln(' ',posicao[4],' | ',posicao[5],' | ',posicao[6]);
            gotoxy(30,15);
            writeln('---+---+---');
            gotoxy(30,16);
            writeln(' ',posicao[1],' | ',posicao[2],' | ',posicao[3]);
     
    end;
     
    {========================}
     
    procedure verifica;
    begin
            if (posicao[1]+posicao[2]+posicao[3]) = 'XXX' then vencedor:='X';
            if (posicao[4]+posicao[5]+posicao[6]) = 'XXX' then vencedor:='X';
            if (posicao[7]+posicao[8]+posicao[9]) = 'XXX' then vencedor:='X';
            if (posicao[1]+posicao[4]+posicao[7]) = 'XXX' then vencedor:='X';
            if (posicao[2]+posicao[5]+posicao[8]) = 'XXX' then vencedor:='X';
            if (posicao[3]+posicao[6]+posicao[9]) = 'XXX' then vencedor:='X';
            if (posicao[7]+posicao[5]+posicao[3]) = 'XXX' then vencedor:='X';
            if (posicao[1]+posicao[5]+posicao[9]) = 'XXX' then vencedor:='X';
            if (posicao[1]+posicao[2]+posicao[3]) = 'OOO' then vencedor:='O';
            if (posicao[4]+posicao[5]+posicao[6]) = 'OOO' then vencedor:='O';
            if (posicao[7]+posicao[8]+posicao[9]) = 'OOO' then vencedor:='O';
            if (posicao[1]+posicao[4]+posicao[7]) = 'OOO' then vencedor:='O';
            if (posicao[2]+posicao[5]+posicao[8]) = 'OOO' then vencedor:='O';
            if (posicao[3]+posicao[6]+posicao[9]) = 'OOO' then vencedor:='O';
            if (posicao[7]+posicao[5]+posicao[3]) = 'OOO' then vencedor:='O';
            if (posicao[1]+posicao[5]+posicao[9]) = 'OOO' then vencedor:='O';
            if (i=9) and (vencedor=' ')
            then begin
                            gotoxy(30,18);
                            writeln('Empate!');
                            writeln;
                            readln;
                            fim:=1;
                 end;
            if (vencedor<>' ')
            then begin
                            gotoxy(30,18);
                            writeln('O jogador ',vencedor,' ganhou!');
                            writeln;
                            readln;
                            fim:=1;
                 end;
    end;
     
    {***************************}
     
    begin
            vencedor:=' ';
            for i := 1 to 9 do
            posicao[i]:=' ';
            fim:=0;
            vez:='O';
            i:=0;
            while fim <> 1 do
            begin
                    if vez = 'X'
                    then vez:='O'
                    else vez := 'X';
                    teclas;
                    jogo;
                    jogada:=0;
                    while (jogada=0) and (fim <> 1) do
                    begin
                            writeln;
                            write('Vez do jogador ',vez,': ');
                            readln(jogada);
                            if jogada=0
                            then fim:=1;
                            if posicao[jogada]=' '
                            then posicao[jogada]:=vez
                            else jogada:=0;
                    end;
            verifica;
            end;
    end.
    Espero que alguém se disponibilize e desde já, obrigado! :wink:
     
    Última edição: 8 de Junho de 2008
  2. Qtherc

    Qtherc Power Member

    eu pouco ou nada percebo disto mas depois de tar pronto poe um link para nos sacar-mos para ver como está.

    cumps
     
  3. Eu não fiz com readkeys porque dava mais trabalho xP
     
  4. Noeljunior

    Noeljunior I fold therefore I AM

    Eu fiz uma vez um jogo em turbopascal do galo... o prof disse-me para eu nao fazer mais nada até ao fim do ano q parecia mal xD mas já nao faço a minima onde anda ele...
     
  5. OdracirPT

    OdracirPT Power Member

    Até me lembro de ter feito também um jogo do galo no Pascal, mas se queres que te diga, eu fiz de uma maneira muito mais complicada.

    Acho que as procedures que fizeste estão correctas.

    O problema só pode estar no main dentro desse ciclo while.
     
  6. BaM MaRgErA

    BaM MaRgErA Folding Member

    Se eu não me engano, a função "jogo" é a que desenha. Ou seja, na tua ultima jogada vencedora, tu fazes um verifica. Lá dentro ele muda a a variável "fim" para 1 (porque ha um vencedor), mas nao entra dentro do while, logo não faz o ultimo "jogo" (que iria desenhar o resultado final). Penso eu :P
     

Partilhar esta Página