dmey | Salut
on est en ce moment de faire un puissance4 pour un projet en dut mais on a cette erreur a l'execution : Constraint_error : puiss4.adb:126 index check failed
je vous met le code source :
Code :
- with simple_io; use simple_io ;
- procedure Puiss4 is
- --definition des variables et des types
- Nbl,Nbc : Integer := 1 ;
- type Tpuis4 is array (1..Nbl,1..Nbc) of Character ;
- puis4:tpuis4;
- type Tres is (Ordi,Util,Nul);
- --definition des sous-programmes
- procedure Demande_Taille (Puis4 : in out Tpuis4 ; Nbl : out Integer ; Nbc : out Integer);
- procedure Affiche_Grille (Puis4 : in out Tpuis4 ;Nbl,Nbc : in Integer );
- procedure Affiche_Rond (Puis4 : in out Tpuis4 ;L,C : in Integer );
- procedure Affiche_Croix (Puis4 : in out Tpuis4 ;L,C : in Integer );
- function Debut_Partie (Puis4 : Tpuis4 )return Boolean ;
- procedure Demande_Position (Puis4 : in out Tpuis4 ;L,C : out Integer );
- procedure Affiche_Resultat (Puis4 : in out Tpuis4 ;Res : in Tres);
- procedure Autre_Partie (Puis4 : in out Tpuis4 ;Autrepartie : out Boolean );
- procedure Vide_Puiss4 (Puis4 : in out Tpuis4 ;Nbl,Nbc : in Integer ) ;
- function Position_Correcte (Puis4 : in Tpuis4 ;L,C : integer) return Boolean ;
- procedure Met_Croix (Puis4 : in out Tpuis4 ;L,C : in Integer );
- procedure Met_Rond (Puis4 : in out Tpuis4 ;L,C : in Integer );
- procedure Reponse_Ordinateur (Puis4 : in out Tpuis4 ;L,C : out Integer; Partiefinie : out Boolean; Res : out Tres );
- function Nbpions (Puis4 : Tpuis4)return Integer ;
- procedure Rectifipos (Puis4 : in out Tpuis4 ;L,C : in out Integer );
- procedure Aleatoire (puis4:in tpuis4;L,C : out Integer ; Plein :out Boolean );
- procedure Ordi_4(puis4:in out tpuis4;L,C : out Integer ; Fin : out Boolean );
- procedure Vertical_4_X (Puis4 : in out Tpuis4 ;L,C : out Integer ; Vertical : out Boolean );
- procedure Horizontal_4_X (Puis4 : in out Tpuis4 ;L,C : out Integer; Horizontal : out Boolean );
- procedure Diagonal_4_X_1 (Puis4 : in out Tpuis4 ;L,C : out Integer ; Diag : out Boolean );
- procedure Diagonal_4_X_2(Puis4 : in out Tpuis4 ;L,C : out Integer; Diag : out Boolean );
- procedure Ordi_3 (Puis4 : in out Tpuis4 ;L,C : out Integer ; Fin : out Boolean );
- procedure Vertical_3_X (Puis4 : in out Tpuis4 ;L,C : out Integer ; Vertical : out Boolean );
- procedure Horizontal_3_X ( Puis4 : in out Tpuis4 ;L,C : out Integer ; Horizontal : out Boolean );
- procedure Diagonal_3_X_1(puis4:in out tpuis4;L,C : out Integer ; Diag : out Boolean );
- procedure Diagonal_3_X_2(Puis4 : in out Tpuis4 ;L,C : out Integer ; Diag : out Boolean );
- procedure Util_4 (Puis4 : in out Tpuis4 ;L,C : out Integer ; Stop : out Boolean ; Perdu : out Boolean );
- procedure Vertical_4_0(Puis4 : in out Tpuis4 ;L,C : out Integer ; Vertical : out Boolean ; Perdu : out Boolean );
- procedure Horizontal_4_0(Puis4 : in out Tpuis4 ;L,C : out Integer ; Horizontal,Perdu : out Boolean );
- procedure Diagonal_4_0_1(Puis4 : in out Tpuis4 ;L,C : out Integer ; Diag,Perdu : out Boolean );
- procedure Diagonal_4_0_2(Puis4 : in out Tpuis4 ;L,C : Out Integer ; Diag,Perdu : out Boolean );
- --corps des procedures et fonctions
- procedure Demande_Taille(Puis4 : in out Tpuis4 ; Nbl : out Integer ; Nbc : out Integer) is
- begin
- loop
- Put_Line("Saisir le nombre de lignes(entre 4 et 6)" );
- Get(Nbl);
- exit when ((Nbl<=6) and (Nbl>=4));
- end loop;
- loop
- Put_Line("saisir le nombre de colonnes(entre 4 et 7)" );
- Get(Nbc);
- exit when ((Nbl<=7) and (Nbc>=4));
- end loop;
- end Demande_Taille ;
- procedure Affiche_Grille (Puis4 : in out Tpuis4 ;Nbl,Nbc : in Integer )is
- begin
- for J in 1..Nbc loop
- for I in 1..Nbl loop
- Put(Puis4(I,J));
- end loop;
- end loop;
- end Affiche_Grille ;
- procedure Affiche_Rond (Puis4 : in out Tpuis4 ; L,C : in Integer )is
- begin
- Met_Rond(Puis4,L,C);
- Affiche_Grille(Puis4,Nbl,Nbc);
- end Affiche_Rond ;
- procedure Affiche_Croix (Puis4 : in out Tpuis4 ; L,C : in Integer )is
- begin
- Met_Croix(Puis4,L,C);
- Affiche_Grille(Puis4,Nbl,Nbc);
- end Affiche_croix ;
- function Debut_Partie (Puis4 : Tpuis4 ) return Boolean is
- D : String (1..3) ;
- Debutpartie : Boolean ;
- begin
- Debutpartie:=False ;
- Put_Line ("Voulez vous commencer à jouer ? (oui ou non)" );
- Get(D);
- if D="oui" then
- Debutpartie:=True ;
- end if ;
- return Debutpartie ;
- end Debut_Partie ;
- procedure Demande_Position (Puis4 : in out Tpuis4 ;L,C : out Integer ) is
- begin
- Put_Line ("Donnez le numero de la ligne ou vous voulez placez le pion" );
- Get(L);
- Put_Line ("Donnez le mumero de la colonne ou vous voulez placez le pion" );
- Get(C);
- end Demande_Position ;
- procedure Affiche_Resultat (Puis4 : in out Tpuis4 ;Res : in Tres) is
- begin
- if Res=Ordi then
- Put_Line("Vous avez perdu" );
- elsif Res=Util then
- Put_Line("Vous avez gagné" );
- else
- Put_Line("Match nul" );
- end if;
- end Affiche_Resultat;
- procedure Autre_Partie (Puis4 : in out Tpuis4 ;Autrepartie : out Boolean ) is
- Rep : String (1..3) ;
- begin
- Put_Line ("voulez vous rejouez ?" ) ;
- get (Rep);
- if Rep="oui" then
- Autrepartie:=True ;
- else
- Autrepartie:=False ;
- end if ;
- end Autre_Partie ;
- procedure Vide_Puiss4 (Puis4 : in out Tpuis4 ;Nbl,Nbc : in Integer ) is
- begin
- for I in 1..Nbl loop
- for J in 1..Nbc loop
- Puis4(I,J):='V' ;
- end loop ;
- end loop ;
- end Vide_Puiss4 ;
- function Position_Correcte (Puis4 : in Tpuis4 ;L,C : integer) return Boolean is
- Pos : Boolean ;
- begin
- Pos := True ;
- if not(Puis4(L,C)='V') then
- Pos:=False ;
- end if ;
- if Pos=True then
- if L>1 then
- for I in 1..Nbl loop
- if Puis4(I,C)='V' then
- Pos:=False ;
- end if ;
- end loop;
- end if;
- end if;
- return pos;
- end Position_Correcte ;
- procedure Met_Croix (Puis4 : in out Tpuis4 ;L,C : in Integer ) is
- begin
- Puis4(L,C):='x' ;
- end Met_Croix ;
- procedure Met_Rond (Puis4 : in out Tpuis4 ;L,C : in Integer ) is
- begin
- Puis4(L,C):='o' ;
- end Met_Rond ;
- -- ______________________________________
- procedure Reponse_Ordinateur (puis4:in out tpuis4;L,C : out Integer; Partiefinie : out Boolean; Res : out Tres ) is
- -- declarations et initialisations
- nb:integer;
- lo,co,lo2,Co2,la,ca,lu,cu:Integer;
- finordi4,stoputil_4,finordi2,rempli,ordiperdu,grillepleine:boolean;
- --corps du programme
- begin
- Nb:=nbpions(puis4);
- ordi_4(puis4,lo,co,finordi4);
- ordi_3(puis4,lo2,co2,finordi2);
- aleatoire(puis4,la,ca,rempli);
- util_4(puis4,lu,cu,stoputil_4,ordiperdu);
- if ordiperdu then
- L:=lu;
- c:=cu;
- partiefinie:=true;
- res:=util;
- elsif finordi4 and then Lo/=0 then
- l:=lo;
- c:=co;
- partiefinie:=false;
- res:=ordi;
- elsif stoputil_4 and then Lu/=0 then
- l:=lu;
- c:=cu;
- partiefinie:=false;
- res:=nul;
- else
- l:=la;
- c:=ca;
- if rempli then
- partiefinie:=true;
- else partiefinie:= false;
- end if;
- res:=nul;
- end if;
- if L/=0 then
- rectifipos(puis4,L,C);
- end if;
- if not partiefinie then
- grillepleine:=(nb+1)>=nbl*nbc;
- partiefinie:=grillepleine;
- end if;
- end Reponse_Ordinateur;
- -- ______________________________________
- function Nbpions (puis4 : Tpuis4 )return Integer is
- --declarations
- som:Integer:=0;
- --corps de la fonction
- begin
- for i in 1..nbl loop
- for j in 1..nbc loop
- if puis4(i,J)/='V' then
- som:=som+1;
- end if;
- end loop;
- end loop;
- return som;
- end nbpions;
- -- ______________________________________
- procedure Rectifipos (Puis4 : in out Tpuis4 ;L,C : in out Integer ) is
- --declarations
- vide:boolean:=false;
- --corps du programme
- begin
- while (puis4(L+1,C)='V')and then (L<nbl) loop
- L:=l+1;
- vide:=true;
- end loop;
- if not vide then
- while (puis4(L,C)/='V') and then (L>0)loop
- l:=l-1;
- end loop;
- end if;
- end rectifipos;
- -- ______________________________________
- procedure Aleatoire (puis4:in tpuis4;L,C : out Integer ; Plein :out Boolean )is
- -- declarations et initialisations
- I:Integer:=Nbl+1;
- J:Integer;
- -- corps du programme
- begin
- Plein:=True;
- L:=0;
- C:=0;
- while (Plein and then (I>0))loop
- I:=I-1;
- J:=Nbc+1;
- while (Plein and then (J>0))loop
- J:=J-1;
- if (puis4(I,J)='V') then -- T est le tableau de puis4 ( voir function Nbpions)
- L:=I;
- C:=J;
- Plein:= False;
- end if;
- end loop;
- end loop;
- end Aleatoire;
- -- ______________________________________
- procedure Ordi_4(puis4:in out tpuis4;L,C : out Integer ; Fin : out Boolean )is
- --declarations
- lh,ch,lv,cv,ld1,cd1,ld2,cd2:integer;
- horizontal,vertical,diag1,diag2:boolean;
- -- corps du programme
- begin
- horizontal_4_X(puis4,Lh,ch,horizontal);
- vertical_4_X(puis4,lv,cv,vertical);
- diagonal_4_X_1(puis4,ld1,cd1,diag1);
- diagonal_4_X_2(puis4,ld2,cd2,diag2);
- L:=0;C:=0;
- fin:=false;
- if vertical then
- l:=lv;c:=cv;fin:=true;
- elsif horizontal then
- l:=lh;c:=ch;fin:=true;
- elsif diag1 then
- l:=ld1;c:=cd1;fin:=true;
- elsif diag2 then
- l:=ld2;c:=cd2;fin:=true;
- end if;
- end ordi_4;
- -- ______________________________________
- procedure Vertical_4_X (puis4:in out tpuis4;L,C : out Integer ; Vertical : out Boolean )is
- --declarations
- m,p:integer;
- --corps du programme
- begin
- vertical:=false;l:=0;c:=0;m:=nbc+1;
- while (m>1)and then (not vertical) loop
- m:=m-1;p:=nbl+1;
- while (p>4)and then (not vertical) loop
- p:=p-1;vertical:=((puis4(p,M)='C')and (puis4(p-1,M)='C') and (puis4(p-2,M)='C'));
- if vertical then
- if (puis4(p-3,M)='V') then
- l:=p-3;c:=m;
- else
- vertical:=False;
- end if;
- end if;
- end loop;
- end loop;
- end Vertical_4_X;
- -- ______________________________________
- procedure Horizontal_4_X (puis4:in out tpuis4;L,C : out Integer; Horizontal : out Boolean )is
- --declarations
- p,m:integer;
- -- corps du programme
- begin
- horizontal:=false;l:=0;c:=0;
- p:=nbl+1;
- while (p>1) and (not horizontal)loop
- p:=p-1;m:=nbc+1;
- while (m>3)and (not horizontal) loop
- m:=m-1;horizontal:=(puis4(p,m)='C')and (puis4(p,m-1)='C')and (puis4(p,m-2)='C');
- if horizontal then
- if (m<=(nbc-1))and (puis4(p,m+1)='V')then
- l:=p;c:=m+1;
- elsif (m>3)and (puis4(p,m-3)='V') then
- l:=p;c:=m-3;
- elsif (M>=3)and (m<=(nbc-1)) and (puis4(p,m+1)='V') then
- l:=p;c:=m+1;
- else
- horizontal:=false;
- end if;
- end if;
- end loop;
- end loop;
- end Horizontal_4_X;
- -- ______________________________________
- procedure Diagonal_4_X_1 (puis4:in out tpuis4;L,C : out Integer ; Diag : out Boolean )is
- --declarations
- p,m:integer;
- -- corps du programme
- begin
- diag:=false;l:=0;c:=0;
- p:=nbl+1;
- while (p>3) and (not diag)loop
- p:=p-1;m:=nbc+1;
- while (m>3)and (not diag) loop
- m:=m-1;diag:=(puis4(p,m)='C')and (puis4(p-1,m-1)='C')and (puis4(p-2,m-2)='C');
- if diag then
- if (m=nbc)and (p=nbl)and (puis4(p-3,M-3)='V') then
- l:=p-3;c:=M-3;
- elsif (p=3) and (M/=nbc) and (puis4(p+1,M+1)='V')then
- l:=p+1;c:=M+1;
- elsif (m<nbc) and (p<nbl) and (p>=3) and ( puis4(p+1,M+1)='V') then
- l:=p+1;c:=m+1;
- elsif (m<=nbc) and (p<=nbl) and (p>3) and(m>3)and (puis4(p-3,M-3)='V') then
- l:=p-3;c:=M-3;
- else diag:=false;
- end if;
- end if;
- end loop;
- end loop;
- end Diagonal_4_X_1;
- -- ______________________________________
- procedure Diagonal_4_X_2(puis4:in out tpuis4;L,C : out Integer; Diag : out Boolean )is
- --declarations
- p,m:integer;
- -- corps du programme
- begin
- diag:=false;l:=0;c:=0;
- p:=nbl+1;
- while (p>3) and (not diag)loop
- p:=p-1;m:=0;
- while (m<(nbc-3))and (not diag) loop
- m:=m+1;diag:=(puis4(p,m)='C')and (puis4(p-1,m+1)='C')and (puis4(p-2,m+2)='C');
- if diag then
- if (m=1)and (p=nbl)and (puis4(p-3,M+3)='V') then
- l:=p-3;c:=M+3;
- elsif (p=3) and (M/=1) and (puis4(p+1,M-1)='V')then
- l:=p+1;c:=M-1;
- elsif (m>1) and (p<nbl) and (p>3) and ( puis4(p+1,M-1)='V') then
- l:=p+1;c:=m-1;
- elsif (m<=nbc) and (p<=nbl) and (p>3) and(m<(nbc-3))and (puis4(p-3,M+3)='V') then
- l:=p-3;c:=M+3;
- else diag:=false;
- end if;
- end if;
- end loop;
- end loop;
- end Diagonal_4_X_2;
- -- ______________________________________
- procedure Ordi_3 (puis4:in out tpuis4;L,C : out Integer ; Fin : out Boolean )is
- --declarations
- lh,ch,lv,cv,ld1,cd1,ld2,cd2:integer;
- horizontal,vertical,diag1,diag2:boolean;
- -- corps du programme
- begin
- horizontal_3_X(puis4,Lh,ch,horizontal);
- vertical_3_X(puis4,lv,cv,vertical);
- diagonal_3_X_1(puis4,ld1,cd1,diag1);
- diagonal_3_X_2(puis4,ld2,cd2,diag2);
- L:=0;C:=0;
- fin:=false;
- if vertical then
- l:=lv;c:=cv;fin:=true;
- elsif horizontal then
- l:=lh;c:=ch;fin:=true;
- elsif diag1 then
- l:=ld1;c:=cd1;fin:=true;
- elsif diag2 then
- l:=ld2;c:=cd2;fin:=true;
- end if;
- end ordi_3;
- -- ______________________________________
- procedure Vertical_3_X (puis4:in out tpuis4;L,C : out Integer ; Vertical : out Boolean ) is
- --declarations
- m,p:integer;
- --corps du programme
- begin
- vertical:=false;l:=0;c:=0;m:=nbc+1;
- while (m>1)and then (not vertical) loop
- m:=m-1;p:=nbl+1;
- while (p>3)and then (not vertical) loop
- p:=p-1;vertical:=((puis4(p,M)='C')and (puis4(p-1,M)='C'));
- if vertical then
- if (puis4(p-2,M)='V') then
- l:=p-2;c:=m;
- else
- vertical:=False;
- end if;
- end if;
- end loop;
- end loop;
- end Vertical_3_X;
- -- ______________________________________
- procedure Horizontal_3_X (puis4:in out tpuis4;L,C : out Integer ; Horizontal : out Boolean ) is
- --declarations
- p,m:integer;
- -- corps du programme
- begin
- horizontal:=false;l:=0;c:=0;
- p:=nbl+1;
- while (p>1) and (not horizontal)loop
- p:=p-1;m:=nbc+1;
- while (m>2)and (not horizontal) loop
- m:=m-1;horizontal:=(puis4(p,m)='C')and (puis4(p,m-1)='C');
- if horizontal then
- if (m<=(nbc-1))and (puis4(p,m+1)='V')then
- l:=p;c:=m+1;
- elsif (m>2)and (puis4(p,m-2)='V') then
- l:=p;c:=m-2;
- elsif (M>=2)and (m<=(nbc-1)) and (puis4(p,m+1)='V') then
- l:=p;c:=m+1;
- else
- horizontal:=false;
- end if;
- end if;
- end loop;
- end loop;
- end Horizontal_3_X;
- -- ______________________________________
- procedure Diagonal_3_X_1(puis4:in out tpuis4;L,C : out Integer ; Diag : out Boolean )is
- --declarations
- p,m:integer;
- -- corps du programme
- begin
- diag:=false;l:=0;c:=0;
- p:=nbl+1;
- while (p>2) and (not diag)loop
- p:=p-1;m:=nbc+1;
- while (m>2)and (not diag) loop
- m:=m-1;diag:=(puis4(p,m)='C')and (puis4(p-1,m-1)='C');
- if diag then
- if (m=nbc)and (p=nbl)and (puis4(p-2,M-2)='V') then
- l:=p-2;c:=M-2;
- elsif (p=2) and (M/=nbc) and (puis4(p+1,M+1)='V')then
- l:=p+1;c:=M+1;
- elsif (m<nbc) and (p<nbl) and (p>=3) and ( puis4(p+1,M+1)='V') then
- l:=p+1;c:=m+1;
- elsif (m<=nbc) and (p<=nbl) and (p>2) and(m>2)and (puis4(p-2,M-2)='V') then
- l:=p-2;c:=M-2;
- else diag:=false;
- end if;
- end if;
- end loop;
- end loop;
- end Diagonal_3_X_1;
- -- ______________________________________
- procedure Diagonal_3_X_2(puis4:in out tpuis4;L,C : out Integer ; Diag : out Boolean )is
- --declarations
- p,m:integer;
- -- corps du programme
- begin
- diag:=false;l:=0;c:=0;
- p:=nbl+1;
- while (p>2) and (not diag)loop
- p:=p-1;m:=0;
- while (m<(nbc-2))and (not diag) loop
- m:=m+1;diag:=(puis4(p,m)='C')and (puis4(p-1,m+1)='C');
- if diag then
- if (m=1)and (p=nbl)and (puis4(p-2,M+2)='V') then
- l:=p-2;c:=M+2;
- elsif (p=2) and (M/=1) and (puis4(p+1,M-1)='V')then
- l:=p+1;c:=M-1;
- elsif (m>1) and (p<nbl) and (p>3) and ( puis4(p+1,M-1)='V') then
- l:=p+1;c:=m-1;
- elsif (m<=nbc) and (p<=nbl) and (p>2) and(m<(nbc-2))and (puis4(p-2,M+2)='V') then
- l:=p-2;c:=M+2;
- else diag:=false;
- end if;
- end if;
- end loop;
- end loop;
- end Diagonal_3_X_2;
- -- ______________________________________
- procedure Util_4(puis4:in out tpuis4;L,C : out Integer ; Stop : out Boolean ; Perdu : out Boolean )is
- --declarations
- lh,ch,lv,cv,ld1,cd1,ld2,cd2:integer;
- horizontal,perduH,vertical,perduV,diag1,perduD1,diag2,perduD2:boolean;
- -- corps du programme
- begin
- perdu:=false;
- stop:=false;
- horizontal_4_0(puis4,Lh,ch,horizontal,perduH);
- vertical_4_0(puis4,lv,cv,vertical,perduV);
- diagonal_4_0_1(puis4,ld1,cd1,diag1,perduD1);
- diagonal_4_0_2(puis4,ld2,cd2,diag2,perduD2);
- L:=0;C:=0;
- stop:=false;
- if perduH or perduV or perduD1 or perduD2 then
- perdu:= true;
- elsif vertical then
- l:=lv;c:=cv;stop:=true;
- elsif horizontal then
- l:=lh;c:=ch;stop:=true;
- elsif diag1 then
- l:=ld1;c:=cd1;stop:=true;
- elsif diag2 then
- l:=ld2;c:=cd2;stop:=true;
- end if;
- end util_4;
- -- ______________________________________
- procedure Vertical_4_0(puis4:in out tpuis4;L,C : out Integer ; Vertical : out Boolean ; Perdu : out Boolean )is
- --declarations
- m,p:integer;
- --corps du programme
- begin
- vertical:=false;l:=0;c:=0;m:=nbc+1;
- while (m>1)and then (not vertical) loop
- m:=m-1;p:=nbl+1;
- while (p>4)and then (not vertical) loop
- p:=p-1;vertical:=((puis4(p,M)='C')and (puis4(p-1,M)='C') and (puis4(p-2,M)='C'));
- perdu:=(p<nbl)and((p>3)and(puis4(p,m)='R')and (puis4(p-1,m)='R')and(puis4(p-2,m)='R')
- and((puis4(p-3,m)='R')or(puis4(p+1,m)='R')));
- if vertical and not perdu then
- if (puis4(p-3,M)='V') then
- l:=p-3;c:=m;
- else
- vertical:=False;
- end if;
- end if;
- end loop;
- end loop;
- end Vertical_4_0;
- -- ______________________________________
- procedure Horizontal_4_0(puis4:in out tpuis4;L,C : out Integer ; Horizontal,Perdu : out Boolean )is
- --declarations
- p,m:integer;
- -- corps du programme
- begin
- horizontal:=false;l:=0;c:=0;perdu:=false;
- p:=nbl+1;
- while (p>1) and (not horizontal)loop
- p:=p-1;m:=nbc+1;
- while (m>3)and (not horizontal) loop
- m:=m-1;horizontal:=(puis4(p,m)='R')and (puis4(p,m-1)='R')and (puis4(p,m-2)='R');
- perdu:=(m<nbc)and((m>3)and(puis4(p,m)='R')and (puis4(p,m-1)='R')and(puis4(p,m-2)='R')
- and((puis4(p,m-3)='R')or(puis4(p,m+1)='R')));
- if horizontal and not perdu then
- if (m<nbc)and (puis4(p,m+1)='V')then
- l:=p;c:=m+1;
- elsif (m>3)and (puis4(p,m-3)='V') then
- l:=p;c:=m-3;
- elsif (M>=3)and (m<=(nbc-1)) and (puis4(p,m+1)='V') then
- l:=p;c:=m+1;
- else
- horizontal:=false;
- end if;
- end if;
- end loop;
- end loop;
- end Horizontal_4_0;
- -- ______________________________________
- procedure Diagonal_4_0_1(puis4:in out tpuis4;L,C : out Integer ; Diag,Perdu : out Boolean )is
- --declarations
- p,m:integer;
- -- corps du programme
- begin
- diag:=false;l:=0;c:=0;perdu:=false;
- p:=nbl+1;
- while (p>3) and (not diag)loop
- p:=p-1;m:=nbc+1;
- while (m>3)and (not diag) loop
- m:=m-1;diag:=(puis4(p,m)='R')and (puis4(p-1,m-1)='R')and (puis4(p-2,m-2)='R');
- perdu:=(m<nbc)and((m>3)and(p<nbl)and(p>3)and(puis4(p,m)='R')and (puis4(p-1,m-1)='R')and(puis4(p-2,m-2)='R')
- and((puis4(p-3,m-3)='R')or(puis4(p+1,m+1)='R')));
- if diag and not perdu then
- if (m<=nbc)and (p<=nbl)and (p>3)and (m>3)and (puis4(p-3,m-3)='V')then
- l:=p-3;c:=m-3;
- elsif (m<nbc)and(p<nbl)and (p>=3)and (puis4(p+1,m+1)='V')then
- l:=p+1;c:=m+1;
- else
- diag:=false;
- end if;
- end if;
- end loop;
- end loop;
- end Diagonal_4_0_1;
- -- ______________________________________
- procedure Diagonal_4_0_2(puis4:in out tpuis4;L,C : Out Integer ; Diag,Perdu : out Boolean )is--declarations
- p,m:integer;
- -- corps du programme
- begin
- diag:=false;l:=0;c:=0;perdu:=false;
- p:=nbl+1;
- while (p>3) and (not diag)loop
- p:=p-1;m:=0;
- while (m<(nbc-3))and (not diag) loop
- m:=m+1;diag:=(puis4(p,m)='R')and (puis4(p-1,m+1)='R')and (puis4(p-2,m+2)='R');
- perdu:=(m<nbc-3)and((m>1)and(p<nbl)and(p>3)and(puis4(p,m)='R')and (puis4(p-1,m+1)='R')and(puis4(p-2,m+2)='R')
- and((puis4(p+1,m-1)='R')or(puis4(p-2,m+3)='R')));
- if diag and not perdu then
- if (m>1)and (p<nbl)and (p>3)and (puis4(p+1,m-1)='V')then
- l:=p+1;c:=m-1;
- elsif (m>=1)and(p<=nbl)and (p>3)and(m<(nbc-3))and (puis4(p-3,m+3)='V')then
- l:=p-3;c:=m+3;
- else
- diag:=false;
- end if;
- end if;
- end loop;
- end loop;
- end Diagonal_4_0_2;
- -- variables de travail de la procedure principale :
- Partie : Boolean :=true;
- partie_finie:boolean;
- Debut : Boolean ;
- Nbt : Integer ; --nb de tour joué
- Nbtmax : Integer ; -- nb de tour max
- L,C : Integer ;
- Res : Tres ;
- -- procedure principale :
- begin
- while Partie loop
- Demande_Taille(puis4,Nbl,Nbc) ;
- Vide_Puiss4(Puis4,Nbl,Nbc) ;
- Debut := Debut_Partie(Puis4) ;
- Nbtmax := Nbl*Nbc ;
- Nbt:=0 ;
- L:=-1 ;
- C:=-1;
- if Debut then
- while not Position_Correcte(puis4,L,C) and (L>0) and (C>0) and (L<Nbl) and (C<Nbc) loop
- Demande_Position(puis4,L,C);
- end loop ;
- Met_Rond(puis4,L,C);
- Nbt := Nbt+1 ;
- end if ;
- Partie_Finie:=False ;
- while not Partie_Finie and (Nbt<=Nbtmax)loop
- Reponse_Ordinateur(puis4,L,C,Partie_Finie,Res);
- Met_Croix(puis4,L,C);
- if not Partie_Finie then
- while not Position_Correcte(puis4,L,C) and L>0 and C>0 and C<Nbc and L<Nbl loop
- Demande_Position(puis4,L,C);
- end loop;
- Met_Rond(puis4,L,C);
- end if ;
- Nbt:=Nbt+1 ;
- Affiche_Grille(puis4,L,C);
- end loop;
- Affiche_Resultat(puis4,Res);
- --Partie:=Autrepartie ;
- autre_partie(puis4,partie);
- end loop ;
- end Puiss4;
|
ps : on est vraiment des noobs donc si ça se trouve c'est une erreur toute conne, mais la on est bloqué merci d'avance pour votre aide ! Dmey et son binome. |