Sudoku pascal

Contenu du snippet

on est arrivé à la nouvelle version de SUDOKU pascal,
aprés une longue periode d'étude bien sur , j'ai l'honneur de vous porté l'un de mes travaux, on tout les cas, c'est mon projet de fin d'année issi en Alger,,,,
bon, pour le moment il y a un seul problème ,concernant le graphe ne paniquer pas , sa plante pas essayer le et donner votre avis ,,,,,,,,,

Source / Exemple :


{ ce n'est pas facile de le faire , mais oui, il faut la dire,,;,,,
  editeur: Louifi abdelmoumene ( c'est moi )
           benzouaoui mohamed ( c lui (binome))
       louis_fi@hotmail.com // si vous voullez me contacter ?,,,
  passez un agréable moment sur mon pro ( nos pro pardon )*
 }
program sud_solver;
uses crt,graph;

type tab=array[1..9,1..9]of integer;

type grille=record
     tableau:tab;
             nom_fichier:string[15];
             mot_de_passe:longint;
             end;

const chemin : string = 'C:\tmp\';
var ligne, colonne, i, j, cpt : integer;
    colonne0, ligne0 : integer;
    code,mode:integer;
    s, sav ,res : array [1..9,1..9] of integer;
    init : array [1..9,1..9] of boolean;
    fin, impossible : boolean;
    compteur, vide ,cpt1: integer;
    u:string;
    c,quit:char;
    suite,appel:boolean;

{############################################################################################################################}

{----------------------------------------------------------------}
{-----               LA PAGE1 DE REPRESENTATION             -----}
{----------------------------------------------------------------}
procedure _page;

BEGIN
{ .... cette boucle permet d'afficher les ?toiles .... }
repeat
putpixel(random(1000),random(600),random(200));
i:=i+1;
if i>600 then
   begin
   i:=0;
   j:=j+1;
   end;
delay(1);
until j=20;

{ .... dessiner le cadre .... }
setcolor(9);
rectangle(15,15,623,463);
rectangle(16,16,622,462);
rectangle(16,75,41,103);
rectangle(16,76,40,102);
rectangle(598,75,622,103);
rectangle(599,76,622,102);
rectangle(15,432,123,463);
rectangle(16,433,122,462);
rectangle(501,432,623,463);
rectangle(502,433,622,462);
rectangle(126,432,498,433);
rectangle(126,435,498,435);
rectangle(126,460,498,460);

{ .... effacer les ?toiles qui g?nent .... }
setcolor(0);
for i:=0 to 301 do   rectangle(319-i,17,319+i,48);
for i:=0 to 277 do   rectangle(319-i,77,319+i,101);
for i:=1 to 185 do   rectangle(312-i,436,311+i,459);

{ .... afficher les trois grands titres de cette page .... }

{ .... le premier .... }
setcolor(12);
settextstyle(7,0,1);
moveto(20,20);
u:='LA REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE';
for i:=1 to length(u) do
   begin
   outtext(u[i]);
   delay(40);
   end;
{ .... cette boucle pour encadrer ce titre ...
       ... c'est la m?me chose pour les deux autres titre .... }
setcolor(9);
for i:=1 to 300 do
    begin
    rectangle(17,49,20+i,49);
    rectangle(17,48,20+i,48);
    rectangle(621-i,49,621,49);
    rectangle(621-i,48,621,48);
    delay(3);
    end;

{ .... le deuxi?me .... }
setcolor(12);
settextstyle(8,0,1);
moveto(50,74);
u:='INSTITUT NATIONAL DE FORMATION EN INFORMATIQUE';
for i:=1 to length(u) do
   begin
   outtext(u[i]);
   delay(40);
   end;
setcolor(9);
for i:=1 to 278 do
    begin
    rectangle(319-i,75,319+i,76);
    rectangle(319-i,103,319+i,102);
    delay(3);
    end;

{ .... et le troisi?me .... }
setcolor(10);
settextstyle(7,0,4);
moveto(75,160);
u:='PROJET DU FIN DE L`ANNEE';
for i:=1 to length(u) do
   begin
   outtext(u[i]);
   delay(60);
   end;
for i:=1 to 4 do
    begin
    setcolor(10);
    outtextxy(75+i,160+i,'PROGET DU FIN DE L`ANNEE');
    setcolor(green);
    outtextxy(75,160,'PROGET DU FIN DE L`ANNEE');
    delay(35);
    end;

{ .... ce que je vais faire c'est pour preparer
          le chemin pour les noms de binome , rien d'autre .... }
setcolor(0);
for i:=0 to 38 do
    begin
    rectangle(134,391-i,503,391+i);
    delay(20);
    end;

{ .... dans la suite , vous trouvez l'appelle de toutes
               les informations nec?ssaires sur le binome ...
                          ... elles sont dans l'ordre suivant : .... }

{d'abord , les noms des amis formant le binome}
for i:=1 to 85 do
         begin
         setcolor(9);
         settextstyle(7,0,1);
         outtextxy(240,379-i,'BENZOUAOUI_MOHAMED');
         outtextxy(240,401-i,'LOUIFI_ABDELMOUMEN');
         setcolor(0);
         outtextxy(240,380-i,'BENZOUAOUI_MOHAMED');
         outtextxy(240,402-i,'LOUIFI_ABDELMOUMEN');
         settextstyle(7,0,1);
         setcolor(12);
         outtextxy(i+53,260,'REALISER PAR :');
         setcolor(0);
         outtextxy(i+52,260,'REALISER PAR :');
         delay(1);
         end;
{ .... encadrer les noms .... }
setcolor(10);
rectangle(129,351,506,250);
rectangle(128,352,507,249);

{ .... cette boucle est faite pour netoyer
             les ?toiles qui existent dans le cadre .... }
for j:=1 to 50 do
    begin
    setcolor(0);
    rectangle(130,350,505,250+j);
    rectangle(130,350-j,505,350);
    settextstyle(7,0,1);
    setcolor(1);
    outtextxy(241,380-i,'BENZOUAOUI_MOHAMED');
    outtextxy(242,402-i,'LOUIFI_ABDELMOUMEN');
    outtextxy(242,381-i,'BENZOUAOUI_MOHAMED');
    outtextxy(242,403-i,'LOUIFI_ABDELMOUMEN');
    setcolor(9);
    outtextxy(240,379-i,'BENZOUAOUI_MOHAMED');
    outtextxy(240,401-i,'LOUIFI_ABDELMOUMEN');
    settextstyle(7,0,1);
    setcolor(red);
    outtextxy(i+53,260,'REALISER PAR :');
    outtextxy(i+54,261,'REALISER PAR :');
    setcolor(12);
    outtextxy(i+52,259,'REALISER PAR :');
    delay(1);
    end;

{ .... et l? , le goupe et la section ...
          ... on se prepare pour les appeler .... }
setcolor(10);
for i:=0 to 350 do
    begin
    rectangle(145,410,145+i,410);
    rectangle(145,413,145+i,413);
    rectangle(145,375,145+i,375);
    rectangle(145,378,145+i,378);
    delay(5);
    end;
{ .... l'appelle est effectu?e en partie comme suite .... }
for i:=0 to 350 do
         begin
         setcolor(red);
         delay(15);
         rectangle(145,410,145+i,413);
         rectangle(145,375,145+i,378);
         case i of
              80:  begin
                   setcolor(1);
                   outtextxy(147,381,'SECTION :');
                   outtextxy(148,382,'SECTION :');
                   setcolor(9);
                   outtextxy(146,380,'SECTION :');
                   end;
              130: begin
                   setcolor(red);
                   outtextxy(261,381,'B');
                   outtextxy(262,382,'B');
                   setcolor(12);
                   outtextxy(260,380,'B');
                   end;
              180: begin
                   setcolor(10);
                   outtextxy(310,380,'/');
                   end;
              285: begin
                   setcolor(1);
                   outtextxy(371,381,'GROUPE :');
                   outtextxy(372,382,'GROUPE :');
                   setcolor(9);
                   outtextxy(370,380,'GROUPE :');
                   end;
              330: begin
                   setcolor(red);
                   outtextxy(474,381,'07');
                   outtextxy(475,382,'07');
                   setcolor(12);
                   outtextxy(473,380,'07');
                   end;
              end;
         end;

{ .... ce qui reste est ajout? pour finir la page .... }
repeat setcolor(red);
       outtextxy(160,434,'VEUILLEZ APPUYER SUR ENTER');
       delay(0);
       setcolor(10);
       outtextxy(160,434,'VEUILLEZ APPUYER SUR ENTER');
       delay(0);
until keypressed;

END;
{################################################################################}

procedure afficher(u:string);
var  i,j:longint;
begin

setcolor(10);
settextstyle(1,0,3);
moveto(210,50);
for i:=1 to length(u) do
    begin
    outtext(u[i]);
    delay(30);
    end;

setcolor(3);
rectangle(168,110,475,417);
setcolor(lightgreen);
i:=34;  j:=34;
repeat   rectangle(136+i,78+j,167+i,109+j);
         delay(30);
         i:=i+34;
         if i=340 then
            begin
            j:=j+34;
            i:=34;
            end;
until j=340;
i:=0;     j:=0;
setcolor(3);
repeat   rectangle(169+i,111+j,270+i,212+j);
         i:=i+102;
         if i=306 then
            begin
            j:=j+102;
            i:=0;
            end;
until j=306;

for i:=1 to 9 do
    for j:=1 to 9 do
        if s[i,j]<>0 then
           begin
           str(s[i,j],u);
           setcolor(1);
           settextstyle(7,0,1);
           outtextxy(147+i*34,82+j*34,u);
           delay(20);
           end;
end;

{############################################################################################################################}

procedure jouer;
var i,j,x:longint;
    t:string;
    d:integer;

begin
t:='';
i:=34;  j:=34;
setcolor(11);
rectangle(136+i,78+j,167+i,109+j);

repeat            if not init[i div 34,j div 34] then
         repeat   setcolor(9);
                  rectangle(147+i,103+j,156+i,104+j);
                  delay(10);
                  setcolor(white);
                  rectangle(147+i,103+j,156+i,104+j);
                  delay(10);
         until keypressed;

         c:=readkey;
         case c of
         #77:   begin
                setcolor(9);
                rectangle(147+i,103+j,156+i,104+j);
                setcolor(lightgreen);
                rectangle(136+i,78+j,167+i,109+j);
                i:=i+34;
                if i=340 then   i:=34;
                end;
         #75:   begin
                setcolor(9);
                rectangle(147+i,103+j,156+i,104+j);
                setcolor(lightgreen);
                rectangle(136+i,78+j,167+i,109+j);
                i:=i-34;
                if i=0 then   i:=306;
                end;
         #80:   begin
                setcolor(9);
                rectangle(147+i,103+j,156+i,104+j);
                setcolor(lightgreen);
                rectangle(136+i,78+j,167+i,109+j);
                j:=j+34;
                if j=340 then   j:=34;
                end;
         #72:   begin
                setcolor(9);
                rectangle(147+i,103+j,156+i,104+j);
                setcolor(lightgreen);
                rectangle(136+i,78+j,167+i,109+j);
                j:=j-34;
                if j=0 then   j:=306;
                end;
         #8:   begin
               if not init[i div 34,j div 34] then
                  begin
                  setfillstyle(0,1);
                  bar(140+i,80+j,164+i,101+j);
                  s[i div 34,j div 34]:=0;
                  end
               else
                   begin
                   setcolor(red);
                   outtextxy(100,20,'ERREUR');
                   end;
               end;
         '1'..'9': begin
                   if not init[i div 34,j div 34] then
                     begin
                     t:=c;
                     setfillstyle(0,1);
                     bar(140+i,80+j,164+i,101+j);
                     val(t, s[i div 34,j div 34] ,d);
                     setcolor(12);
                     settextstyle(7,0,1);
                     outtextxy(147+i,82+j,t);
                     end
                   else
                       begin
                       setcolor(red);
                       outtextxy(250,400,'ERREUR');
                       end;
                   end;

         end;
                                      {77:d,75:g,72:h,80:b,13:entr,27:esc,8:ret}
         setcolor(11);
         rectangle(136+i,78+j,167+i,109+j);

until (c=#13);
setcolor(9);
rectangle(147+i,103+j,156+i,104+j);

end;

{############################################################################################################################}

{############################################################################################################################}

function verif_ligne(li : integer) : boolean;
var t : array [0..9] of integer; j : integer;
begin
     for j := 1 to 9 do t[j] := 0;
     for j := 1 to 9 do t[s[li,j]] := t[s[li,j]] + 1;
     verif_ligne := true;
     for j := 1 to 9 do
         if t[j] > 1 then verif_ligne := false;
end;

{############################################################################################################################}

function verif_colonne(co : integer) : boolean;
var t : array [0..9] of integer; j : integer;
begin
     for j := 1 to 9 do t[j] := 0;
     for j := 1 to 9 do t[s[j,co]] := t[s[j,co]] + 1;
     verif_colonne := true;
     for j := 1 to 9 do
         if t[j] > 1 then verif_colonne := false;
end;

{############################################################################################################################}

function verif_carre (li, co : integer) : boolean;
var t : array [0..9] of integer; ch, cv, j  : integer;
begin
     cv := (li-1) div 3;
     ch := (co-1) div 3;
     for j := 1 to 9 do t[j] := 0;
     for co := 1 to 3 do
          for li := 1 to 3 do
              t[s[li+cv*3,co+ch*3]] := t[s[li+cv*3,co+ch*3]] + 1;
     verif_carre := true;
     for j := 1 to 9 do
         if t[j] > 1 then verif_carre := false;
end;

{################################################################################################################}

function avancer : boolean;
var t: boolean;
begin
   if colonne = 9 then begin
      ligne := ligne + 1;
      colonne := 1;
   end else
      colonne := colonne + 1;
   if ligne = 10 then t := false
   else t := true;
   avancer := t;
   if init[ligne,colonne] and t then avancer := avancer;
end;

{#################################################################################################################}

function reculer : boolean;
var t : boolean;
begin
   if colonne = 1 then begin
      ligne := ligne - 1;
      colonne := 9;
   end else
      colonne := colonne - 1;
   if ligne = 0 then begin
      t := false;
   end else t := true;
   reculer := t;
   if init[ligne,colonne] and t then reculer := reculer;
end;

{###############################################################################################################}

function sudoku : boolean;
begin
fin := false; impossible := false;
while not fin and not impossible do begin
   if s[ligne,colonne] < 9 then begin
      repeat
         s[ligne,colonne] := s[ligne,colonne] + 1;
      until (verif_ligne(ligne) and verif_colonne(colonne)
                  and verif_carre(ligne,colonne))
               or (s[ligne,colonne] = 10);
      if s[ligne,colonne] < 10 then fin := not avancer;
   end else begin
      s[ligne,colonne] := 0;
      impossible := not reculer;
   end;
end;
if fin then sudoku := true;
if impossible then sudoku := false;

end;

{################################################################################################################}

function verif : boolean;
var t : boolean;
begin
   t := true;
   for ligne := 1 to 9 do
      for colonne := 1 to 9 do begin
         t := t and verif_ligne(ligne);
         t := t and verif_colonne(colonne);
         t := t and verif_carre(ligne,colonne);
      end;
   verif := t;
end;

{################################################################################################################}

procedure generer;
  var vide:integer;
begin
   randomize;
   vide:=18;
   repeat
      repeat
         for ligne := 1 to 9 do
            for colonne :=1 to 9 do begin
               s[ligne,colonne] := 0;
               init[ligne,colonne] := false;
            end;
         for i := 1 to 10 do begin
            ligne := random(9) + 1;
            colonne := random(9) + 1;
            s[ligne,colonne] := random(9) + 1;
            init[ligne,colonne] := true;
         end;
      until verif;
      ligne := 0; colonne := 9;
      avancer;
   until sudoku;

for i:=1 to 9do
    for j:=1 to 9 do
        begin
        sav[i,j]:=s[i,j];
        init[i,j]:=true;
        end;

for i:=1 to 9 do
    for j:=1 to 9 do
        begin
        str(s[i,j],u);
        outtextxy(20+i*15,20+j*15,u);
        end;
cpt:=0;
while cpt<vide do
        begin
        i:=random(9)+1;
        j:=random(9)+1;
        if s[i,j]<> 0 then
           begin
           s[i,j]:=0;
           init[i,j]:=false;
           cpt:=cpt+1;
           s[10-i,10-j]:=0;
           init[10-i,10-j]:=false;
           end;
        end;
for i:=1 to 9 do
    for j:=1 to 9 do
        if s[i,j]=0 then   res[i,j]:=sav[i,j]
        else
            res[i,j]:=0;
end;

{################################################################################################################}

Procedure page_demarrage;

var           i,y:integer;
              s,q,l:string;

     begin

           textcolor(11);
           setfillstyle(1,2);
           outtextxy(220,30,' Patientez svp ');
           setcolor(10);
           rectangle(210,40,365,43);
           setcolor(white);
           i:=1;
               repeat
                i:=i+1;
                bar(210,40,251+i*2,43);
                delay(80);
                until (i>56);
               
               delay(100);
      end;

{################################################################################################################}

procedure help;
var k:integer;
begin

    k:=0;
     for i:=1 to 9 do
         for j:=1 to 9 do
             if s[i,j]=0 then k:=k+1;
     if k>3 then k:=1;
     for cpt:=1 to k do
         begin
         i:=random(9)+1;
         j:=random(9)+1;
         if s[i,j]=0 then
            begin
            str(res[i,j],u);
            s[i,j]:=res[i,j];
            init[i,j]:=true;
            setcolor(10);
            settextstyle(7,0,1);
            outtextxy(147+i*34,82+j*34,u);
            end
         else cpt:=cpt-1;
         end;
     
  
     for i:=1 to 9 do
         for j:=1 to 9 do
             begin
             if (s[i,j]<>0) and (res[i,j]<>0) then
                begin
                if s[i,j]=res[i,j] then
                   begin
                   setcolor(10);
                   init[i,j]:=true;
                   end
                else
                    setcolor(red);
                str(s[i,j],u);
                settextstyle(7,0,1);
                outtextxy(147+i*34,82+j*34,u);
                end;

     end;
end;

{################################################################################################################}

procedure solution;
var i,j:integer;
 begin
      for i:=1 to 9 do begin
          for j:=1 to 9 do
              begin
              setfillstyle(0,1);
              bar(140+i*34,80+j*34,164+i*34,101+j*34);
              str(sav[i,j],u);
              setcolor(lightgreen);
              delay(20);
              settextstyle(7,0,1);
              outtextxy(147+i*34,82+j*34,u);
              end;
      end;
end;

{#################################################################################################################}

procedure save_partie(t:tab);

label donnes;
var 
   fichier:file of grille;
   sav1,sav2:grille;
   n,a:char;
   chaine,ch,cle:string;
   i,r,q,j:longint;c:integer;
   bool:boolean;

  begin

  clearDevice;
{ tout ce qui vien concerne l'interface de cette procedure }

   setcolor(blue);
             rectangle(10,10,600,470);
             rectangle(12,12,600-2,470-2);

   setcolor(blue);
             rectangle(85,120,500,170);
             rectangle(84,119,501,171);

   setcolor(9);

             OutTextXY(90,130,'Nom de fichier:');
             OutTextxy(90,150,'Cl?           :');
   setcolor(red);
            rectangle(210,125,450,140);
            rectangle(210,145,450,160);
  { note importante }
   setcolor(red);
              Outtextxy(90,180,'NOTE:');
            setcolor(white);
              Outtextxy(90,190,'Enregistre votre cl? c''est tr?s important');
              Outtextxy(90,200,'pour facilit? l''accer ? votre fichier la prochaine fois');
              i:=0;   q:=3;
            { lecture des donn?s } donnes:
               repeat setcolor(white);
                    line(215+i,138,215+i+8,138);
                     n:=readkey;
                    case n of
                    'a'..'z': begin
                                   chaine:=n;
                                   setcolor(q);
                                   outtextxy(215+i,130,chaine);
                                   setcolor(0);line(215+i,138,215+8+i,138);
                                   i:=i+8;
                                   ch:=ch+n;
                              end;
                    'A'..'Z': begin
                                   chaine:=n;
                                   setcolor(q);
                                   outtextxy(215+i,130,chaine);
                                   setcolor(0);line(215+i,138,215+8+i,138);
                                   i:=i+8;
                                   ch:=ch+n;
                              end;
                         #13: begin
                                   break;
                              end;
                    end;
                   
                   settextstyle(0,0,0);
              until((n=#27)or(i=80));

           { val(ch,r,c);}sav1.nom_fichier:=ch;

    setcolor(0);
          line(215+i,138,215+8+i,138);setcolor(9);
          i:=0;
             repeat
                   setcolor(white);
                   line(215+i,158,215+8+i,158);
                     n:=readkey;
                     case n of

                     '0'..'9':begin
                                    chaine:=n;
                                    setcolor(q);
                                    OuttextXY(215+i,150,chaine);
                                    setcolor(0);line(215+i,158,215+8+i,158);
                                    i:=i+8; { on decale un peut pour ecrire la prochaine lettre}
                                    cle:=cle+n;
                              end;
                          #13:begin
                                    break; 
                              end;

                     end;
                        setcolor(0);
                        line(215+i,158,215+8+i,158);setcolor(9);
             until((n=#27)or(i=60));
              val(cle,r,c);
           sav1.mot_de_passe:=r;
           sav1.tableau:=t;
{ enregistrement des donnees dans le fichier }  
    
    Assign(fichier,'c:\test.txt');
    {$i-}
     reset(fichier);
    {$i+}
    
      
         seek(fichier,0);
         bool:=false; 
             while (not eof(fichier) and (not bool )) do 
                   begin
                        read(fichier,sav2);
                        if sav2.nom_fichier=sav1.nom_fichier then bool:=true;
                   if bool then
                        begin
                             sound(1500);delay(500);nosound;
                             setcolor(red);
                             Outtextxy(230,270,' CE NOM EXISTE DEJA ');
                             delay(1000);
                             goto donnes;
                        end
                   else
                        begin

                             seek(fichier,filesize(fichier)-1);
                             write(fichier,sav1);
                        end;
                   close(fichier);
                end;

    page_Demarrage;
{ la fin de l'interface}
{ on attaque maintenant les choses importantes ..... essah ga3 mazal}

  
end;

{#################################################################################################################}

{---------------------------------------------------------------------------------------------------------------------------}
{ ----------------------------  INTERFACE GRAPHIQUE ---------------------------------------------------------------}
{------------------------------------------------------------------------------------------------------------------------}
   procedure entour;
     var   s,j:integer;

      begin
      s:=0;
      j:=0;
       setfillstyle(1,1);
        repeat
        bar(0,0,Getmaxx,s);
        s:=s+1;
        delay(20);

        bar(0,getmaxy,getmaxx,getmaxy-j);
        j:=j+1;
        delay(20);
        until(s>60);
      end;
{###############################################################################}
 procedure entour_inv;
     var   s,j:integer;
     begin
      s:=60;
      j:=60;

       setfillstyle(1,1);
        repeat
        bar(0,0,Getmaxx,s);
        s:=s+1;
        delay(10);

        bar(0,getmaxy,getmaxx,getmaxy-j);
        j:=j+1;
        delay(10);
        until(s>250);
      end;

 {#############################################################################}

procedure windows;
   var i,k,j,h,cpt:integer;

    begin
     clearDevice;
     setbkcolor(0);
     setcolor(white);
      setTextstyle(7,0,5);
        Outtextxy(200,200,' SudoKu');

      settextstyle(11,0,5);
        Outtextxy(0,450,'Copyright @ tout droit r?serv? @ ');
        outTextxy(500,450,' service Pack 2');

     circle(400,210,3);
     circle(400,210,5);
      setcolor(0);
       arc(400,210,310,70,3);
     i:=0;j:=0;k:=100;

     setcolor(1); { carr? bleu }
        for j:=1 to 19 do begin rectangle(260-k div 2,250-k,260-k div 2+j,250-k+j);
                             end;
     setcolor(2); { carr? vert }
        for j:=1 to 19 do begin rectangle(285-k div 2,250-k,285-k div 2+j,250-k+j);
                                end;
     setcolor(4); { carr? rouge }
        for j:=1 to 19 do begin rectangle(260-k div 2,275-k,260-k div 2+j,275-k+j);
                                end;
     setcolor(14); { carr? jaune }
        for j:=1 to 19 do begin rectangle(285-k div 2,275-k,285-k div 2+j,275-k+j);
                                end;
     setcolor(9);

     h:=0;
     cpt:=0;
     k:= 250;
     rectangle(5+k,10+k,120+k,20+k);
   repeat
    for i:=1 to 95 do begin
     setcolor(0);
     for j:=1 to 6 do begin for h:=1 to 8 do begin
     rectangle(11+k+i-5,11+k,11+k+j+i-5,11+k+h);
     end;end;
     setcolor(red);
     for j:=1 to 6  do begin for h:=1 to 8 do begin
     rectangle(11+k+i,11+k,11+k+i+5+j,11+k+h);
     end;end;
     end;
     setcolor(0);
     for j:=1 to 6 do begin for h:=1 to 8 do begin
     rectangle(11+k+i,11+k,11+k+j+i+5,11+k+h);
     end;end;
                     for i:=90 downto 1 do begin
                         setcolor(red);
                          for j:=1 to 6  do begin for h:=1 to 8 do begin
                           rectangle(10+k+i,11+k,10+k+i+j,11+k+h);
                          end;end;
                         setcolor(0);
                          for j:=1 to 6 do begin for h:=1 to 8 do begin
                           rectangle(10+k+i+5,11+k,10+k+j+i+5,11+k+h);
                          end; end;
                          end;
     delay(30);
     cpt:=cpt+1;

     until(cpt>5);
    Cleardevice;
     end;
{###############################################################################}

procedure Menu(var suite:boolean);

         var i,j,k,p,l,code,mode:integer;
	     key,a:char;
             u:string;

	  begin
            entour;
           u:='';
          setcolor(1);
          settextstyle(7,0,4);
          circle(143,105,5);
          circle(143,105,3);
           setcolor(9);
            arc(143,105,310,70,3);
          setcolor(1);
           Outtextxy(20,100,'Sudoku 8.8 ');
           Outtextxy(20,101,'Sudoku 8.8 ');
           Outtextxy(20,99,'Sudoku 8.8 ');
          settextstyle(2,0,4);
          setcolor(11);
          outtextxy(40,140,'Ce Projet est Pr?sent? par : ');
          settextstyle(7,0,1);outtextxy(60,150,'Louifi & Benzouaoui');
          settextstyle(2,0,4);Outtextxy(10,Getmaxy-75,'Sudoku professional');
                              outtextxy(getmaxx-110,getmaxy-75,'Service Pack 2');

          settextstyle(0,0,0);

          { l'encadrement des choix.....}
                  setfillstyle(1,1); l:=160;
                    bar(200,200,400,220);
                    bar(200,240,400,260);
                    bar(200,120+l,400,140+l);
                    bar(200,160+l,400,180+l);
                    bar(200,200+l,400,220+l);

          { on  affiche les elements de ce Menu}

          setcolor(white);
                    OuttextXY(238,205,'   Facile   ');
                    OutTextXY(237,245,'   Moyenne  ');
                    OutTextxy(235,285,'   Difficile ');
                    Outtextxy(245,325,'   Pro    ');
                    Outtextxy(245,365,'   Exit   ');

                    j:=200;
                    setfillstyle(1,lightgreen);
                    bar(200,200,400,202);
                    bar(200,200,202,220);
                    bar(400,200,402,220);
                    bar(200,220,402,222);
                    setcolor(9);
             repeat
                    key:= readkey;
                    case key of 

                    #80: begin { si la fleche haut est presse alors..}
                               p:=j;
                               sound(450);delay(50);nosound; 
			       {setcolor(0);rectangle(198,j-2,402,j+22); }
                               setfillstyle(1,3);
                               bar(200,j,400,j+2);
                               bar(200,j,202,j+20);
                               bar(400,j,402,j+20);
                               bar(200,j+20,402,j+22);
                    
                               j:=j+40;
                               if j>360 then j:=200;
                               if (j<>p) then begin  setfillstyle(1,lightgreen);
                                                     bar(200,j,400,j+2);
                                                     bar(200,j,202,j+20);
                                                     bar(400,j,402,j+20);
                                                     bar(200,j+20,402,j+22);
                    
                                              end;

                               a:=readkey;
                                              if((a=#13)and(j=200))then begin u:='FACILE';break;end;
                                              if((a=#13)and(j=240)) then begin u:='MOYENNE';break;end;
                                              if((a=#13)and(j=280)) then begin u:='DIFFICILE';break;end;
			                      if((a=#13)and(j=320)) then begin u:='PRO';break;end;
                                              if((a=#13)and(j=360)) then begin suite:=false;break;end;
                              end;

                   #72: begin { si la fleche bas est presse alors...}
                               k:=j;
                               sound(450);delay(50);nosound;

                               setfillstyle(1,3);
                               bar(200,j,400,j+2);
                               bar(200,j,202,j+20);
                               bar(400,j,402,j+20);
                               bar(200,j+20,402,j+22);
                    
                               j:=j-40;
                               if j<200 then j:=360;
                               if (j<>k) then begin
                                                     setfillstyle(1,lightgreen);
                                                     bar(200,j,400,j+2);
                                                     bar(200,j,202,j+20);
                                                     bar(400,j,402,j+20);
                                                     bar(200,j+20,402,j+22);

                                              end;

                               a:=readkey;
                                              if((a=#13)and(j=200)) then begin u:='FACILE';break;end;
                                              if((a=#13)and(j=240)) then begin u:='MOYENNE';break;end;
                                              if((a=#13)and(j=280)) then begin u:='DIFFICILE';break;end;
                                              IF((a=#13)and(j=320)) then begin u:='PRO';break;end;
                                              if((a=#13)and(j=360)) then begin suite:=false;break; end;
                        end;
                    { la fin de case of }
                    end;
              until(key= #27);

                  end;
{######################################################################################################}

 procedure en_joue(var appel:boolean);
 var i,j,k,p:integer;
     key,a:char;

    begin  
	 
	 { insertion du temps }
	 setfillstyle(1,2);
	 bar(50,100,110,120);
	 bar(50,140,110,160);
	 bar(50,180,110,200);
	 
	 settextstyle(0,0,0);
	 setcolor(1);
	  Outtextxy(55,110,'Solu.');
	  Outtextxy(55,150,'Help.');
	  Outtextxy(55,190,'Exit.');
	  
	  j:=100;
	  setfillstyle(1,blue);
	  bar(50,100,110,101);
          bar(50,100,51,120);
          bar(110,100,111,120);
          bar(50,120,111,121);
	   
	  repeat
	   key:=readkey;
	   case key of
	   #80: begin 
	        p:=j;
			setfillstyle(1,lightgreen);
			            bar(50,j,110,j+1);
			            bar(50,j,51,j+20);
			            bar(110,j,111,j+20);
			            bar(50,j+20,111,j+21);
			
			j:=j+40;
			if j>180 then j:=100;
			if j<>p then begin 
			        setfillstyle(1,1);
					bar(50,j,110,j+1);
			                bar(50,j,51,j+20);
			                bar(110,j,111,j+20);
			                bar(50,j+20,111,j+21);end;
			a:=readkey;
            if ((a=#13)and(j=100)) then begin page_demarrage;solution;appel:=false;break;end;
            if ((a=#13)and(j=140)) then begin help;break;end;
            if ((a=#13)and(j=180)) then begin appel:=false;exit;break;end;
        end;
       #72: begin
            k:=j; setfillstyle(1,lightgreen);
                              bar(50,j,110,j+1);
			      bar(50,j,51,j+20);
			      bar(110,j,111,j+20);
			      bar(50,j+20,111,j+21);
            j:=j-40;
            if j<100 then j:=180;
            if j<>k then begin setfillstyle(1,1);
                                          bar(50,j,110,j+1);
			                  bar(50,j,51,j+20);
			                  bar(110,j,111,j+20);
			                  bar(50,j+20,111,j+21);end;
            a:=readkey;
            if ((a=#13)and(j=100)) then begin page_demarrage;solution;appel:=false;break;end;
            if ((a=#13)and(j=140)) then begin help;break;end;
            if ((a=#13)and(j=180)) then begin appel:=false;exit;break;end;
        end;	
	end;	
    until(key=#27);
end;	
	 
     	 

{######################################################################################################}

      begin
        clrscr;
        { initialisation de mode graphique..}
        code:=detect;
        initgraph(code,mode,'C:\tp7\bgi');
        { on commance le jeux }
          suite := true;
          _page; cleardevice;
         windows;
         setbkcolor(9);
         Menu(suite); if suite then begin 		 
		                        repeat cleardevice;
						setcolor(11); { bordure .....}
	                                        rectangle(5,5,getmaxx-10,getmaxy-10);
	                                        rectangle(4,4,getmaxx-9,getmaxy-9);
			                  appel:=true;
					  setcolor(8);
					  outtextxy(100,getmaxy-50,' Si tu es terminer de jouer appuyer sur entré pour');
					  outtextxy(100,getmaxy-40,' avoir la solution ou l''aide .');
					  setcolor(9);
					  generer;
					  afficher(u);
						repeat
					             jouer;
					             en_joue(appel);
                                               until(appel=false);
					  cleardevice;setcolor(red); settextstyle(4,0,4);
                                          outtextxy(140,200,'Appuyer sur Q pour quiter');
                                          settextstyle(0,0,0);
				          quit:=readkey;
					  until((quit='Q')or(quit='q'));
				   end;

                 entour_inv;
		 closegraph;
       end.

Conclusion :


et voila le programme tout complet, je croie que c bon

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.