with ada.text_io, ada.numerics.discrete_random; 
use ada.text_io; 
 
procedure csigas is 
 
protected ki is 
   procedure ir(id : in integer; s : in string); 
end ki; 
 
protected body ki is 
   procedure ir(id : in integer; s : in string) is 
   begin 
      put_line(integer'image(id) & ". csiga: " & s); 
   end ir; 
end ki; 
 
subtype int is integer range -1..1
package irand is new ada.numerics.discrete_random(int); 
use irand; 
 
protected protrand is 
   procedure res; 
   function rand return int; 
private 
   g : generator; 
end protrand; 
 
protected body protrand is 
   procedure res is 
   begin 
      reset(g); 
   end res; 
    
   function rand return int is 
   begin 
      return random(g); 
   end rand; 
end protrand; 
 
type mezotomb is array(0..40..4of integer; 
 
task type csiga(id, x, y : integer); 
type pcsiga is access csiga; 
 
protected mezo is 
   procedure szuletik(x, y : in integer); 
   procedure mozog(x, y, ix, iy : in integer); 
   procedure meghal(x,y : in integer); 
private 
   p : mezotomb; 
   id : integer := 4
   pcs : pcsiga; 
end mezo; 
 
protected body mezo is 
   procedure szuletik(x, y : in integer) is 
   begin 
      p(x,y) := p(x,y) + 1
   end szuletik; 
    
   procedure mozog(x, y, ix, iy : in integer) is 
      xx, yy : integer; 
   begin 
      xx := (x + ix) mod 5
      yy := (y + iy) mod 5
      p(x,y) := p(x,y) - 1
      p(xx, yy) := p(xx,yy) + 1
      if (p(xx, yy) > 2and (id < 25then 
         id := id + 1
         pcs := new csiga(id, xx, yy); 
      end if
   end mozog; 
       
   procedure meghal(x,y : in integer) is 
   begin 
      p(x,y) := p(x,y) - 1
   end meghal; 
 
end mezo; 
 
 
task body csiga is 
   xx : integer := x; 
   yy : integer := y; 
   xi, yi : integer; 
   n, nid : integer; 
   p : pcsiga; 
begin 
   mezo.szuletik(xx,yy); 
   ki.ir(id,"Megszulettem"); 
   for i in 1..5 loop 
      xi := protrand.rand; 
      yi := protrand.rand; 
      mezo.mozog(xx,yy,xi,yi); 
      xx := (xx + xi) mod 5
      yy := (yy + yi) mod 5
      ki.ir(id,"Mozogtam, az uj pozicio: " & integer'image(xx) & " : " & integer'image(yy));       
   end loop
   mezo.meghal(xx,yy); 
   ki.ir(id, "Meghaltam"); 
end csiga; 
 
p : pcsiga; 
 
begin 
   protrand.res; 
   p := new csiga(1,3,3); 
   p := new csiga(2,1,2); 
   p := new csiga(3,1,3); 
   p := new csiga(4,0,1); 
end csigas;
 
 
VISSZA