Реферат: Моделирование игры "Жизнь" - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Моделирование игры "Жизнь"

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Архив Zip, 30 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

Моделирование игры “Жизнь” 1. Введение В наш век , когда космическ ие к орабли бороздят просторы Большого Театра , при менение компьютеров в различных областях наро дного хозяйства становится необходимым и , как следствие , неизбежным . Компьютерные технологии и методы обработки данных становятся приме нимыми в любых сферах чело в еческо й деятельности от расчетов графиков железнодо рожных перевозок до составления гороскопов . К онечно , не во всех вопросах компьютеры мог ут выдать решение конкретной проблемы , но они могут , как минимум , существенно облегчить накопление , систематизацию и р утинн ую обработку данных. Методы решения задач с помощью компью теров можно разделить на две основные гру ппы. Во-первых , это аналитический метод , при котором все поведение исследуемой системы описывается как ряд четких зависимостей , из которых с учетом исхо дных данных в ычисляется оптимальное соотношение условий для данной задачи. Во-вторых , это метод моделирования , при котором задается начальное состояние и осн овные законы взаимодействий в исследуемой сис теме ; после этого система запускается “в ж изнь” и набл юдатель отслеживает ее по ведение в динамике , визуально извлекая из этого процесса интересующие его аспекты. В данной работе сделана попытка на простейшем примере , который (с известными до пущениями ) применим в биологии , продемонстрировать применение этого м етода для исследов ания поведения колоний микроорганизмов. Модель поведения системы предельно упроще на . Жизненное пространство представлено как п оле , состоящее из квадратных ячеек размером 50 30 ячеек ; у каждой ячейки , очевидно , есть 8 сос едних . Каждая ячейка может быть пустой или содержать клетку . Существование клетки опред еляется количеством соседей . Если в соседних ячейках 2 или 3 клетки , то клетка живет , а если соседей больше трех или меньше двух то клетка погибает (от “пер е населенности” или то “одиночества” ). Если же вокруг пустой ячейки находятся ровно 3 клетки , то в ней появляется новая кл етка. Таким образом , заданы условия трех осн овных процессов у живых существ : рождения , существования и отмирания. Представленная програм ма обеспечивает проверку этих условий и выполнение соответ ствующих действий . Программа , также , выполняет схематический вывод поля и некоторой сопутств ующей информации на экран. 2. Описание программы 2.1. Программа реализована на Borland Pascal 7.0. 2.2. Данные в программе хранятся в следующих глобальных переменных стандартных типов : 2.2.1 A и B – основной и вспомогательный массивы элементов типа Boolean размером [0..51,0..31]. В основном массиве A хранится информация о содержании клеток в ячейках поля . Вспомогательный массив B введен для занесения текущих изменений содержимого ячеек без изменения основного массива . По сле заполнения массива B его содержимое копируется в массив A . 2.2.2. i и j – переменные типа integer . В первоначальном варианте программы использовались как счетчики в циклах типа for . Впоследствии все эти циклы были перемещены из тела программы в процедуры , и эти переменные были использованы как параметры процедуры InitGraph для установки графического режима. 2.2.3. VP – переменная типа int eger . Содержит номер а ктивной видеостраницы . Используется процедурой FlipVP ( см . далее ). 2.2.4. step, live, dead и born – переменн ые типа integer. Содержат , соответственно , номер шага работы программы , текущее количество живых клеток на поле и количество п огибш их и появившихся за последний шаг клеток. 2.2.5. s и stri – переменные типа string . Переменная s примен яется как промежуточная при переводе чисел в строковое представление ; с ее помощью формируется переменная stri , которая и выводится на экран процеду рой OutTextXY . 2.3. Программа использует стандартные модули crt . tpu и graph . tpu а так же модуль mono 3 d . tpu , написанный для других целей , из которого используется только пр оцедура FlipVP . 2.4. Основные блоки программы реализованы в двух функциях и пяти пр оцедурах , выполняющих следующие действия : 2.4.1. Функция Nears . Возвращает значение типа integer . Применяется для подсчета клеток в соседних ячейках . Аргументами функции x и y являются номер стол бца и строки , содержащих ячейку , для котор ой определяется ко личество соседей . При выполнении функции внутренние счетчики i и j пробегают знач ения от x -1 до x +1 и от y -1 до y +1 соответственно . При этом проверяется содержимое каждой ячейки A [ i , j ] и , если она не пустая , значение суммирующей переменной s увеличива ется на 1 (перед выполнением функции пере менная s обнуляется ). Таким образом в переменную s заносится количество клеток в квадр ате 3х 3 ячейки с исследуемой ячейкой в центре . После этого , если исследуемая ячейка не пуста , переменная s уменьшается на 1 (поскольку нас интересует только содержимое окруж ающих ячеек ). Далее функция возвращает значени е переменной s . 2.4.2. Функция Change выполняет основные действия программы и возвращает значение т ипа boolean . В о время ее выполнения внутренние счетчики i и j пробегают диапазоны значений , ох ватывающие всю обрабатываемую площадь поля . Д ля каждой ячейки A [ i , j ] выполняется проверка нали чия в ней клетки . Если в ячейке есть клетка , то с помощью функции Nears определяется количество ее соседей , если оно подходит под условия о тмирания , то ячейка вспомогательного массива B [ i , j ] опус тошается , а переменная dead увеличивается на 1. Если ячейк а пуста , а функция Nears возвращает значение , подходящее под условие возникновения , то ячейка вспомогательного массива B [ i , j ] заполняется , а п еременная born увеличивается на 1. В остальных слу чаях изменения данных не происходит . В начале выполнения переменные born и dead обнуляются , а функции Change присваи вается значение False . Если произошло хотя бы одно и зменение данных , функции присваиваетс я зн ачение True . Поскольку эта функция является условие м выполнения основного цикла программы , очеви дно , что при отсутствии изменений произойдет выход из цикла . 2 .4.3. Процедура Setup случайным обр азом заполняет поле клетками . Плотность запол нения определ яется аргументом стандартной функции Random . 2.4.4. Процедура Copy копирует содержимое вспомогательного массива B в основной массив A . 2.4.5. Процедура Count производит по дсчет клеток , находящихся в данный момент на поле . В начале ее выполнения переменная live обнуляется . После этого проверяетс я содержимое каждой обрабатываемой ячейки осн овного массива A [ i , j ] и , если она не п уста , переменная live увеличивается на 1. 2.4.6. Процедура Draw выводит содержимое основного массива A в виде графического построения. Каждая ячейка массива A представлена на экране прямоугольником 10х 8 pix . В зависимости от содержимого ячейки он может иметь ярко-зеленый цвет и сплошную заливку (клетка ) или темн о-синий цвет и штриховую заливку типа 9 (пус тая ячейка ). Поверх заполненных п рямоуголь ников (оператор Bar ) на том же самом месте рисуются контурные прямоугольники (оператор Rectangle ) ярко-синего цвета из которых получается сетка . 2.4.7. Процедура Print осуществляет вывод на экран сопут ствующей информации (переменные step , live , born и dead c комментариями ). Переме нные преобразуются в строковой вид с помо щью процедуры Val и промежуточной переменной s , после чего с помощью стандартных арифметических действий , применимых к единицам данных типа string , формирует ся перемен ная stri , которая и выводится на экра н оператором OutTextXY . 2.4.8. Описание процедуры FlipVP (модуль mono 3 d . tpu ) выглядит так : Procedure FlipVP(var P:Integer); Begin SetVisualPage(P); P:=1-P; SetActivePage(p); ClearDevice; End ; Она предназначена для того , чтобы скрыть от пользователя процесс прори совки экрана . Принцип действия ее очевиден : активная видеостраница всегда остается невидим ой. 2.5. Работа программы. 2.5.1. Начало программы. 2.5.1.1. Процедура Setup заполняет осн овной массив A (п . 2.4.3.) Переменным i и j присваиваются значения 9 и 1, что соотв етствует видеорежиму EGA 640х 350 pix , 16 цветов. Оператор InitGraph устанавливает этот видеорежим. 2 .5.2. Основной цикл программы. 2.5.2.1. Оператор While открывает цикл. 2 .5.2.2. Функция Change используется как условие выполнения цикла , при этом вып олняемые ею действия обрабатывают основной и вспомогательный массивы (п . 2.4.2.) 2.5.2.3. Счетчик шагов step увеличивается на 1. 2.5.2.4. Процедура FlipVP переключает активную и видимую виде остраницы (п . 2.4.8.). 2.5.2.5. Процедура Draw выводит на активную видеостраницу отображ ение поля (массива A п .2.4.6.). 2.5.2.6. Процедура Count подсчитывает текущее количество клеток на поле (п . 2.4.5.). 2.5.2.7. Процедура Print выводит на а ктивную видеостраницу текущую информацию о состоянии системы (п.п . 2.4.7. и 2.2.4.). 2.5.2.8. Оператор Delay обеспечивает задержку выполнения цикла для удобства визуал ьного наблюдения. 2.5.2.9. С помощью стандартных функций KeyPressed и ReadKey каскад ус ло вных переходов обеспечивает выход из цикла по нажатию клавиши (для этого в программе объявлена метка l ) . 2.5.3. Окончание программы. 2.5.3.1. После выхода из цикла по нажатию клавиши (п . 2.5.2.9) или по условию выхода (п . 2.5.2.2.) функция ReadKey приоста навливает программу до нажатия клавиши без изменения содержимого экрана. 2.5.3.2. Оператор CloseGraph отключает графиче ский режим. 2.5.3.3. Оператор ClrScr очищает экран , приводя его в исходное состояние. Основные недостатки программы. Для нормальной раб оты функции Change (а точне е Nears ) в поле имеются крайние ячейки A [0,0..31], A [51,0..31], A [0..51,0] и A [0..51,31], кото рые несмотря ни на какие условия всегда остаются пустыми , что снижает чистоту модел ирования. Некоторые параметры , такие как частота обн овления , начальная плотность заполнения поля и др . изменяются только вмешательств ом непосредственно в текст программы. Не предусмотрен выход из цикла при возникновении стабильных циклических процессов , которые воспринимаются функцией Change как изменения , хотя практически перестают являться та ковыми. Заключение. 3.1. В данной работе приведен простейший пример применения метода моделирования системы . Усложнение и модернизация алгоритма позволи т с большей точностью отображать реальные процессы в модели. В н ынешней форме программа позвол ила выявить следующие нюансы : 3.2.1. Конечная картина представляется почти одинаковой при плотности заполнения поля о т 1 /2 до 1/6. При плотности ниже 1/6 система обычно довольно быстро приходит к полному “вымиранию”. 3.2.2. Об наружено несколько видов стабил ьных фигур . Например : 3.3. В ходе выполнения работы были зак реплены навыки программирования на языке Pascal : использов ание стандартных функций моду ля crt . tpu , применение элементов г рафики из модуля graph . tpu , написание и подключение собс твенных модулей ( mono 3 d . tpu ), работа с компилятором и пр . Приложение Текст программы “Жизнь” (файл life . pas ) uses crt,graph,mono3d; var A,B:array[0..51,0..31]of boolean; i,j,VP,step,live,dead,born:integer; s,stri:string; label l ; Function Nears(x,y:integer):integer; var i,j,s:integer; Begin s:=0; for i:=x-1 to x+1 do for j:=y-1 to y+1 do if a[i,j] then s:=s+1; if a[x,y] then s:=s-1; Nears:=s; End; Function Change:Boolean; Begin born:=0; dead:=0; Change:=False; for i:=1 to 50 do for j:=1 to 30 do begin if A[i,j] then begin if ((Nears(i,j)<2) or (Nears(i,j)>3)) then begin B[i,j]:=False; dead:=dead+1; Change:=True; end; end else begin if Nears(i,j)=3 then begin B[ i,j]:=True; born:=born+1; Change:=True; end; end; end; End; Procedure Setup; var i,j:integer; Begin Randomize; for i:=1 to 50 do for j:=1 to 30 do if Random(2)=0 then A[i,j]:=True; End; Procedure Draw; var i,j:integer; Begin Rectangle(0,0,639,349); for i:=0 to 51 do for j:=0 to 31 do begin if A[i,j] then SetFillStyle(1,10) else SetFillStyle(9,1); Bar(55+10*i,10+8*j,65+10*i,18+8*j); Rectangle(55+10*i,10+8*j,65+10*i,18+8*j); end; End; Procedure Copy; var i,j:integer; Begin for i:=1 to 50 do for j:=1 to 30 do A[i,j]:=B[i ,j]; End; Procedure Print; Begin Str(step:3,s); stri:=' Шаг # '+s; Str(live:3,s); stri:=stri+' Клеток '+s; outtextxy(55,300,stri); Str(born:3,s); stri:=' Появилось '+s; Str(dead:3,s); stri:=stri+' Погибло '+s; outtextxy(55,315,stri); End; Procedure Count; var i,j:integer; Begin live:=0; for i:=1 to 50 do for j:=1 to 30 do if A[i,j] then live :=live+1; End; BEGIN Setup; i:=9; j:=1; InitGraph(i,j,'c:\ dos'); SetColor(9); While Change do begin step:=step+1; FlipVP(VP); Draw; Count; Print; Copy; Delay(22); if KeyPressed then if ReadKey<>''then goto l; end; l: ReadKey; CloseGraph; ClrScr; END.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Сначала ты хочешь власти, денег, самореализации, социальных изменений — потом ты хочешь поспать. Просто поспать, серьезно.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по программированию "Моделирование игры "Жизнь"", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru