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; readkey; end; If ganhador <> ' ' then begin writeln; writeln; jogo; writeln('"',ganhador,'"',' ganhou.'); writeln; fim := 1; readkey; 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.