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..4, 0..4) of 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) > 2) and (id < 25) then
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