Программа эмуляции развития

ПРОГРАММА ЭМУЛЯЦИИ РАЗВИТИЯ ЖИВОТНЫХ 1. ВВЕДЕНИЕ. Ради интереса было дано задание написать программу типа Жизнь, но с некоторыми изменениями в начальных условиях. Условия были таковы, что в эмуляции должны участвовать две популяции хищники и травоядные, которые взаимодействовали бы друг с другом путем поедания травоядных хищниками.
В процессе разработки программы были введены дополнительные параметры – Возраст животных – Минимальный и максимальный репродуктивный возраст животных – Количество пищи нужный животным для поддержания жизни – Количество травы – Процент восстановления травы – Вероятность природных катаклизмов влияющих на популяции животных 2.
ОСНОВНАЯ ЧАСТЬ. 2.1 Методика взаимодействия популяций. Методика взаимодействий хищника и травоядного заключается в том, что и хищники, и травоядные представлены в виде точек, которые передвигаются по экрану с шагом в один пиксель. При этом заданно условие, если в радиусе один пиксель от точки принадлежащей хищнику появляется точка принадлежащая травоядному, то считается, что хищник съел травоядного.
Способ передвижения точек на экране был организован по алгоритму случайного блуждания, т.е. передвижение по осям Х и Y с шагом в один пиксель выбирается случайным образом. Умершие своей жизнью травоядные считаются, как съевшиеся хищниками. При недоедании обеими популяциями, особи умирают в процессе уменьшения возраста, т.е. чем больше возраст животного, тем больше вероятность погибнуть от голода.
Из-за больших промежуточных расчетов учет по недоеданию был выбран так, что хищники учитываются один раз в год, а травоядные двенадцать раз в год. 2.2 Описание программы. Данная программа написана с использованием объектно-ориентированного языка Borland Pascal 7.1 и построена на обработке массивов типа tosob описанного в объектном модуле fauna1. Этот тип имеет следующие параметры x – расположение по координате Х экрана y – расположение по координате Y экрана age – возраст точки col – цвет вывода на экран Программа обеспечивает следующие операции – Задание параметров популяции травоядных – Задание параметров популяции хищников – Задание параметров окружающей среды – Просмотр взаимодействия животных в графическом режиме – Индикация результатов по выходу из режима просмотра взаимодействия животных –
Выход из программы При помощи зарезервированного слова uses к программе подключается стандартные библиотечные модули TPCRT, GRAPH, DOS и библиотечные модули написанные программистом-разработчиком MYCRT и FAUNA1. В разделе описания констант и переменных были объявленны следующие переменные – gd,gm типа integer для инициализации графики – q,x,y,x1,y1,t,i,j,k,at,at1,ct1,ctp типа integer для использования их в теле циклов – g,m типа integer для задания начального количества животных – v,w типа integer для
задания максимального возраста животных – ct,ch типа shortint для задания цвета отображаемых точек – tmin,tmax,hmin,hmax,tp,hp типа integer для задания факторов влияющих на репродуктивность животных – tt типа integer для учета умерших и съеденных травоядных – kata типа integer для задания вероятности природных катаклизмов – ht типа integer для задания количества травоядных нужных хищнику для пищи – ttt типа real для задания количества травы нужных травоядному для пищи – tr типа real для задания процента
восстановления количества травы – tree,tree1 типа longint для задания и модификации количества травы – z типа longint для счетчика времени – key типа boolean для отслеживания нажатия клавиш – s,ss типа string размером в семнадцать символов для вывода на экран в графическом режиме – pal типа FillPatternType стандартная переменная библиотеки GRAPH для хранения типа и цвета заливки графических фигур объектов – tg массив объемом 4400 точек типа tosob для хранения травоядных – hr массив объемом 1350 точек типа tosob для хранения хищников 2.3 ОПИСАНИЕ БИБЛИОТЕКИ FAUNA1 В данной библиотеке описано два типа данных Tposition и Tosob. Тип Tposition имеет два параметра x – расположение по координате Х экрана y – расположение по координате Y экрана Задействованы функции getx – получение координаты Х gety – получение координаты Y А также процедура инициализации объекта init
Тип Tosob имеет четыре параметра x – расположение по координате Х экрана y – расположение по координате Y экрана age – возраст точки col – цвет вывода на экран Задействованы функции daizwet – получение цвета точки daiage – получение параметра age vidnoli – получение факта отображения на экране процедуры blind – гашение точки show – отображение точки init – создание объекта Tosob done – уничтожение объекта Tosob 2.4
ОПИСАНИЕ БИБЛИОТЕКИ MYCRT В данную библиотеку включены функции и процедуры предназначенные для работы в текстовом режиме. Процедуры fon – задание цвета фона экрана txt – задание цвета выводимых символов ramka – вывод прямоугольника символами 186,187,188,200,201,205 colorwind – вывод окна с рамкой Функции colword – преобразование чисел от одного до пятнадцати в строку с наименованием цвета mes – преобразование чисел от нуля до триста шестидесяти пяти в строку с названием месяца 2.4
ОПИСАНИЕ ОСНОВНОГО ТЕЛА ПРОГРАММЫ В основном модуле программы включены процедуры ini – вывод на экран массивов hr и tr со стартовыми параметрами tnew – движение точки принадлежащей массиву tr с проверкой возраста hnew – движение точки принадлежащей массиву hr с проверкой возраста trod – создание новых точек массива tr hrod – создание новых точек массива hr dead – процесс поглощения точки массива tr точкой массива hr havka – процесс уничтожения точек массива tr в зависимости от значения переменной tt tmor – процесс уничтожения случайного количества точек массива tr hmor – процесс уничтожения случайного количества точек массива hr zasux – подсчет переменной tree quit – выход из программы herb – организация ввода стартовых значений переменных для массива tr beast – организация ввода стартовых значений переменных для массива hr env – организация ввода значений переменных для задания переменных tree, tr, kata, q info – организация информационного окна gmenu – прорисовка основного меню omenu – прорисовка меню
Option start – запуск графического режима и запуск основного цикла komenu – организация меню Option gkmenu – организация основного меню 3. ЗАКЛЮЧЕНИЕ Данная программа представляет достаточно грубую модель жизнедеятельности и взаимодействия живых организмов. Однако, даже такое моделирование позволяет проследить основные моменты цикла жизни популяции. При возможном добавлении некоторых дополнительных факторов, моделирование может более приблизиться
к реальной ситуации. Такими факторами могут являться – Сезонные изменения климата – Технология охоты – Окружающая флора и фауна – Влияние жизнедеятельности человека – Взаимодействие особей внутри популяции Данная программа может служить в качестве учебного пособия по программированию на языке Pascal. Приложение 1. Основная программА program fauna uses mycrt,dos,graph,fauna1,tpcrt var q,x,y,x1,y1,gd,
gm,t,i,j,k,AT,at1,ct1,ctp integerобщие g,v,m,winteger ct,chshortintцвет tmin,tmax,hmin,hmax,tp,hpintegerдетородн ость ttintegerтрупы и съеденые травоядные за 1 год kata,htinteger ttt,trreal z,tree,TREE1longint keyboolean s,ssstring17 tgarray1 4400 of tosob green-травоядных hrarray1 1350 of tosob red-хищников palFillPatternType procedure ini begin for i1 to g do begin atRANDOMv1 tgi.initrandom6305,random46218,at,ct tgi.show end for i1 to m do begin atrandomw1 HRi.initrandom6305,random46218,at,ch hri.show end end procedure tnew begin I0 REPEAT II1 begin xtgi.getx ytgi.gety ATTGI.DAIAGE CTPTGI.DAIZWET if z mod 3650 then BEGIN atat1 Happy New Year TGI.INITX,Y,AT,CTP END if at v then Old begin tgi.done tgi.init0,0,0,0 tttt1умершее животное for ji1 to g do begin x1tgj.getx y1tgj.gety at1tgj.daiage ct1tgj.daizwet tgj.done tgj-1.initx1,y1,at1,ct1 tgj-1.show end
TGG.INIT0,0,0,0 GG-1 II-1 CONTINUE end xtgi.getx ytgi.gety xxrandom3-1 yyrandom3-1 if x 5 then x6if x 635 then x634if y 17 then y18 if y 480 then y479 ATTGI.DAIAGE CTPTGI.DAIZWET tgi.done IF CT 0 THEN BEGIN tgi.initx,y,at,CTP tgi.show END END UNTIL I G end procedure trod begin if z mod 3650 then Happy New Year begin t0 for i1 to g do begin attgi.daiage if tmin at
AND AT tmax then tt1 end tt div 2 x0 if t 0 then begin FOR I1 TO T DO begin JRANDOMTP xxj end for yg1 to g1x do begin tgy.initrandom6305,random46218,0,ct tgy.show if y 4100 then break end gg1x if g 4000 then begin keytrue end end else begin end end end procedure hnew begin I0 REPEAT II1 begin xhri.getx yhri.gety AthrI.DAIAGE CTphrI.DAIZWET if z mod 3650 then BEGIN atat1
Happy New Year hrI.INITX,Y,At,CTp END if at w then Old begin hri.done hri.init0,0,0,0 for ji1 to m do begin x1hrj.getx y1hrj.gety at1hrj.daiage ct1hrj.daizwet hrj.done hrj-1.initx1,y1,at1,ct1 hrj-1.show end hrm.INIT0,0,0,0 mm-1 II-1 CONTINUE end xhri.getx yhri.gety xxrandom3-1 yyrandom3-1 if x 5 then x6if x 635 then x634if y 17 then y18 if y 480 then y479 AThrI.
DAIAGE CTphrI.DAIZWET hri.done IF CTp 0 THEN BEGIN hri.initx,y,at,CTp hri.show END END UNTIL I m end procedure hrod begin if z mod 3650 then Happy New Year begin t0 for i1 to m do begin athri.daiage if hmin at AND AT hmax then tt1 end tt div 2 if t 0 then begin x0 FOR I1 TO T DO begin JRANDOMhP xxj end for ym1 to m1x do begin hry.initrandom6305,random46218,0,ch hry.show end mm1x if m 1000 or m 0 then begin keytrue end end end end procedure deadхищники едят в радиусе 1 пиксель begin for i1 to m do begin xhri.getx yhri.gety j0 repeat jj1 x1tgj.getx y1tgj.gety if xx1andyy1orxx1andyy1-1orxx1 andyy11orxx1-1andyy1orxx1-1andyy1-1 orxx1-1andyy11orxx11andyy1orxx11and yy1-1orxx11andyy11then begin tgj.done tgj.init0,0,0,0 tttt1 kj repeat kk1 x1tgk.getx y1tgk.gety at1tgk.daiage ct1tgk.daizwet tgk.done tgk-1.initx1,y1,at1,ct1 tgk-1.show until k g TGG.
INIT0,0,0,0 GG-1 jj-1 end else begin end until j g end end procedure havka begin if z mod 3650 and tt 0 then begin x1tt div htсколько прокормилось в этом году j0 y1wmax vozrast if x10 then begin for i1 to m do begin hri.init0,0,0,0 hri.done end end if x1 m and x1 0 then begin repeat jj1 if hrj.daiagey1 then begin hrj.done hrj.init0,0,0,0 for ij1 to m do begin xhri.getx yhri.gety at1hri.daiage ct1hri.daizwet hri.done hri-1.initx,y,at1,ct1 HRi-1.show end hrm.init0,0,0,0 mm-1 if m 0 then begin keytrue break end
end if j m then begin j0 y1y1-1 end if m 0 then break until x1m end end end procedure tmorмор травоядных begin yg-x if x 0 then begin repeat jrandomg1 tgj.done tgj.init0,0,0,0 tttt1 for ij1 to g do begin x1tgi.getx y1tgi.gety at1tgi.daiage ct1tgi.daizwet tgi.done tgi-1.initx1,y1,at1,ct1 tgi-1.show end tgg.done tgg.init0,0,0,0 gg-1 until yg end end procedure hmorмор хищников begin ym-x if x 0 then begin repeat jrandomm1 hrj.done hrj.init0,0,0,0 for ij1 to m do begin x1hri.getx y1hri.gety at1hri.daiage ct1hri.
daizwet hri.done hri-1.initx1,y1,at1,ct1 hri-1.show end hrm.done hrm.init0,0,0,0 mm-1 until my end end procedure zasuxзасуха begin treetree – randomroundtree10 end procedure quit begin window1,1,80,25 fonblack clrscr GOTOXY1,24 txtWhite end procedure herbтравоядные begin colorwind3,20,77,25,black,yellow gotoxy32,1 writelnПравила ввода для травоядных gotoxy2,2writeКол-во травоядных не более 3000. write Корм на месяц в килограммах. gotoxy2,3 writeПомет – кол-во детенышей. writeЦвет вывода от 1 до 15 colorwind40,10,65,19,black,green gotoxy6,1 txtYellow writeТравоядные gotoxy2,2 writeКол-во начальное кол-во травоядных readlng txtyellow gotoxy2,3 writeКорм кол-во корма в год на одного травоядного readlnttt t1000 gotoxy2,4 writeПомет рождаемость readlntp gotoxy2,5 writeMin детородный readtmin gotoxy2,6 writeMax детородный readtmax gotoxy2,7 writeMax возрaст readv gotoxy2,8 writeЦвет вывода readct colorwind3,20,77,25,black,black end procedure beast хищники begin colorwind3,20,77,25,black,yellow gotoxy32,1 writelnПравила ввода для хищников gotoxy2,2writeКол-
во хищников не более 1000. write Корм – кол-во травоядных в год. gotoxy2,3 writeПомет – кол-во детенышей. writeЦвет вывода от 1 до 15 colorwind40,10,65,19,black,red gotoxy8,1 txtYellow writeХищники gotoxy2,2 txtyellow writeКол-во readlnm gotoxy2,3 writeКорм начальное кол-во хищников readlnht gotoxy2,4 writeПомет рождаемость -18- readlnhp gotoxy2,5 writeMin детородный естественная смертность readhmin gotoxy2,6 writeMax детородный естественная смертность readhmax gotoxy2,7 writeMax возраст естественная смертность readw
gotoxy2,8 writeЦвет вывода readch colorwind3,20,77,25,black,black end procedure env среда обитания begin colorwind3,20,77,25,black,yellow gotoxy32,1 writelnПравила ввода для среды gotoxy2,2writeКол-во травы не менее 1000. writeПроцент восстановления любой.gotoxy2,3 writeКатастрофы 0 или 1 – нет, 2 и более-есть. gotoxy2,4 writeЗадержка сообщений в мс. Рекомендуется не менее 1000 colorwind40,10,75,17,black,
Magenta gotoxy13,1 txtYellow writeСреда обитания gotoxy2,2 txtyellow writeКол-во травы Кол-во востанавливаемой пищи для травоядных в год readlntree gotoxy2,3 writeПроцент восстановления readlntr gotoxy2,4 writeНаличие катастроф readlnkata gotoxy2,5 writeЗадержка сообщений readlnq colorwind3,20,77,25,black,black end procedure info begin fon15 colorwind1,4,70,16,black,Lightblue txtGreen gotoxy2,2writeТравоядных g, Хищников m strttt12,s gotoxy2,3 writes, т. травы и ,ht, туш нужно на прокорм животных gotoxy2,4 writeMax возраст травоядных ,v хищников ,w gotoxy2,5 writeДетородный возраст травоядных от ,tmin, до ,tmax gotoxy2,6 writeДетородный возраст хищников от ,hmin, до ,hmax gotoxy2,7 writeПомет травоядных до ,tp хищников до ,hp gotoxy2,8writeТравы ,tree, тонн strtr12,s gotoxy2,9writeПрирост травы на каждый месяц ,s, if kata0 or kata1 then sотсутствует else sприсутствует gotoxy2,10writeВероятность катаклизмов ,s scolwordct gotoxy2,11writeЦвет травоядных ,s scolwordch write
Цвет хищников ,s end procedure Gmenu begin fonblack clrscr colorwind1,1,80,4,black,darkgray txt14 gotoxy5,2 write S txtwhite writetart txtyellow writeO txtwhite writeption txtyellow writeQ txtwhite writeuit END PROCEDURE Omenu begin colorwind45,3,62,8,black,darkgray hiddencursor txt14 gotoxy2,2 writeH txtwhite writelnerbivorous txtyellow gotoxy2,3 writeB txtwhite writelneast of prey txtyellow gotoxy2,4 writeE txtwhite writenvironment end procedure start begin randomize gD
Detect InitGraphgD,gM, setfillpatternpal,black z0начало эры tt0 трупы и съеденные ini repeat keyfalse zz1 if z mod 3650 or z mod 36531 or z mod 36559 or z mod 36590 or z mod 365120 or z mod 365151 or z mod 365181 or z mod 365212 or z mod 365242 or z mod 365273 or z mod 365303 or z mod 365334 then begin treeroundtree-gtttсъели за месяц treetreeroundtreetr100прирост травы в месяц xroundtreetttтравоядные умирают от недоедания if tree 0 then begin keytrue g0 m0 end else begin if x g then begin repeat jrandomg1
tgj.done tgj.init0,0,0,0 tttt1 for ij1 to g do begin x1tgi.getx y1tgi.gety at1tgi.daiage ct1tgi.daizwet tgi.done tgi-1.initx1,y1,at1,ct1 tgi-1.show end tgg.done tgg.init0,0,0,0 gg-1 until xg end end end if g 0 then tnewестественная смертность травоядных if m 0 then begin deadхищники едят травоядных hnewестественная смертность хищников havkaхищники умирают от недоедания hrodрождение хищников end if z mod 365180andg 0andm 0 then begin if randomkata 0 then begin xrandom4 if x0 then begin xrandomroundg505 moveto320,240setcolorLightredstrx,s OuttextБолезнь травоядных унесла OuttextsOuttext жизней tmor end if x1 then begin xrandomroundm401 moveto320,240setcolorLightredstrx,s OuttextБолезнь хищников унесла OuttextsOuttext жизней hmor end if x2 then begin zasux moveto320,240setcolorLightred strtree1,sOuttextЗасуха Потеряно OuttextsOuttext тонн травы delayq end if x3 then begin xrandomroundg505 moveto0,240setcolorLightredstrx,s OuttextНаводнение погубило OuttextsOuttext травоядных, tmor xrandomroundm401 strx,sOuttextsOuttext
хищников, hmor zasux strtree1,sOuttextsOuttext тонн травы delayq end delayq bar0,240,640,260 end end if g 0 then trodрождение травоядных if g 4000 then break if keypressed then keytrue if g 4000 or g 0 or m 0 or m 1000 then keytrue setcolorwhite bar0,0,640,17 moveto0,0 outtextТравоядные Хищники Съедено Трава Год setcolorctmoveto0,10strg,souttexts setcolorchmoveto175,10strm,souttexts setcolorredmoveto300,10strtt,souttexts setcolorgreenmoveto400,10strtree,souttex ts setcolormagentamoveto510,10strz div 365,s outtextmeszouttext
outtextsouttext года if z mod 3650 then tt0 until keytrue closegraph end procedure komenu var keychar begin repeat keyreadkey if keyh or keyH then begin herb window40,10,80,25 fonblack clrscr info omenu end if keyB or keyb then begin beast window40,10,80,25 fonblack clrscr info omenu end if keyE or keye then begin env window40,10,80,25 fonblack clrscr info omenu end until key27 quit CLRSCR end PROCEDURE GKMENU var key2char key1boolean begin gmenu info repeat key2readkey if key2s or
key2S then begin ifg 0andm 0andttt 0andtp 0andtmin 0andtmax 0 andct 0andht 0andhp 0andhmin 0andhmax 0and Ch 0andtree 0and tr 0andkata 0then begin start gmenu info key1false end end if key2oorkey2O then begin Omenu komenu GMENU info key1false end if key2q or key2Qorkey227 then begin key1true quit end until key1true end Body program begin g1200травоядные кол-во v30возраст травоядного m200хищники кол-во w25возраст хищника ctyellowchred tmin2tmax28 hmin3hmax24 tp3hp7детородность kata9 ht3 ttt1 tree1300 tr15.1 hiddencursor GKMENU end. Приложение 2. Библиотека Fauna1 Init object unit fauna1 interface uses graph Type TPositionobject x,y integer procedure Initx0,y0 integer function getx integer function gety integer end type TosobobjectTPosition color word vidno boolean AGE INTEGER constructor Initx0,y0,age0integercolword destructor Done virtual procedure Show virtual procedure Blind virtual function
Daizwet word function VidnoLi boolean FUNCTION DAIAGE INTEGER end PosobTosob metod Tposition Implementation Procedure Tposition.Initx0,y0integer Begin xx0 yy0 End Function Tposition.Getxinteger Begin GetXx End Function Tposition.Getyinteger Begin Getyy End Constructor
Tosob.Initx0,y0,age0integercolword Begin Tposition.Initx0,y0 AGEAGE0 colorcol vidnofalse End Destructor Tosob.Done Begin Tosob.blind End procedure Tosob.Show Begin putpixelTPosition.GetX, TPosition.GetY,color vidnoTrue End procedure Tosob.Blind Begin putpixelTPosition.GetX,
TPosition.GetY,GetBKColor vidnoFalse End Function Tosob.Daizwet word Begin Daizwetcolor End Function Tosob.VidnoLi Boolean Begin VidnoLiVidno End FUNCTION TOSOB.DAIAGEINTEGER BEGIN DAIAGEAGE END End. Приложение 3. Библиотека Mycrt unit Mycrt interface uses tpcrt,dos procedure fonxbyte procedure txtcolbyte procedure
ramkax1,y1,x2,y2integer procedure colorwindv1,v2,v3,v4,fon,textbyte FUNCTION COLWORDCOLBYTESTRING function meszlongintstring implementation function mes var colstring xinteger begin xz mod 365 if x 0andx 30 then colЯнварь if x 31andx 58 then colФевраль if x 59andx 89 then colМарт if x 90andx 119 then colАпрель if x 120andx 150 then colМай if x 151andx 180 then colИюнь if x 181andx 211 then colИюль if x 212andx 241 then colАвгуст if x 242andx 272 then colСентябрь if x 273andx 303 then colОктябрь if x 304andx 335 then colНоябрь if x 336andx 365 then colДекабрь mescol end FUNCTION COLWORD VAR COLOSTRING BEGIN IF COL0 THEN COLOЧЕРНЫЙ IF COL1 THEN COLOСИНИЙ IF COL2 THEN COLOЗЕЛЕНЫЙ IF COL3 THEN COLOГОЛУБОЙ IF COL4 THEN COLOКРАСНЫЙ IF COL5 THEN COLOФИОЛЕТОВЫЙ IF COL6 THEN COLOКОРИЧНЕВЫЙ
IF COL7 THEN COLOСВЕТЛО-СЕРЫЙ IF COL8 THEN COLOТЕМНО-СЕРЫЙ IF COL9 THEN COLOСВЕТЛО-СИНИЙ IF COL10 THEN COLOСВЕТЛО-ЗЕЛЕНЫЙ IF COL11 THEN COLOСВЕТЛО-ГОЛУБОЙ IF COL12 THEN COLOСВЕТЛО-КРАСНЫЙ IF COL13 THEN COLOСВЕТЛО-ФИОЛЕТОВЫЙ IF COL14 THEN COLOЖЕЛТЫЙ IF COL15 THEN COLOБЕЛЫЙ COLWORDCOLO
END procedure fon begin textbackgroundx end procedure txt begin textcolorcol end procedure ramka вывести рамку const a186b187c188d200e201f205 T var i,jinteger begin hiddencursor gotoxyx1,y1 writee for ix11 to x2-1 do writef writeb for iy11 to y2-1 do begin gotoxyx1,i writea gotoxyx2,i writea end gotoxyx1,y2 writed for ix11 to x2-1 do writef writec hiddencursor end procedure colorwind сделать окно с рамкой begin windowv1,v2,v3,v4 textbackgroundfon clrscr textcolortext ramka1,1,v3-v1,v4-v2 end begin end.
Приложение 4. Инструкция пользователя. Запустить на исполнение файл fauna.exe, который должен находится в одном каталоге с файлом egavga.bgi. На экране появиться основное горизонтальное меню, с тремя пунктами Start, Option, Quit. Активизация графического режима и запуск отображения на экран произойдет при нажатии клавиш s или S. Выход из программы можно осуществить клавишами q или Q. Активизация меню Option произойдет при нажатии клавиш
O или o. В этом меню появиться три пункта – Herbivorous, Beast of prey, Environment. При нажатии H или h будут задаваться параметры травоядных. При нажатии B или b будут задаваться параметры хищников. При нажатии E или e будут задаваться параметры окружающей среды. При вводе параметров хищников, травоядных и окружающей среды надо следовать подсказкам появляющимся внизу экрана. При нажатии клавиши Esc произойдт выход в DOS из любого места программы.