Jogo do Galo em Pascal

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:
eu pouco ou nada percebo disto mas depois de tar pronto poe um link para nos sacar-mos para ver como está.

cumps
 
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...
 
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.
 
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
 
Back
Topo