Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Guidofski

[Pascal] Jogo do Galo

Mensagens Recomendadas

Guidofski

Boas a todos.

Tenho de fazer o jogo do galo em pascal, ele está acabado mas tem um problema.

Não tou a conseguir que ele imprima os X e os O nos sitios.

Se ajudar fica aqui o Codigo:

program jogo_do_galo;

uses wincrt;

var
   posicao:array[1..9] of string;
   fim:boolean;
   player1,player2,vencedor,jogador:string;

{*********************************************************************************}

procedure controlos;

begin
     gotoxy(2,1);
     writeln('*** Controlos ***');
     writeln('');
     writeln('+-----+-----+-----+');
     writeln('|  1  |  2  |  3  |');
     writeln('+-----+-----+-----+');
     writeln('|  4  |  5  |  6  |');
     writeln('+-----+-----+-----+');
     writeln('|  7  |  8  |  9  |');
     writeln('+-----+-----+-----+');
     writeln('');
     writeln('Para sair Prima 0'); 
end;

{*********************************************************************************}

procedure verifica;

var
   i:byte;

begin
     if (posicao[1]+posicao[2]+posicao[3]='XXX') then vencedor:=player1;
     if (posicao[4]+posicao[5]+posicao[6]='XXX') then vencedor:=player1;
     if (posicao[7]+posicao[8]+posicao[9]='XXX') then vencedor:=player1;
     if (posicao[1]+posicao[4]+posicao[7]='XXX') then vencedor:=player1;
     if (posicao[2]+posicao[5]+posicao[8]='XXX') then vencedor:=player1;
     if (posicao[3]+posicao[6]+posicao[9]='XXX') then vencedor:=player1;
     if (posicao[1]+posicao[5]+posicao[9]='XXX') then vencedor:=player1;
     if (posicao[3]+posicao[5]+posicao[7]='XXX') then vencedor:=player1;
     {*****************************************************************}
     if (posicao[1]+posicao[2]+posicao[3]='OOO') then vencedor:=player2;
     if (posicao[4]+posicao[5]+posicao[6]='OOO') then vencedor:=player2;
     if (posicao[7]+posicao[8]+posicao[9]='OOO') then vencedor:=player2;
     if (posicao[1]+posicao[4]+posicao[7]='OOO') then vencedor:=player2;
     if (posicao[2]+posicao[5]+posicao[8]='OOO') then vencedor:=player2;
     if (posicao[3]+posicao[6]+posicao[9]='OOO') then vencedor:=player2;
     if (posicao[1]+posicao[5]+posicao[9]='OOO') then vencedor:=player2;
     if (posicao[3]+posicao[5]+posicao[7]='OOO') then vencedor:=player2;
     if (i=9) and (vencedor='') then
        begin
             gotoxy(1,1);
             writeln('*** Empate ***');
             readln;
             fim:=true;
        end;
     if (vencedor=player1) or (vencedor=player2) then
        begin
             gotoxy(1,1);
             writeln('*** Ganhou o Jogador ',vencedor);
             readln;
             fim:=true;
        end;
end;

{*********************************************************************************}

procedure jogo(vencedor:string);

var
   jogada,i,e:byte;
   vez:string;
   player1x,player2o:string;

begin
     player1x:=player1;
     player1x:='X';
     player2o:=player2;
     player2o:='O';
     gotoxy(32,8);
     writeln('+----+----+----+');
     gotoxy(32,9);
     writeln('|  ',posicao[1],'  |  ',posicao[2],'  |  ',posicao[3],'  |');
     gotoxy(32,10);
     writeln('+----+----+----+');
     gotoxy(32,11);
     writeln('|  ',posicao[4],'  |  ',posicao[5],'  |  ',posicao[6],'  |');
     gotoxy(32,12);
     writeln('+----+----+----+');
     gotoxy(32,13);
     writeln('|  ',posicao[7],'  |  ',posicao[8],'  |  ',posicao[9],'  |');
     gotoxy(32,14);
     writeln('+----+----+----+');
     vencedor:='';
     for i:=1 to 9 do
         posicao[i]:='';
     fim:=false;
     jogador:=player2;
     i:=0;
     vez:=player1;
     while (fim=true) do
           begin
                if (vez=player1) then
                   vez:=player2
                else
                    vez:=player1;
           end;
     jogada:=0;
     while (jogada=0) and (fim<>true) do
           begin
                gotoxy(30,17);
                write('Vez do ',vez,' -> ');
                readln(jogada);
                if (posicao[jogada]='') then
                   posicao[jogada]:=vez
                else
                    jogada:=0;
           end;
     verifica;
end;

{*********************************************************************************}

procedure player_player;

begin
     gotoxy(32,1);
     writeln('Player vs. Player');
     gotoxy(30,4);
     writeln('Nome do Player1 -> ');
     gotoxy(49,4);
     readln(player1);
     gotoxy(30,6);                           
     writeln('Nome do Player2 -> ');
     gotoxy(49,6);
     readln(player2);
     clrscr;
     gotoxy(32,1);
     writeln('Player vs. Player');
     controlos;
     jogo(vencedor);
end;

{*********************************************************************************}

procedure menu;

var
   opcao:byte;

begin
     gotoxy(35,1);
     writeln('Jogo do Galo');
     gotoxy(31,6);
     writeln('1. Player vs. Player');
     gotoxy(29,8);
     writeln('2. Player vs. Computador');
     gotoxy(35,10);
     writeln('3. Créditos');
     gotoxy(38,12);
     writeln('4. Sair');
     gotoxy(35,14);
     writeln('Escolha -> ');
     gotoxy(46,14);
     readln(opcao);
     case opcao of
          1:begin
                 clrscr;
                 controlos;
                 player_player;
            end;
          4:begin
                 clrscr;
                 gotoxy(32,12);
                 writeln('Programa Terminado');
            end;
     end;
end;

{*********************************************************************************}

begin
     menu;
end.

Guido

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Guidofski, coloca as tuas dúvidas de forma concreta. Colocares aqui um código com uma mensagem "corrijam-me o print do X e do O" não te vai levar a lado algum.

Especifica o teu problema e onde necessitas de ajuda de forma clara.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Guidofski

Guidofski, coloca as tuas dúvidas de forma concreta. Colocares aqui um código com uma mensagem "corrijam-me o print do X e do O" não te vai levar a lado algum.

Especifica o teu problema e onde necessitas de ajuda de forma clara.

Bem, já encontrei o meu problema, agora o unico problema é que nao Empata.

{*********************************************************************************}

procedure jogo;

begin
     gotoxy(32,8);
     writeln('+-----+-----+-----+');
     gotoxy(32,9);
     writeln('|  ',posicao[1],'  |  ',posicao[2],'  |  ',posicao[3],'  |');
     gotoxy(32,10);
     writeln('+-----+-----+-----+');
     gotoxy(32,11);
     writeln('|  ',posicao[4],'  |  ',posicao[5],'  |  ',posicao[6],'  |');
     gotoxy(32,12);
     writeln('+-----+-----+-----+');
     gotoxy(32,13);
     writeln('|  ',posicao[7],'  |  ',posicao[8],'  |  ',posicao[9],'  |');
     gotoxy(32,14);
     writeln('+-----+-----+-----+');    
end;

{*********************************************************************************}

procedure verifica(i:byte);

begin
     if (posicao[1]+posicao[2]+posicao[3]='XXX') then vencedor:=player1;
     if (posicao[4]+posicao[5]+posicao[6]='XXX') then vencedor:=player1;
     if (posicao[7]+posicao[8]+posicao[9]='XXX') then vencedor:=player1;
     if (posicao[1]+posicao[4]+posicao[7]='XXX') then vencedor:=player1;
     if (posicao[2]+posicao[5]+posicao[8]='XXX') then vencedor:=player1;
     if (posicao[3]+posicao[6]+posicao[9]='XXX') then vencedor:=player1;
     if (posicao[1]+posicao[5]+posicao[9]='XXX') then vencedor:=player1;
     if (posicao[3]+posicao[5]+posicao[7]='XXX') then vencedor:=player1;
     {*****************************************************************}
     if (posicao[1]+posicao[2]+posicao[3]='OOO') then vencedor:=player2;
     if (posicao[4]+posicao[5]+posicao[6]='OOO') then vencedor:=player2;
     if (posicao[7]+posicao[8]+posicao[9]='OOO') then vencedor:=player2;
     if (posicao[1]+posicao[4]+posicao[7]='OOO') then vencedor:=player2;
     if (posicao[2]+posicao[5]+posicao[8]='OOO') then vencedor:=player2;
     if (posicao[3]+posicao[6]+posicao[9]='OOO') then vencedor:=player2;
     if (posicao[1]+posicao[5]+posicao[9]='OOO') then vencedor:=player2;
     if (posicao[3]+posicao[5]+posicao[7]='OOO') then vencedor:=player2;
     if (i=9) and (vencedor=' ') then
        begin
             gotoxy(30,17);
             writeln('*** Empate ***');
             fim:=true;
        end;
     if (vencedor=player1) or (vencedor=player2) then
        begin
             gotoxy(28,17);
             writeln('*** Ganhou o ',vencedor,' ***');
             readln;
             fim:=true;
        end;
end;

{*********************************************************************************}

procedure player_pc;

var
   i,jogada:byte;
   vez,pc:char;

begin
     gotoxy(32,1);
     writeln('Player vs. Computador');
     vencedor:=' ';
     for i:=1 to 9 do
         posicao[i]:=' ';
     fim:=false;
     vez:='X';
     i:=0;
     controlos;
     jogo;
     jogada:=0;
     while (jogada=0) and (fim<>true) do
           begin
                gotoxy(30,17);
                write('Vez do ',vez,' -> ');
                readln(jogada);
                if (jogada=0) then
                   fim:=true;
                if (posicao[jogada]=' ') then
                   posicao[jogada]:=vez
                else
                    jogada:=0;
           verifica(i);
           end;
end;

{*********************************************************************************}

procedure player_player;

var
   i,jogada:byte;
   vez:char;

begin
     gotoxy(32,1);
     writeln('Player vs. Player');
     gotoxy(30,4);
     writeln('Nome do Player1 -> ');
     gotoxy(49,4);
     readln(player1);
     gotoxy(30,6);                           
     writeln('Nome do Player2 -> ');
     gotoxy(49,6);
     readln(player2);
     clrscr;
     gotoxy(32,1);
     writeln('Player vs. Player');
     vencedor:=' ';
     for i:=1 to 9 do
         posicao[i]:=' ';
     fim:=false;
     vez:='O';
     i:=0;
     while (fim<>true) do
           begin
                if (vez='X') then
                   vez:='O'
                else
                    vez:='X';
                controlos;
                jogo;
                jogada:=0;
     while (jogada=0) and (fim<>true) do
           begin
                gotoxy(30,17);
                write('Vez do ',vez,' -> ');
                readln(jogada);
                if (jogada=0) then
                   fim:=true;
                if (posicao[jogada]=' ') then
                   posicao[jogada]:=vez
                else
                    jogada:=0;
           verifica(i);
           end;
     end;
end;

{*********************************************************************************}

procedure menu;

var
   opcao:byte;

begin
     gotoxy(35,1);
     writeln('Jogo do Galo');
     gotoxy(31,6);
     writeln('1. Player vs. Player');
     gotoxy(29,8);
     writeln('2. Player vs. Computador');
     gotoxy(35,10);
     writeln('3. Créditos');
     gotoxy(37,12);
     writeln('4. Sair');
     gotoxy(35,14);
     writeln('Escolha -> ');
     gotoxy(46,14);
     readln(opcao);
     case opcao of
          1:begin
                 clrscr;
                 controlos;
                 player_player;
            end;
          2:begin
                 clrscr;
                 player_pc;
            end;
          3:begin
                 clrscr;
                 creditos;
            end;
          4:begin
                 clrscr;
                 gotoxy(32,12);
                 writeln('Programa Terminado');
            end;
     end;
end;

{*********************************************************************************}

begin
     menu;
end.

O Programa não reconhece quando á um Empate.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Dkid

Hum, ainda me lembro de ter feito o meu jogo do galo, tinha mais de 900 linhas... o teu nem metade tem.

Eu penso que estás a dizer que o vencedor é igual a um espaço.

if (i=9) and (vencedor='') then... ou vencedor = null

Experimenta e depois diz algo


I promise that I will not change the PATH variable again other than:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

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.