program velha; {Inicio do Programa}
uses crt;
var
jogada :integer; {Entrada do jogador pelo teclado}
vez :char; {O ou X conforme a vez}
posicao :array[1..9] of string; {Array para armazenamento das jogadas}
fim :integer; {Verificação de término do jogo}
i :integer; {Contador}
ganhador :char; {Armazena quem ganhou o jogo}
{******** Desenha a tela Inicial ********}
procedure tela;
begin
clrscr;
writeln;
writeln('Opcoes:');
writeln;
writeln(' 1 | 2 | 3 ');
writeln('---+---+-- ');
writeln(' 4 | 5 | 6 ');
writeln('---+---+-- ');
writeln(' 7 | 8 | 9 ');
writeln;
writeln;
writeln;
writeln('Jogo:');
writeln;
writeln(' | | ');
writeln('---+---+-- ');
writeln(' | | ');
writeln('---+---+-- ');
writeln(' | | ');
writeln;
writeln;
end;
{******** Desenha a tela de Opções ********}
procedure opcoes;
begin
clrscr;
writeln;
writeln('Opcoes:');
writeln;
writeln(' 1 | 2 | 3 ');
writeln('---+---+-- ');
writeln(' 4 | 5 | 6 ');
writeln('---+---+-- ');
writeln(' 7 | 8 | 9 ');
writeln;
writeln;
writeln;
end;
{******** Desenha a tela mostrando as Jogadas ********}
procedure jogo;
begin
writeln('Jogo:');
writeln;
writeln(' ',posicao[1],' | ',posicao[2],' | ',posicao[3]);
writeln('---+---+-- ');
writeln(' ',posicao[4],' | ',posicao[5],' | ',posicao[6]);
writeln('---+---+-- ');
writeln(' ',posicao[7],' | ',posicao[8],' | ',posicao[9]);
writeln;
writeln;
end;
{******** Verifica se houve ganhador ********}
procedure verifica;
begin
if posicao[1]+posicao[2]+posicao[3] = 'XXX' then ganhador := 'X';
if posicao[4]+posicao[5]+posicao[6] = 'XXX' then ganhador := 'X';
if posicao[7]+posicao[8]+posicao[9] = 'XXX' then ganhador := 'X';
if posicao[1]+posicao[4]+posicao[7] = 'XXX' then ganhador := 'X';
if posicao[2]+posicao[5]+posicao[8] = 'XXX' then ganhador := 'X';
if posicao[3]+posicao[6]+posicao[9] = 'XXX' then ganhador := 'X';
if posicao[7]+posicao[5]+posicao[3] = 'XXX' then ganhador := 'X';
if posicao[1]+posicao[5]+posicao[9] = 'XXX' then ganhador := 'X';
if posicao[1]+posicao[2]+posicao[3] = 'OOO' then ganhador := 'O';
if posicao[4]+posicao[5]+posicao[6] = 'OOO' then ganhador := 'O';
if posicao[7]+posicao[8]+posicao[9] = 'OOO' then ganhador := 'O';
if posicao[1]+posicao[4]+posicao[7] = 'OOO' then ganhador := 'O';
if posicao[2]+posicao[5]+posicao[8] = 'OOO' then ganhador := 'O';
if posicao[3]+posicao[6]+posicao[9] = 'OOO' then ganhador := 'O';
if posicao[7]+posicao[5]+posicao[3] = 'OOO' then ganhador := 'O';
if posicao[1]+posicao[5]+posicao[9] = 'OOO' then ganhador := 'O';
if (i = 9) and (ganhador = ' ') then
begin
writeln;
writeln;
jogo;
writeln('DEU VELHA');
writeln;
fim := 1;
end;
If ganhador <> ' ' then
begin
writeln;
writeln;
jogo;
writeln('"',ganhador,'"',' ganhou.');
writeln;
fim := 1;
end;
end;
{***********************************
Inicio da Procedure Principal
***********************************}
BEGIN
{iniciandO as variaveis}
ganhador := ' ';
for i := 1 to 9 do
posicao[i]:=' ';
fim := 0;
vez := 'O';
i := 0;
tela;
while fim <> 1 do {Loop principal}
begin
inc(i);
if vez = 'X' then
vez := 'O'
else
vez := 'X';
opcoes;
jogo;
jogada := 0;
while (jogada = 0) and (fim <> 1) do {Loop da jogada}
begin
write('Joga "',vez,'":');
readln(jogada);
if jogada = 0 then fim:=1;
if posicao[jogada]= ' ' then
posicao[jogada] := vez
else
jogada := 0;
end;
verifica; {verifica se acabou o jogo}
end;
END.