Make your own free website on Tripod.com
----------------------------------------------------------------------

--  Copyright (c) Josť Lauro Strapasson

--  Quatro Barras, ParanŠ-BRAZIL.

--  http://www.joselauro.com

--  http://www.joselauro.cjb.net

--  http://joselauro.tripod.com

--

--  Permission granted to use for any purpose, provided this copyright

--  remains attached and unmodified.

--

--  THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR

--  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED

--  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

--

-----------------------------------------------------------------------



with adagraph; use adagraph; --AdaGraph2000!

with Text_IO; use Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with Ada.Numerics.Float_Random; use Ada.Numerics.Float_Random;


procedure tictac is

tabuleiro:array(1..9) of character;

--7 8 9

--4 5 6

--1 2 3


fim:boolean:=false;
jogou:boolean;
sairdomouse:boolean;
sairdojogo:boolean:=false;
mouse_x,mouse_y:integer;
g:generator;
--G esta relacionado com numeros aleatorios.


jogos:integer:=1;
vitorias:integer:=0;
derrotas:integer:=0;
empates:integer:=0;
contador_ok:boolean:=false;
X_color:Extended_Color_Type:=Light_blue;
O_color:Extended_Color_Type:=Green;



  procedure bola (x,y:in integer) is
  begin
   --Desenha uma bola na posicao x,y.

   --A ideia e faze uma bola de raio 45 no ponto x,y.

  Draw_Circle(x,y,45,O_color);
  Draw_Circle(x,y,35,O_color);
  flood_fill(x,y+37,O_color);
  flood_fill(x,y-37,O_color); --Isso e' preciso devido a linha que aparece quando alguem ganha.

 
  end bola;

  procedure xis (x,y: in integer) is
  begin
   --Faz um X centrado em x,y ocupando 90x90.	   

  Draw_Line(x-45,y-45,x+45,y+45,X_color);
  Draw_Line(x-45,y-44,x+44,y+45,X_color);
  Draw_Line(x-45,y-43,x+43,y+45,X_color);
  Draw_Line(x-45,y-42,x+42,y+45,X_color);
  Draw_Line(x-45,y-41,x+41,y+45,X_color);
  Draw_Line(x-45,y-40,x+40,y+45,X_color);
  Draw_Line(x-45,y-39,x+39,y+45,X_color);
  
  Draw_Line(x-44,y-45,x+45,y+44,X_color);
  Draw_Line(x-43,y-45,x+45,y+43,X_color);
  Draw_Line(x-43,y-45,x+45,y+43,X_color);
  Draw_Line(x-42,y-45,x+45,y+42,X_color);
  Draw_Line(x-42,y-45,x+45,y+42,X_color);
  Draw_Line(x-41,y-45,x+45,y+41,X_color);

  Draw_Line(x-45,y+45,x+45,y-45,X_color);
  Draw_Line(x-45,y+44,x+44,y-45,X_color);
  Draw_Line(x-45,y+43,x+43,y-45,X_color);
  Draw_Line(x-45,y+42,x+42,y-45,X_color);
  Draw_Line(x-45,y+41,x+41,y-45,X_color);
  Draw_Line(x-45,y+40,x+40,y-45,X_color);
  Draw_Line(x-45,y+39,x+39,y-45,X_color);
  
  Draw_Line(x-44,y+45,x+45,y-44,X_color);
  Draw_Line(x-43,y+45,x+45,y-43,X_color);
  Draw_Line(x-43,y+45,x+45,y-43,X_color);
  Draw_Line(x-42,y+45,x+45,y-42,X_color);
  Draw_Line(x-42,y+45,x+45,y-42,X_color);
  Draw_Line(x-41,y+45,x+45,y-41,X_color);
  end xis;

  procedure atualiza_contador is
  begin
     
    draw_box(42,322,75,340,white,true);
    draw_box(111,322,150,340,white,true);
    draw_box(192,322,225,340,white,true);
    draw_box(267,322,299,340,white,true);

    Display_Text(35,322,integer'image(jogos),brown);
    Display_Text(106,322,integer'image(vitorias),green);
    Display_Text(185,322,integer'image(derrotas),brown);
    Display_Text(260,322,integer'image(empates),brown);
  end atualiza_contador;

  procedure desenhatabuleiro is
  begin	  
    Set_Window_Title(" Tic Tac Toe. Author: Josť Lauro Strapasson.");
    --seleciona o titulo da janela.


    --Deseha o tabuleiro.

    Draw_Line(100,0,100,300,red); --primeira reta vertical.

    Draw_Line(200,0,200,300,red); --segunda  reta vertical.

   

    Draw_Line(0,100,300,100,red); --primeira reta horizontal. 

    Draw_Line(0,200,300,200,red); --segunda reta horizontal.

   

    draw_line(0,300,300,300,black); --divisao dos controles.

    draw_line(0,320,300,320,light_blue); --" "

    draw_line(0,301,300,301,black);

    Display_Text(1,302,"New");
    Display_text(101,302,"Go");
    Display_text(201,302,"Exit");

    Display_Text(1,322,"Game ",red);
    Display_Text(76,322,"Wins",red);
    Display_Text(151,322,"Loses",red);
    Display_Text(226,322,"Draws",red);

    Display_Text(35,322,integer'image(jogos),brown);
    Display_Text(106,322,integer'image(vitorias),green);
    Display_Text(185,322,integer'image(derrotas),brown);
    Display_Text(260,322,integer'image(empates),brown);
 
    draw_line(300,0,300,340);

    draw_box(302,2,323,11,black,true); 
    draw_box(327,2,348,11,black,true);

    draw_box(302,13,323,23,blue,true); 
    draw_box(327,13,348,23,blue,true);

    draw_box(302,25,323,35,green,true); 
    draw_box(327,25,348,35,green,true);

    draw_box(302,37,323,47,cyan,true); 
    draw_box(327,37,348,47,cyan,true);

    draw_box(302,49,323,59,red,true); 
    draw_box(327,49,348,59,red,true);

    draw_box(302,61,323,71,magenta,true); 
    draw_box(327,61,348,71,magenta,true);

    draw_box(302,73,323,83,brown,true); 
    draw_box(327,73,348,83,brown,true);

    draw_box(302,85,323,95,light_gray,true); 
    draw_box(327,85,348,95,light_gray,true);

    draw_box(302,97,323,107,dark_gray,true); 
    draw_box(327,97,348,107,dark_gray,true);

    draw_box(302,109,323,119,light_blue,true); 
    draw_box(327,109,348,119,light_blue,true);

    draw_box(302,121,323,131,light_green,true); 
    draw_box(327,121,348,131,light_green,true);

    draw_box(302,133,323,143,light_cyan,true); 
    draw_box(327,133,348,143,light_cyan,true);

    draw_box(302,145,323,155,light_red,true); 
    draw_box(327,145,348,155,light_red,true);

    draw_box(302,157,323,167,light_magenta,true); 
    draw_box(327,157,348,167,light_magenta,true);

    draw_box(302,169,323,179,yellow,true); 
    draw_box(327,169,348,179,yellow,true);


    draw_line(328,183,346,201);
    draw_line(328,201,346,183);

    draw_circle(312,192,10);

    draw_box(301,262,349,299,brown,true);
    draw_box(301,302,349,339,brown,true);

    display_text(301,275," load");
    display_text(301,315," save");

    --Zera o array tabuleiro.

    for i in 1..9 loop
      tabuleiro(i):=' ';
    end loop;

  end desenhatabuleiro;

  procedure limpa_cores_o is
  begin
    draw_box(301,1,324,12,white); 
    draw_box(301,12,324,24,white); 
    draw_box(301,24,324,36,white); 
    draw_box(301,36,324,48,white); 
    draw_box(301,48,324,60,white); 
    draw_box(301,60,324,72,white); 
    draw_box(301,72,324,84,white); 
    draw_box(301,84,324,96,white); 
    draw_box(301,96,324,108,white); 
    draw_box(301,108,324,120,white); 
    draw_box(301,120,324,132,white); 
    draw_box(301,132,324,144,white); 
    draw_box(301,144,324,156,white); 
    draw_box(301,156,324,168,white); 
    draw_box(301,168,324,180,white); 
  end limpa_cores_o;

  procedure limpa_cores_x is
  begin
    draw_box(326,1,349,12,white);
    draw_box(326,12,349,24,white);
    draw_box(326,24,349,36,white);
    draw_box(326,36,349,48,white);
    draw_box(326,48,349,60,white);
    draw_box(326,60,349,72,white);
    draw_box(326,72,349,84,white);
    draw_box(326,84,349,96,white);
    draw_box(326,96,349,108,white);
    draw_box(326,108,349,120,white);
    draw_box(326,120,349,132,white);
    draw_box(326,132,349,144,white);
    draw_box(326,144,349,156,white);
    draw_box(326,156,349,168,white);
    draw_box(326,168,349,180,white);
  end limpa_cores_x;


  
  procedure fecha_para_ganhar is
  begin
  --Joga de modo a ganhar o jogo!

  if jogou=false then
  --linhas.


  if tabuleiro(7)='X' and tabuleiro(8)='X' and tabuleiro(9)=' ' and jogou=false then jogou:=true; tabuleiro(9):='X'; end if;
  if tabuleiro(7)='X' and tabuleiro(9)='X' and tabuleiro(8)=' ' and jogou=false then jogou:=true; tabuleiro(8):='X'; end if;
  if tabuleiro(8)='X' and tabuleiro(9)='X' and tabuleiro(7)=' ' and jogou=false then jogou:=true; tabuleiro(7):='X'; end if;

  if tabuleiro(4)='X' and tabuleiro(5)='X' and tabuleiro(6)=' ' and jogou=false then jogou:=true; tabuleiro(6):='X'; end if;
  if tabuleiro(4)='X' and tabuleiro(6)='X' and tabuleiro(5)=' ' and jogou=false then jogou:=true; tabuleiro(5):='X'; end if;
  if tabuleiro(6)='X' and tabuleiro(5)='X' and tabuleiro(4)=' ' and jogou=false then jogou:=true; tabuleiro(4):='X'; end if;

  if tabuleiro(1)='X' and tabuleiro(2)='X' and tabuleiro(3)=' ' and jogou=false then jogou:=true; tabuleiro(3):='X'; end if;
  if tabuleiro(1)='X' and tabuleiro(3)='X' and tabuleiro(2)=' ' and jogou=false then jogou:=true; tabuleiro(2):='X'; end if;
  if tabuleiro(2)='X' and tabuleiro(3)='X' and tabuleiro(1)=' ' and jogou=false then jogou:=true; tabuleiro(1):='X'; end if;

   --colunas


  if tabuleiro(1)='X' and tabuleiro(4)='X' and tabuleiro(7)=' ' and jogou=false then jogou:=true; tabuleiro(7):='X'; end if;
  if tabuleiro(1)='X' and tabuleiro(7)='X' and tabuleiro(4)=' ' and jogou=false then jogou:=true; tabuleiro(4):='X'; end if;
  if tabuleiro(4)='X' and tabuleiro(7)='X' and tabuleiro(1)=' ' and jogou=false then jogou:=true; tabuleiro(1):='X'; end if;

  if tabuleiro(2)='X' and tabuleiro(5)='X' and tabuleiro(8)=' ' and jogou=false then jogou:=true; tabuleiro(8):='X'; end if;
  if tabuleiro(2)='X' and tabuleiro(8)='X' and tabuleiro(5)=' ' and jogou=false then jogou:=true; tabuleiro(5):='X'; end if;
  if tabuleiro(8)='X' and tabuleiro(5)='X' and tabuleiro(2)=' ' and jogou=false then jogou:=true; tabuleiro(2):='X'; end if;

  if tabuleiro(3)='X' and tabuleiro(6)='X' and tabuleiro(9)=' ' and jogou=false then jogou:=true; tabuleiro(9):='X'; end if;
  if tabuleiro(9)='X' and tabuleiro(3)='X' and tabuleiro(6)=' ' and jogou=false then jogou:=true; tabuleiro(6):='X'; end if;
  if tabuleiro(9)='X' and tabuleiro(6)='X' and tabuleiro(3)=' ' and jogou=false then jogou:=true; tabuleiro(3):='X'; end if;

  --diagonais.


  if tabuleiro(3)='X' and tabuleiro(5)='X' and tabuleiro(7)=' ' and jogou=false then jogou:=true; tabuleiro(7):='X'; end if;
  if tabuleiro(3)='X' and tabuleiro(7)='X' and tabuleiro(5)=' ' and jogou=false then jogou:=true; tabuleiro(5):='X'; end if;
  if tabuleiro(7)='X' and tabuleiro(5)='X' and tabuleiro(3)=' ' and jogou=false then jogou:=true; tabuleiro(3):='X'; end if;

  if tabuleiro(1)='X' and tabuleiro(5)='X' and tabuleiro(9)=' ' and jogou=false then jogou:=true; tabuleiro(9):='X'; end if;
  if tabuleiro(1)='X' and tabuleiro(9)='X' and tabuleiro(5)=' ' and jogou=false then jogou:=true; tabuleiro(5):='X'; end if;
  if tabuleiro(9)='X' and tabuleiro(5)='X' and tabuleiro(1)=' ' and jogou=false then jogou:=true; tabuleiro(1):='X'; end if;

  if jogou=true then derrotas:=derrotas+1; contador_ok:=true; atualiza_contador; end if;

  end if; --Fim do jogou=false.

  
  end fecha_para_ganhar;

   
  procedure fecha_para_trancar is
  begin
  if jogou=false then
  --linhas.


  if tabuleiro(7)='O' and tabuleiro(8)='O' and tabuleiro(9)=' ' and jogou=false then jogou:=true; tabuleiro(9):='X'; end if;
  if tabuleiro(7)='O' and tabuleiro(9)='O' and tabuleiro(8)=' ' and jogou=false then jogou:=true; tabuleiro(8):='X'; end if;
  if tabuleiro(8)='O' and tabuleiro(9)='O' and tabuleiro(7)=' ' and jogou=false then jogou:=true; tabuleiro(7):='X'; end if;

  if tabuleiro(4)='O' and tabuleiro(5)='O' and tabuleiro(6)=' ' and jogou=false then jogou:=true; tabuleiro(6):='X'; end if;
  if tabuleiro(4)='O' and tabuleiro(6)='O' and tabuleiro(5)=' ' and jogou=false then jogou:=true; tabuleiro(5):='X'; end if;
  if tabuleiro(6)='O' and tabuleiro(5)='O' and tabuleiro(4)=' ' and jogou=false then jogou:=true; tabuleiro(4):='X'; end if;

  if tabuleiro(1)='O' and tabuleiro(2)='O' and tabuleiro(3)=' ' and jogou=false then jogou:=true; tabuleiro(3):='X'; end if;
  if tabuleiro(1)='O' and tabuleiro(3)='O' and tabuleiro(2)=' ' and jogou=false then jogou:=true; tabuleiro(2):='X'; end if;
  if tabuleiro(2)='O' and tabuleiro(3)='O' and tabuleiro(1)=' ' and jogou=false then jogou:=true; tabuleiro(1):='X'; end if;

  --colunas


  if tabuleiro(1)='O' and tabuleiro(4)='O' and tabuleiro(7)=' ' and jogou=false then jogou:=true; tabuleiro(7):='X'; end if;
  if tabuleiro(1)='O' and tabuleiro(7)='O' and tabuleiro(4)=' ' and jogou=false then jogou:=true; tabuleiro(4):='X'; end if;
  if tabuleiro(4)='O' and tabuleiro(7)='O' and tabuleiro(1)=' ' and jogou=false then jogou:=true; tabuleiro(1):='X'; end if;

  if tabuleiro(2)='O' and tabuleiro(5)='O' and tabuleiro(8)=' ' and jogou=false then jogou:=true; tabuleiro(8):='X'; end if;
  if tabuleiro(2)='O' and tabuleiro(8)='O' and tabuleiro(5)=' ' and jogou=false then jogou:=true; tabuleiro(5):='X'; end if;
  if tabuleiro(8)='O' and tabuleiro(5)='O' and tabuleiro(2)=' ' and jogou=false then jogou:=true; tabuleiro(2):='X'; end if;

  if tabuleiro(3)='O' and tabuleiro(6)='O' and tabuleiro(9)=' ' and jogou=false then jogou:=true; tabuleiro(9):='X'; end if;
  if tabuleiro(9)='O' and tabuleiro(3)='O' and tabuleiro(6)=' ' and jogou=false then jogou:=true; tabuleiro(6):='X'; end if;
  if tabuleiro(9)='O' and tabuleiro(6)='O' and tabuleiro(3)=' ' and jogou=false then jogou:=true; tabuleiro(3):='X'; end if;

  --diagonais.


  if tabuleiro(3)='O' and tabuleiro(5)='O' and tabuleiro(7)=' ' and jogou=false then jogou:=true; tabuleiro(7):='X'; end if;
  if tabuleiro(3)='O' and tabuleiro(7)='O' and tabuleiro(5)=' ' and jogou=false then jogou:=true; tabuleiro(5):='X'; end if;
  if tabuleiro(7)='O' and tabuleiro(5)='O' and tabuleiro(3)=' ' and jogou=false then jogou:=true; tabuleiro(3):='X'; end if;

  if tabuleiro(1)='O' and tabuleiro(5)='O' and tabuleiro(9)=' ' and jogou=false then jogou:=true; tabuleiro(9):='X'; end if;
  if tabuleiro(1)='O' and tabuleiro(9)='O' and tabuleiro(5)=' ' and jogou=false then jogou:=true; tabuleiro(5):='X'; end if;
  if tabuleiro(9)='O' and tabuleiro(5)='O' and tabuleiro(1)=' ' and jogou=false then jogou:=true; tabuleiro(1):='X'; end if;

  end if; --Fim do jogou=false.

  end fecha_para_trancar;


  procedure joga_qualquer_um  is
     aleatorio:float;
     ainda_tem_vazio:boolean:=false;
  begin

  for a in 1..9 loop
     if tabuleiro(a)=' ' then ainda_tem_vazio:=true; 
     end if;
  end loop;
  
  if jogou=false and ainda_tem_vazio=true then
    loop
    aleatorio:=Random(G);
    --1,3,7,9 e principalmente 5 devem ser previlegiados!

    if aleatorio<=0.13 and jogou=false and tabuleiro(1)=' ' then tabuleiro(1):='X'; jogou:=true; end if;
    if aleatorio>0.13 and aleatorio<=0.21 and jogou=false and tabuleiro(2)=' ' then tabuleiro(2):='X'; jogou:=true; end if;	 if aleatorio>0.21 and aleatorio<=0.35 and jogou=false and tabuleiro(3)=' ' then tabuleiro(3):='X'; jogou:=true; end if;
    if aleatorio>0.35 and aleatorio<=0.4 and jogou=false and tabuleiro(4)=' ' then tabuleiro(4):='X'; jogou:=true; end if;	 if aleatorio>0.4 and aleatorio<=0.6 and jogou=false and tabuleiro(5)=' ' then tabuleiro(5):='X'; jogou:=true; end if;
    if aleatorio>0.6 and aleatorio<=0.65 and jogou=false and tabuleiro(6)=' ' then tabuleiro(6):='X'; jogou:=true; end if;	 if aleatorio>0.65 and aleatorio<=0.8 and jogou=false and tabuleiro(7)=' ' then tabuleiro(7):='X'; jogou:=true; end if;
    if aleatorio>0.8 and aleatorio<=0.86 and jogou=false and tabuleiro(8)=' ' then tabuleiro(8):='X'; jogou:=true; end if;
    if aleatorio<0.86 and jogou=false and tabuleiro(9)=' ' then tabuleiro(9):='X'; jogou:=true; end if;	    
	     

    exit when jogou=true;
    end loop;
  end if;
  end joga_qualquer_um;

  

  procedure joga is
  begin
  if fim=false then 	  
   jogou:=false;
   fecha_para_ganhar;
   fecha_para_trancar;
   joga_qualquer_Um;
  end if;
  end joga;

  procedure xeca_ganhador is
  begin
  if fim=false then
    if tabuleiro(7)='X' and tabuleiro(8)='X' and tabuleiro(9)='X' then Draw_Line(0,250,300,250,black); 
    Draw_Line(0,251,300,251,black); 
    Draw_Line(0,249,300,249,black); 
    fim:=true; 
    end if;
    if tabuleiro(7)='O' and tabuleiro(8)='O' and tabuleiro(9)='O' then Draw_Line(0,250,300,250,black); 
     Draw_Line(0,251,300,251,black); 
     Draw_Line(0,249,300,249,black);     
     fim:=true; 
     vitorias:=vitorias+1;
     atualiza_contador;
     contador_ok:=true;
    end if;	  

    if tabuleiro(4)='X' and tabuleiro(5)='X' and tabuleiro(6)='X' then Draw_Line(0,150,300,150,black); 
     Draw_Line(0,151,300,151,black); 
     Draw_Line(0,149,300,149,black); 
     fim:=true; 
    end if;
    if tabuleiro(4)='O' and tabuleiro(5)='O' and tabuleiro(6)='O' then Draw_Line(0,150,300,150,black); 
     Draw_Line(0,151,300,151,black); 
     Draw_Line(0,149,300,149,black); 
     fim:=true; 
     vitorias:=vitorias+1;
     atualiza_contador;
     contador_ok:=true;
    end if;	 

    if tabuleiro(1)='X' and tabuleiro(2)='X' and tabuleiro(3)='X' then Draw_Line(0,50,300,50,black); 
     Draw_Line(0,51,300,51,black);
     Draw_Line(0,49,300,49,black); 
     fim:=true; 
    end if;
    if tabuleiro(1)='O' and tabuleiro(2)='O' and tabuleiro(3)='O' then Draw_Line(0,50,300,50,black);
     Draw_Line(0,51,300,51,black);
     Draw_Line(0,49,300,49,black);
     fim:=true; 
     vitorias:=vitorias+1;
     atualiza_contador;
     contador_ok:=true;
    end if;

    if tabuleiro(7)='X' and tabuleiro(4)='X' and tabuleiro(1)='X' then Draw_Line(50,0,50,300,black);
      Draw_Line(51,0,51,300,black);
      Draw_Line(49,0,49,300,black);
      fim:=true;
    end if;
    if tabuleiro(7)='O' and tabuleiro(4)='O' and tabuleiro(1)='O' then Draw_Line(50,0,50,300,black); 
     Draw_Line(51,0,51,300,black);
     Draw_Line(49,0,49,300,black);
     fim:=true;
     vitorias:=vitorias+1;
     atualiza_contador;
     contador_ok:=true;
    end if;	  

    if tabuleiro(8)='X' and tabuleiro(5)='X' and tabuleiro(2)='X' then Draw_Line(150,0,150,300,black); 
      Draw_Line(151,0,151,300,black);
      Draw_Line(149,0,149,300,black);
      fim:=true; 
    end if;
    if tabuleiro(8)='O' and tabuleiro(5)='O' and tabuleiro(2)='O' then Draw_Line(150,0,150,300,black); 
     Draw_Line(151,0,151,300,black);
     Draw_Line(149,0,149,300,black);	    
     fim:=true; 
     vitorias:=vitorias+1;
     atualiza_contador;
     contador_ok:=true;
    end if;	 

    if tabuleiro(9)='X' and tabuleiro(6)='X' and tabuleiro(3)='X' then Draw_Line(250,0,250,300,black); fim:=true; 
     Draw_Line(251,0,251,300,black);
     Draw_Line(249,0,249,300,black);
    end if;
    if tabuleiro(9)='O' and tabuleiro(6)='O' and tabuleiro(3)='O' then Draw_Line(250,0,250,300,black); 
     Draw_Line(251,0,251,300,black);
     Draw_Line(249,0,249,300,black);	    
     fim:=true; 
     vitorias:=vitorias+1;
     atualiza_contador;
     contador_ok:=true;
    end if;


    if tabuleiro(7)='X' and tabuleiro(5)='X' and tabuleiro(3)='X' then Draw_Line(0,300,300,0,black); 
     Draw_Line(0,299,299,0,black);
     Draw_Line(1,300,300,1,black);
     fim:=true; end if;
    if tabuleiro(7)='O' and tabuleiro(5)='O' and tabuleiro(3)='O' then Draw_Line(0,300,300,0,black); 
     Draw_Line(0,299,299,0,black);
     Draw_Line(1,300,300,1,black);    
     fim:=true; 
     vitorias:=vitorias+1;
     atualiza_contador;
     contador_ok:=true;
    end if;

    if tabuleiro(1)='X' and tabuleiro(5)='X' and tabuleiro(9)='X' then Draw_Line(0,0,300,300,black); 
     Draw_Line(1,0,300,299,black);
     Draw_Line(0,1,299,300,black);
     fim:=true; 
    end if;
    if tabuleiro(1)='O' and tabuleiro(5)='O' and tabuleiro(9)='O' then Draw_Line(0,0,300,300,black); 
     Draw_Line(1,0,300,299,black);
     Draw_Line(0,1,299,300,black);
     fim:=true; 
     vitorias:=vitorias+1;
     atualiza_contador;
     contador_ok:=true;
    end if;
  end if;
  end xeca_ganhador;

  procedure desenhapecas is
  begin
  --Isso desenha as pecas na janela do windows.

	
    if tabuleiro(1)='O' then bola(50,50); end if;
    if tabuleiro(1)='X' then xis(50,50); end if;	    
    if tabuleiro(2)='O' then bola(150,50); end if;
    if tabuleiro(2)='X' then xis(150,50); end if;
    if tabuleiro(3)='O' then bola(250,50); end if;
    if tabuleiro(3)='X' then xis(250,50); end if;

    if tabuleiro(4)='O' then bola(50,150); end if;
    if tabuleiro(4)='X' then xis(50,150); end if;	    
    if tabuleiro(5)='O' then bola(150,150); end if;
    if tabuleiro(5)='X' then xis(150,150); end if;
    if tabuleiro(6)='O' then bola(250,150); end if;
    if tabuleiro(6)='X' then xis(250,150); end if;

    if tabuleiro(7)='O' then bola(50,250); end if;
    if tabuleiro(7)='X' then xis(50,250); end if;	    
    if tabuleiro(8)='O' then bola(150,250); end if;
    if tabuleiro(8)='X' then xis(150,250); end if;
    if tabuleiro(9)='O' then bola(250,250); end if;
    if tabuleiro(9)='X' then xis(250,250); end if;

    xeca_ganhador;

  end desenhapecas;


  procedure novo is
  begin
    clear_window;
    desenhatabuleiro;
    fim:=false;
    jogos:=jogos+1;
    if contador_ok=false then
	 derrotas:=derrotas+1;
    end if;
    atualiza_contador;
    contador_ok:=false;

    if    o_color=black         then  draw_box(301,1,324,12);              
    elsif o_color=blue          then  draw_box(301,12,324,24);           
    elsif o_color=green         then  draw_box(301,24,324,36);         
    elsif o_color=cyan          then  draw_box(301,36,324,48);         
    elsif o_color=red           then  draw_box(301,48,324,60);         
    elsif o_color=magenta       then  draw_box(301,60,324,72);         
    elsif o_color=brown         then  draw_box(301,72,324,84);          
    elsif o_color=light_gray    then  draw_box(301,84,324,96);      
    elsif o_color=dark_gray     then draw_box(301,96,324,108);      
    elsif o_color=light_blue    then draw_box(301,108,324,120);    
    elsif o_color=light_green   then draw_box(301,120,324,132);   
    elsif o_color=light_cyan    then draw_box(301,132,324,144);    
    elsif o_color=light_red     then draw_box(301,144,324,156);     
    elsif o_color=light_magenta then draw_box(301,156,324,168); 
    elsif o_color=yellow        then draw_box(301,168,324,180);       
    end if;


    if    x_color=black         then  draw_box(326,1,349,12);              
    elsif x_color=blue          then  draw_box(326,12,349,24);           
    elsif x_color=green         then  draw_box(326,24,349,36);         
    elsif x_color=cyan          then  draw_box(326,36,349,48);         
    elsif x_color=red           then  draw_box(326,48,349,60);         
    elsif x_color=magenta       then  draw_box(326,60,349,72);         
    elsif x_color=brown         then  draw_box(326,72,349,84);          
    elsif x_color=light_gray    then  draw_box(326,84,349,96);      
    elsif x_color=dark_gray     then draw_box(326,96,349,108);      
    elsif x_color=light_blue    then draw_box(326,108,349,120);    
    elsif x_color=light_green   then draw_box(326,120,349,132);   
    elsif x_color=light_cyan    then draw_box(326,132,349,144);    
    elsif x_color=light_red     then draw_box(326,144,349,156);     
    elsif x_color=light_magenta then draw_box(326,156,349,168); 
    elsif x_color=yellow        then draw_box(326,168,349,180);       
    end if;

    
  end novo;

  procedure sair is
  begin
     sairdojogo:=true;
  end sair;

  procedure va is
  begin
   joga;
   desenhapecas;
  end va;

  procedure salva is
   arquivo:file_type;
  begin
   create(arquivo,out_file,"tictac.svd");
    if    o_color=black         then put(arquivo,'a');              
    elsif o_color=blue          then put(arquivo,'b');            
    elsif o_color=green         then put(arquivo,'c');          
    elsif o_color=cyan          then put(arquivo,'d');          
    elsif o_color=red           then put(arquivo,'e');          
    elsif o_color=magenta       then put(arquivo,'f');         
    elsif o_color=brown         then put(arquivo,'g');           
    elsif o_color=light_gray    then put(arquivo,'h');       
    elsif o_color=dark_gray     then put(arquivo,'i');      
    elsif o_color=light_blue    then put(arquivo,'j');    
    elsif o_color=light_green   then put(arquivo,'k');  
    elsif o_color=light_cyan    then put(arquivo,'l');   
    elsif o_color=light_red     then put(arquivo,'m');     
    elsif o_color=light_magenta then put(arquivo,'n');
    elsif o_color=yellow        then put(arquivo,'o');      
    end if;

    if    x_color=black         then put(arquivo,'a');              
    elsif x_color=blue          then put(arquivo,'b');            
    elsif x_color=green         then put(arquivo,'c');          
    elsif x_color=cyan          then put(arquivo,'d');          
    elsif x_color=red           then put(arquivo,'e');          
    elsif x_color=magenta       then put(arquivo,'f');          
    elsif x_color=brown         then put(arquivo,'g');           
    elsif x_color=light_gray    then put(arquivo,'h');       
    elsif x_color=dark_gray     then put(arquivo,'i');      
    elsif x_color=light_blue    then put(arquivo,'j');    
    elsif x_color=light_green   then put(arquivo,'k');   
    elsif x_color=light_cyan    then put(arquivo,'l');    
    elsif x_color=light_red     then put(arquivo,'m');     
    elsif x_color=light_magenta then put(arquivo,'n'); 
    elsif x_color=yellow        then put(arquivo,'o');       
    end if;

   for a in 1..9 loop
    put(arquivo,tabuleiro(a));
   end loop;

   put(arquivo,jogos);
   put(arquivo,vitorias);
   put(arquivo,derrotas);
   put(arquivo,empates);
   
   close(arquivo);
  end salva;

  procedure carrega is
   arquivo:file_type;
   a,b:character;
  begin
    	  
   open(arquivo,in_file,"tictac.svd");
   
    get(arquivo,a);
    
    get(arquivo,b);

    if    a='a' then o_color:=black;                    
    elsif a='b' then o_color:=blue;                     
    elsif a='c' then o_color:=green;                  
    elsif a='d' then o_color:=cyan;                   
    elsif a='e' then o_color:=red;                    
    elsif a='f' then o_color:=magenta;               
    elsif a='g' then o_color:=brown;                   
    elsif a='h' then o_color:=light_gray;          
    elsif a='i' then o_color:=dark_gray;          
    elsif a='j' then o_color:=light_blue;       
    elsif a='k' then o_color:=light_green;    
    elsif a='l' then o_color:=light_cyan;      
    elsif a='m' then o_color:=light_red;         
    elsif a='n' then o_color:=light_magenta;
    elsif a='o' then o_color:=yellow;      
    end if;

    if    b='a' then x_color:=black;                    
    elsif b='b' then x_color:=blue;                     
    elsif b='c' then x_color:=green;                  
    elsif b='d' then x_color:=cyan;                   
    elsif b='e' then x_color:=red;                    
    elsif b='f' then x_color:=magenta;               
    elsif b='g' then x_color:=brown;                   
    elsif b='h' then x_color:=light_gray;          
    elsif b='i' then x_color:=dark_gray;          
    elsif b='j' then x_color:=light_blue;       
    elsif b='k' then x_color:=light_green;    
    elsif b='l' then x_color:=light_cyan;      
    elsif b='m' then x_color:=light_red;         
    elsif b='n' then x_color:=light_magenta;
    elsif b='o' then x_color:=yellow;      
    end if;
  
   novo;
   
   for a in 1..9 loop
    get(arquivo,tabuleiro(a));
   end loop;
  
   desenhapecas;

   get(arquivo,jogos);
   get(arquivo,vitorias);
   get(arquivo,derrotas);
   get(arquivo,empates);
   
   close(arquivo);
   atualiza_contador;
  end carrega;	  

  

begin --incio do programa.


Reset (G); 
--Tem de ver com os numeros aleatorios.

open_graph_window(350,340);
--Abre a janela.


desenhatabuleiro;
draw_box(301,24,324,36);   
draw_box(326,108,349,120);


loop      --Inicio do loop do jogo.

	
--7 8 9

--4 5 6

--1 2 3

if tabuleiro(1)/=' ' and tabuleiro(2)/=' ' and tabuleiro(3)/=' ' and
   tabuleiro(4)/=' ' and tabuleiro(5)/=' ' and tabuleiro(6)/=' ' and
   tabuleiro(7)/=' ' and tabuleiro(8)/=' ' and tabuleiro(9)/=' ' and contador_ok=false 
then
   empates:=empates+1;
   contador_ok:=true;
   atualiza_contador;
end if;

loop 
sairdomouse:=true;
--Isso captura o botao do mouse.

get_mouse_Button(Left_Button,Mouse_X,Mouse_Y);
if mouse_x<100 then 	
   if mouse_y<100 and tabuleiro(1)=' ' and fim=false then
       tabuleiro(1):='O';
   elsif mouse_y<200 and tabuleiro(4)=' ' and fim=false then
       tabuleiro(4):='O';
   elsif mouse_y<300 and tabuleiro(7)=' ' and fim=false then
       tabuleiro(7):='O';
   elsif mouse_y>300 and mouse_y<320 then
       novo;
       sairdomouse:=false;
   else 
       sairdomouse:=false;
   end if;
elsif mouse_x<200 then
   if mouse_y<100 and tabuleiro(2)=' ' and fim=false then
       tabuleiro(2):='O';
   elsif mouse_y<200 and tabuleiro(5)=' ' and fim=false then
       tabuleiro(5):='O';
   elsif mouse_y<300 and tabuleiro(8)=' ' and fim=false then
       tabuleiro(8):='O';
   elsif mouse_y>300 and mouse_y<320 then
       va;
       sairdomouse:=false;
   else
       sairdomouse:=false;
   end if;
elsif mouse_x<300 then
   if mouse_y<100 and tabuleiro(3)=' ' and fim=false then
       tabuleiro(3):='O';
   elsif mouse_y<200 and tabuleiro(6)=' ' and fim=false then
       tabuleiro(6):='O';
   elsif mouse_y<300 and tabuleiro(9)=' ' and fim=false then
       tabuleiro(9):='O';
   elsif mouse_y>300 and mouse_y<320 then
       sair;
   else
       sairdomouse:=false;
   end if;
elsif mouse_x<325 and mouse_x>301 then
    if mouse_y<12 then  limpa_cores_o; draw_box(301,1,324,12);         o_color:=black;     desenhapecas;
    elsif mouse_y<24 then  limpa_cores_o;draw_box(301,12,324,24);      o_color:=blue;      desenhapecas;
    elsif mouse_y<36 then  limpa_cores_o;draw_box(301,24,324,36);      o_color:=green;     desenhapecas;
    elsif mouse_y<48 then  limpa_cores_o;draw_box(301,36,324,48);      o_color:=cyan;      desenhapecas;
    elsif mouse_y<60 then  limpa_cores_o;draw_box(301,48,324,60);      o_color:=red;       desenhapecas;
    elsif mouse_y<72 then limpa_cores_o; draw_box(301,60,324,72);      o_color:=magenta;   desenhapecas;
    elsif mouse_y<84 then limpa_cores_o; draw_box(301,72,324,84);      o_color:=brown;     desenhapecas;
    elsif mouse_y<96 then limpa_cores_o; draw_box(301,84,324,96);      o_color:=light_gray;    desenhapecas;
    elsif mouse_y<108 then limpa_cores_o; draw_box(301,96,324,108);    o_color:=dark_gray;     desenhapecas;
    elsif mouse_y<120 then limpa_cores_o; draw_box(301,108,324,120);   o_color:=light_blue;    desenhapecas;
    elsif mouse_y<132 then limpa_cores_o; draw_box(301,120,324,132);   o_color:=light_green;   desenhapecas;
    elsif mouse_y<144 then limpa_cores_o; draw_box(301,132,324,144);   o_color:=light_cyan;    desenhapecas;
    elsif mouse_y<156 then limpa_cores_o; draw_box(301,144,324,156);   o_color:=light_red;     desenhapecas;
    elsif mouse_y<168 then limpa_cores_o; draw_box(301,156,324,168);   o_color:=light_magenta; desenhapecas;
    elsif mouse_y<180 then limpa_cores_o; draw_box(301,168,324,180);   o_color:=yellow;        desenhapecas;
    elsif mouse_y>262 and mouse_y<299 then flood_fill(302,263,light_gray); carrega; delay(0.05);
	    flood_fill(302,263,brown);  display_text(301,275," load");
    elsif mouse_y>302 and mouse_y<339 then flood_fill(302,303,light_gray); salva; delay(0.05); 
	    flood_fill(302,303,brown);  display_text(301,315," save");
    else
	null; -- More things to be created!!!

    end if;


   -- draw_box(301,262,349,299,brown,true);

   -- draw_box(301,302,349,339,brown,true);


 sairdomouse:=false;
elsif mouse_x>324 then
    if mouse_y<12 then limpa_cores_x; draw_box(326,1,349,12);               x_color:=black;          desenhapecas;
    elsif mouse_y<24 then limpa_cores_x; draw_box(326,12,349,24);           x_color:=blue;          desenhapecas;
    elsif mouse_y<36 then limpa_cores_x; draw_box(326,24,349,36);           x_color:=green;         desenhapecas;
    elsif mouse_y<48 then limpa_cores_x; draw_box(326,36,349,48);           x_color:=cyan;          desenhapecas;
    elsif mouse_y<60 then limpa_cores_x; draw_box(326,48,349,60);           x_color:=red;           desenhapecas;
    elsif mouse_y<72 then limpa_cores_x; draw_box(326,60,349,72);           x_color:=magenta;       desenhapecas;
    elsif mouse_y<84 then limpa_cores_x; draw_box(326,72,349,84);           x_color:=brown;         desenhapecas;
    elsif mouse_y<96 then limpa_cores_x; draw_box(326,84,349,96);           x_color:=light_gray;    desenhapecas;
    elsif mouse_y<108 then limpa_cores_x; draw_box(326,96,349,108);         x_color:=dark_gray;     desenhapecas;
    elsif mouse_y<120 then limpa_cores_x; draw_box(326,108,349,120);        x_color:=light_blue;    desenhapecas;
    elsif mouse_y<132 then limpa_cores_x; draw_box(326,120,349,132);        x_color:=light_green;   desenhapecas;
    elsif mouse_y<144 then limpa_cores_x; draw_box(326,132,349,144);        x_color:=light_cyan;    desenhapecas;
    elsif mouse_y<156 then limpa_cores_x; draw_box(326,144,349,156);        x_color:=light_red;     desenhapecas;
    elsif mouse_y<168 then limpa_cores_x; draw_box(326,156,349,168);        x_color:=light_magenta; desenhapecas;
    elsif mouse_y<180 then limpa_cores_x; draw_box(326,168,349,180);        x_color:=yellow;        desenhapecas;
    elsif mouse_y>262 and mouse_y<299 then flood_fill(302,263,light_gray); carrega; delay(0.05); 
	    flood_fill(302,263,brown);  display_text(301,275," load");
    elsif mouse_y>302 and mouse_y<339 then flood_fill(302,303,light_gray); salva; delay(0.05); 
	    flood_fill(302,303,brown);  display_text(301,315," save");
    else
	null; -- More things to be created!!!

    end if;


    --draw_box(301,262,349,299,brown,true);

    --draw_box(301,302,349,339,brown,true);

    
 sairdomouse:=false;
	
end if;
exit when sairdomouse=true;
end loop;

--Isso desenha as pecas na janela do windows.

desenhapecas;

if tabuleiro(1)/=' ' and tabuleiro(2)/=' ' and tabuleiro(3)/=' ' and
   tabuleiro(4)/=' ' and tabuleiro(5)/=' ' and tabuleiro(6)/=' ' and
   tabuleiro(7)/=' ' and tabuleiro(8)/=' ' and tabuleiro(9)/=' ' and contador_ok=false 
then
   empates:=empates+1;
   contador_ok:=true;
   atualiza_contador;
end if;

exit when sairdojogo=true;

--Isso joga!


joga;

desenhapecas;

exit when sairdojogo=true;

--Isso desenha as pecas na janela do windows.


end loop; --Fim do loop do jogo.


end tictac;


syntax highlighted by Code2HTML, v. 0.9