Реферат Розробка гри "Життя"

>Міністерствоосвіти й науки України

>Полтавськийнаціональнийтехнічнийуніверситет

>імені Юрія Кондратюка

Факультетінформаційних тателекомунікаційнихтехнологій й систем

Кафедракомп’ютерних таінформаційнихтехнологій й систем

>Курсова робота

іздисципліни «Основипрограмування таалгоритмічнімови»

>КР ______

>Розробивcтудент

>групи101-ТН

>Керівник роботи

Полтава 2010


>Зміст

 

>Вступ

1. Постановказадачі

2.Розв’язаннязадачі

3. Алгоритмзадачі

4.Реалізаціяпрограми 8

5.Демонстрація роботипрограми

>Висновок

>Використаналітература


>Вступ

>Щобвиконатидану роботутреба матірдостатнізнаннямовипрограмування Турбо Паскаль, атакожвмінняскладатиалгоритми. Для кодуданоїпрограми явикориставнавики ізвиконанняпрактичнихробіт.

>Гру «>Життя»впершестворив Дж.Конвей. Цевласне негра, а проста модельеволюціїгрупиживихорганізмів.Пасивнеспостереження надсукупністювеликоїкількостіпоколіньцієїгриможедатиякусьзадоволення.

>Ігровимполем(«житєвим простором») вцій груявляєтьсядвохвимірнаповерхня,розділена наквадрати. Мицеповерхня тору, котра немаєграниць:наявністьграницьзавждизв’язано із проблемами. Кожнаклітинкамає 8сосідів. Осередокможе бути заселена одниморганізмом, чи бутипорожньою.


1. Постановказадачі

>Розробитипрограму длявирішенняпоставленоїприкладноїзадачі. Привирішеннізадачінеобхідно:

-Створитипрограму усередовищіпрограмування TurboPascal

-Розробити алгоритмфункціонуванняпрограми

-Надати блок-схему алгоритму

-Продемонструвати роботупрограми

 >УМОВАЗАДАЧІ

Грамоделює життяпоколіньгіпотетичноїколоніїживихкліток,яківиживають,розмножуються чигинуть увідповідності ізнаступними правилами.

>Кліткавиживає,якщомає двох читрьохсусідів із восьмиможливих,якщо один чижодного токліткагине візоляції.Якщомаєчотири на тегине відперенаселення.Убудь-якійпорожнійпозиції уякоїрівно трисусіди унаступномупоколінніз'являється новаклітка.

 


2.Розв’язаннязадачі

>Популяцію впершомупоколіннізадамовипадково. Цеозначає, щорішення про ті, чи якщокожнаклітка заселена,приймається іздеякоювірогідністю. Упрограмі life привідображеннігрупивіртуальнихорганізміввикористанаанімація.Ефектанімації підстав напослідовнійзмінікадрів –графічнихзображень. Дляшвидкого переходу від одного «кадру» доіншоговикористаємодвіграфічністорінки.Графічнасторінка – областьвідеопам’яті, Яказберігаєзображення. При цьому,якщо режим роботивідеоадаптерапідтримує роботу лише ізоднієюсторінкою,їївміствідображається наекрані. Удеяких режимах роботипідтримуютьсядекількаграфічнихсторінок.Вмістоднієї із них («>візуальної»)відображається не так наекрані, але вдругій («>активній»),невидимійкористувачу, за годинуможебудуватисяновезображення.Підготовлене нановійсторінцізображеннявиводиться наекран.Такийспосібможливий,наприклад, пророботі врежиміVGA ізроздільноюздатність640х480,бо в цьомурежимієдвіграфічністорінки. Урозділіопису константзаданіпараметрипрограми, котріякщодоведетьсязмінювати, торідко, тому некомфортно їхнівводити прикожному запускупрограми:

>Hor –кількістькліток погоризонталі

>Ver –кількістькліток повертикалі

>Cell_width,cell_height – ширина тависотаклітки

>Prob_factor – параметр, щовизначаєвірогідністьзаселеннякліток проформуванніпочатковоїпопуляції.

Процедураinit_cellsформуєпочатковупопуляцію,встановлюючиелементаммасиваnew_genзначення 0 чи 1 ізвикористаним параметромвірогідності.

Процедураnext_generationбудує вмасивіnew_genбудуєнаступнупопуляцію за правилами.

Процедураinit_screenініціалізуєграфічний режим тазаповнюємасивиграфічних координатцентрівкліток. Процедураdisplayвиконуєосновну роботу попобудовізображенняробочого полягри наприхованійактивнійсторінці тавиводить наекран. ЦеуможливлюютьпроцедуриSetActivePage таSetVisualPage,викликані із параметром 0 чи 1,визначаючим номерграфічноїсторінки.Перша процедура привикликаннівстановлюєактивнусторінку, а другавізуальну.

a.         Алгоритмзадачі

А)Головний алгоритм


Б) Алгоритмпроцедури >init_cells


У) Алгоритмпроцедури next_>generation


Р) Алгоритмпроцедури >init_>screen

Д) Алгоритмпроцедури >display


Є) Алгоритмпроцедури >rule_plane


>Реалізаціяпрограми

>PROGRAMLIFE;

>usescrt,dos,graph;

>const

 >hor=100;

 >ver=70;

 >cell_width=8;

 >cell_height=6;

 >prob_factor=0.5;

>var

 >old_gen,new_gen:array[0..ver,0..hor] of 0..1;

 >prob:real;

 >ch:char;

 >x_center:array[0..hor] ofword;

 >y_center:array[0..hor] ofword;

 >gen_count,radius,page:word;

 >ss:string[10];

>procedureinit_cells;

>var

 >j,k:word;

>begin

 >gen_count:=0;

 >forj:=0 toverdo

>fork:=0 tohordo

>begin

>old_gen[j,k]:=0;

>ifrandom<=probthen

 >new_gen[j,k]:=1

>else

 >new_gen[j,k]:=0;

 end;

end;

>procedurenext_generation;

>var

 >j,k,m,prev_j,next_j,prev_k,next_k:word;

>begin

 >old_gen:=new_gen;

 >forj:=0 toverdo

 >begin

>ifj=0then

 >prev_j:=ver

>else

 >prev_j:=j-1;

>ifj=verthen

 >next_j:=0

>else

 >next_j:=j+1;

 >fork:=0 tohordo

 >begin

>ifk=0then

 >prev_k:=ver

>else

 >prev_k:=k-1;

>ifk=horthen

 >next_k:=0

>else

 >next_k:=k+1;

>m:=old_gen[prev_j,prev_k]

+>old_gen[prev_j,k]

+>old_gen[prev_j,next_k]

+>old_gen[j,prev_k]

+>old_gen[j,next_k]

+>old_gen[next_j,prev_k]

+>old_gen[next_j,k]

+>old_gen[next_j,next_k];

 >if (>old_gen[j,k]=1) and ((>m<=1) or (>m>=4))then

>new_gen[j,k]:=0

 >else

>if (>old_gen[j,k]=0) and (>m=3)then

 >new_gen[j,k]:=1

>else

 >new_gen[j,k]:=old_gen[j,k];

end;

 end;

end;

>procedureinit_screen;

>var

 >graphdriver,graphmode:integer;

 >j,k:word;

>begin

 >graphdriver:=vga;

 >graphmode:=vgamed;

 >page:=0;

 >initgraph(graphdriver,graphmode,'');

 >ifgraphresult<>grOkthen

>halt;

 >fork:=0 tohordo

>x_center[k]:=k*cell_width+cell_widthdiv 2;

 >forj:=0 toverdo

>y_center[j]:=j*cell_height+cell_heightdiv 2;

 >radius:=4;

end;

>proceduredisplay;

>var

 >j,k:word;

>procedurerule_plane;

>var

 >j,k:word;

>begin

 >setviewport(0,0,getmaxx,getmaxy,clipon);

 >setfillstyle(solidfill,blue);

 >bar(0,0,getmaxx,10);

 >setcolor(white);

 >outtext('Generation: ');

 >outtextxy(250,0,'Q:Quit');

 >outtextxy(450,0,'Anyotherkey:renew');

 >str(gen_count,ss);outtext(ss);

 >setbkcolor(darkgray);

end;

>begin

 >ifgen_count<>0then

>next_generation;

 >inc(gen_count);

 >page:=1-page;

 >setactivepage(page);

 >cleardevice;

 >setcolor(yellow);

 >forj:=0 toverdo

>fork:=0 tohordo

 >ifnew_gen[j,k]=1then

>circle(x_center[k],y_center[j],radius);

 >rule_plane;

 >setvisualpage(page);

end;

>begin

>init_screen;

 >repeat

>randomize;

>prob:=0.1+prob_factor*random;

>outtextxy(0,0,'Game of life');

>writeln;

>outtextxy(0,15,'Livecellsinsertedatrandom,');

>str(prob:3:3,ss);

>outtextxy(0,30,'withprobability '+>ss);

>outtextxy(0,60,'Pressanykey tostart: ');

>ch:=readkey;

>cleardevice;

 >init_cells;

 >repeat

 >display;

 >ifkeypressedthen

>begin

 >ch:=readkey;

 >break;

end;

>untilfalse;

>setviewport(0,0,getmaxx,getmaxy,clipon);

>cleardevice;

>setcolor(white);

>ifupcase(ch)='Q'then

 >break;

>untilfalse;

 >closegraph;

end.


b.         >Демонстрація роботипрограми

>Початковевікнопрограми

>Процесгенерації 12популяції


>ВИСНОВОК

 

>Розробленапрограмадозволяєспостерігати життя,наприклад,колоніїживихорганізмів. Ядетальнішепознайомився із принципами роботи вграфічномурежимі.


>ВИКОРИСТАНАЛІТЕРАТУРА

 

«Основипрограмування»Т.В.Ковалюк

«TurboPascal»В.Фаронов


Схожі реферати:

Навігація