Программа эмуляции развития популяций животных
llPatternType;
{***********************************************************}
procedure ini;
begin
for i:=1 to g do
begin
at:=RANDOM(v)+1;
tg[i].init((random(630)+5),(random(462)+18),at,ct);
tg[i].show;
end;
for i:=1 to m do
begin
at:=random(w)+1;
HR[i].init((random(630)+5),(random(462)+18),at,ch);
hr[i].show;
end;
end;
{***********************************************************}
procedure tnew;
begin
I:=0;
REPEAT
I:=I+1;
begin
x:=tg[i].getx;
y:=tg[i].gety;
AT:=TG[I].DAIAGE;
CTP:=TG[I].DAIZWET;
if (z mod 365)=0 then
BEGIN
at:=at+1; {Happy New Year!}
TG[I].INIT(X,Y,AT,CTP);
END;
if at>v then {Old ?}
begin
tg[i].done;
tg[i].init(0,0,0,0);
tt:=tt+1;{умершее животное}
for j:=i+1 to g do
begin
x1:=tg[j].getx;
y1:=tg[j].gety;
at1:=tg[j].daiage;
ct1:=tg[j].daizwet;
tg[j].done;
tg[j-1].init(x1,y1,at1,ct1);
tg[j-1].show;
end;
TG[G].INIT(0,0,0,0);
G:=G-1;
I:=I-1;
CONTINUE;
end;
x:=tg[i].getx;
y:=tg[i].gety;
x:=x+(random(3)-1);
y:=y+(random(3)-1);
if x<5 then x:=6;if x>635 then x:=634;if y<17 then y:=18;
if y>480 then y:=479;
AT:=TG[I].DAIAGE;
CTP:=TG[I].DAIZWET;
tg[i].done;
IF CT<>0 THEN
BEGIN
tg[i].init(x,y,at,CTP);
tg[i].show;
END;
END;
UNTIL I>=G;
end;
{***********************************************************}
procedure trod;
begin
if (z mod 365)=0 then {Happy New Year!}
begin
t:=0;
for i:=1 to g do
begin
at:=tg[i].daiage;
if (tmin<=at) AND (AT<=tmax) then t:=t+1;
end;
t:=(t div 2);
x:=0;
if t>0 then
begin
FOR I:=1 TO T DO
begin
J:=RANDOM(TP);
x:=x+j;
end;
for y:=g+1 to g+1+x do
begin
tg[y].init((random(630)+5),(random(462)+18),0,ct);
tg[y].show;
if y>4100 then break;
end;
g:=g+1+x;
if g>4000 then
begin
key:=true;
end;
end
else
begin
end;
end;
end;
{***********************************************************}
procedure hnew;
begin
I:=0;
REPEAT
I:=I+1;
begin
x:=hr[i].getx;
y:=hr[i].gety;
At:=hr[I].DAIAGE;
CTp:=hr[I].DAIZWET;
if (z mod 365)=0 then
BEGIN
at:=at+1; {Happy New Year!}
hr[I].INIT(X,Y,At,CTp);
END;
if at>w then {Old ?}
begin
hr[i].done;
hr[i].init(0,0,0,0);
for j:=i+1 to m do
begin
x1:=hr[j].getx;
y1:=hr[j].gety;
at1:=hr[j].daiage;
ct1:=hr[j].daizwet;
hr[j].done;
hr[j-1].init(x1,y1,at1,ct1);
hr[j-1].show;
end;
hr[m].INIT(0,0,0,0);
m:=m-1;
I:=I-1;
CONTINUE;
end;
x:=hr[i].getx;
y:=hr[i].gety;
x:=x+(random(3)-1);
y:=y+(random(3)-1);
if x<5 then x:=6;if x>635 then x:=634;if y<17 then y:=18;
if y>480 then y:=479;
AT:=hr[I].DAIAGE;
CTp:=hr[I].DAIZWET;
hr[i].done;
IF CTp<>0 THEN
BEGIN
hr[i].init(x,y,at,CTp);
hr[i].show;
END;
END;
UNTIL I>=m;
end;
{**********************************************************}
procedure hrod;
begin
if (z mod 365)=0 then {Happy New Year!}
begin
t:=0;
for i:=1 to m do
begin
at:=hr[i].daiage;
if (hmin<=at) AND (AT<=hmax) then t:=t+1;
end;
t:=(t div 2);
if t>0 then
begin
x:=0;
FOR I:=1 TO T DO
begin
J:=RANDOM(hP);
x:=x+j;
end;
for y:=m+1 to m+1+x do
begin
hr[y].init((random(630)+5),(random(462)+18),0,ch);
hr[y].show;
end;
m:=m+1+x;
if (m>1000) or (m<=0) then
begin
key:=true;
end;
end;
end;
end;
{***********************************************************}
procedure dead;{хищники едеят в радиусе 1 пиксель}
begin
for i:=1 to m do
begin
x:=hr[i].getx;
y:=hr[i].gety;
j:=0;
repeat
j:=j+1;
x1:=tg[j].getx;
y1:=tg[j].gety;
if ((x=x1)and(y=y1))or((x=x1)and(y=y1-1))or((x=x1)
and(y=y1+1))or((x=x1-1)and(y=y1))or((x=x1-1)and(y=y1-1))
or((x=x1-1)and(y=y1+1))or((x=x1+1)and(y=y1))or((x=x1+1)and
(y=y1-1))or((x=x1+1)and(y=y1+1))then
begin
tg[j].done;
tg[j].init(0,0,0,0);
tt:=tt+1;
k:=j;
repeat
k:=k+1;
x1:=tg[k].getx;
y1:=tg[k].gety;
at1:=tg[k].daiage;
ct1:=tg[k].daizwet;
tg[k].done;
tg[k-1].init(x1,y1,at1,ct1);
tg[k-1].show;
until k>=g;
TG[G].INIT(0,0,0,0);
G:=G-1;
j:=j-1;
end
else
begin
end;
until j>=g;
end;
end;
{**********************************************************}
procedure havka;
begin
if ((z mod 365)=0) and (tt>0) then
begin
x1:=(tt div ht);{сколько прокормилось в этом году}
j:=0;
y1:=w;{max vozrast}
if x1=0 then
begin
for i:=1 to m do
begin
hr[i].init(0,0,0,0);
hr[i].done;
end;
end;
if (x1<>0) then
begin
repeat
j:=j+1;
if hr[j].daiage=y1 then
begin
hr[j].done;
hr[j].init(0,0,0,0);
for i:=j+1 to m do
begin
x:=hr[i].getx;
y:=hr[i].gety;
at1:=hr[i].daiage;
ct1:=hr[i].daizwet;
hr[i].done;
hr[i-1].init(x,y,at1,ct1);
HR[i-1].show;
end;
hr[m].init(0,0,0,0);
m:=m-1;
if m<=0 then
begin
key:=true;
break;
end;
end;
if j>=m then
begin
j:=0;
y1:=y1-1;
end;
if m<=0 then break;
until x1=m
end;
end;
end;
{***********************************************************}
procedure tmor;{мор травоядных}
begin
y:=g-x;
if x>0 then
begin
repeat
j:=random(g)+1;
tg[j].done;
tg[j].init(0,0,0,0);
tt:=tt+1;
for i:=j+1 to g do
begin
x1:=tg[i].getx;
y1:=tg[i].gety;
at1:=tg[i].daiage;
ct1:=tg[i].daizwet;
tg[i].done;
tg[i-1].init(x1,y1,at1,ct1);
tg[i-1].show;
end;
tg[g].done;
tg[g].init(0,0,0,0);
g:=g-1;
until y=g;
end;
end;
{***********************************************************}
procedure hmor;{мор хищников}
begin
y:=m-x;
if x>0 then
begin
repeat
j:=random(m)+1;
hr[j].done;
hr[j].init(0,0,0,0);
for i:=j+1 to m do
begin
x1:=hr[i].getx;
y1:=hr[i].gety;
at1:=hr[i].daiage;
ct1:=hr[i].daizwet;
hr[i].done;
hr[i-1].init(x1,y1,at1,ct1);
hr[i-1].show;
end;
hr[m].done;
hr[m].init(0,0,0,0);
m:=m-1;
until m=y;
end;
end;
{***********************************************************}
procedure zasux;{засуха}
begin
tree:=tree - random(round(tree/10));
end;
{***********************************************************}
procedure quit;
begin
window(1,1,80,25);
fon(black);
clrscr;
GOTOXY(1,24);
txt(White);
WRITELN(' --------------------------------------------------
----------------------------');
txt(yellow);
WRITELN(' Antony Sokolov | FidoNet 2:5078/20.4 AKA
2:5078/20.666 AKA 2:5078/22.666');
txt(White);
WRITELN(' --------------------------------------------------
----------------------------');
end;
{***********************************************************}
procedure herb;{травоядные}
begin
colorwind(3,20,77,25,black,yellow);
gotoxy(32,1);
writeln('Правила ввода для травоядных');
gotoxy(2,2);write('Кол-во травоядных не более 3000.');
write(' Корм на месяц в килограммах. ');gotoxy(2,3);
write('Помет - кол-во детенышей. ');write('Цвет вывода от 1
до 15');
colorwind(40,10,65,19,black,green);
gotoxy(6,1);
txt(Yellow);
write('Травоядные');
gotoxy(2,2);
write('Кол-во: '); {начальное кол-во травоядных}
readln(g);
txt(yellow);
gotoxy(2,3);
write('Корм : ');{кол-во корма в год на одного
травоядного}
readln(ttt);
ttt:=ttt/1000;
gotoxy(2,4);
write('Помет: '); {рождаемость}
readln(tp);
gotoxy(2,5);
write('Min детородный: ');
read(tmin);
gotoxy(2,6);
write('Max детородный: ');
read(tmax);
gotoxy(2,7);
write('Max возрaст: ');
read(v);
gotoxy(2,8);
write('Цвет вывода: ');
read(ct);
colorwind(3,20,77,25,black,black);
end;
{***********************************************************}
procedure beast; {хищники}
begin
colorwind(3,20,77,25,black,yellow);
gotoxy(32,1);
writeln('Правила ввода для хищников');
gotoxy(2,2);write('Кол-во хищников не более 1000.');
write(' Корм - кол-во травоядных в год. ');gotoxy(2,3);
write('Помет - кол-во детенышей. ');write('Цвет вывода от 1
до 15');
colorwind(40,10,65,19,black,red);
gotoxy(8,1);
txt(Yellow);
write('Хищники');
gotoxy(2,2);
txt(yellow);
write('Кол-во: ');
readln(m);
gotoxy(2,3);
write('Корм: ');{начальное кол-во хищников}
readln(ht);
gotoxy(2,4);
write('Помет: ');{рождаемость}
readln(hp);
gotoxy(2,5);
write('Min детородный: '); {естественная смертность}
read(hmin);
gotoxy(2,6);
write('Max детородный: '); {естественная смертность}
read(hmax);
gotoxy(2,7);
write('Max возраст: '); {естественная смертность}
read(w);
gotoxy(2,8);
write('Цвет вывода: ');
read(ch);
colorwind(3,20,77,25,black,black);
end;
{***********************************************************}
procedure env ; {среда обитания}
begin
colorwind(3,20,77,25,black,yellow);
gotoxy(32,1);
writeln('Правила ввода для среды');
gotoxy(2,2);write('Кол-во травы не менее 1000.');
write('Процент восстановления любой.');gotoxy(2,3);
write('Катас
| | скачать работу |
Программа эмуляции развития популяций животных |