Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Guidofski

[Pascal] Jogo do Galo

Recommended Posts

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

Share this post


Link to post
Share on other 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."

 

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.