Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая САПЕР.docx
Скачиваний:
53
Добавлен:
27.10.2018
Размер:
560.83 Кб
Скачать

2. Метод розв’язку

Для обробки ігрового процесу використовуються три двовимірних масиви цілочисельного типу. Перший з них зберігае стан клітин поточного покоління, другий служить буфером при обрахунку наступного покоління, третій зберігае тип клітин(для ігрового світу з обмеженими межами). Значення змінної з певним індексом в кожному масиві відповідає стану відповідної клітини на ігровому полі з тим самим індексом: 1 – клітина жива, 0 – клітина мертва. Головний алгоритм обробляє кожну клітину, обраховуючи кількість її сусідів, з чого визначає її стан на наступному кроці, але тільки у разі якщо ця клітина звичайного типу, а не вічно жива, або вічно мертва.

Гра може відбуватись в трьох режимах:на торі, на площині з мертвими чи живими межами. В деяких ситуаціях обмеженість ігрового поля дуже негативно впливає на ігровий процес. Тому було реалізовано альтернативний варіант ігрового поля – поверхню тора. В такому режимі еволюція не може вийти за межі ігрового світу.

При розробці даного проекту було також реалізовано алгоритм розфарбування клітин. Цей алгоритм створювався таким чином, щоб візуалізувати динаміку гри «Життя».

Кожна клітина на ігровому полі має значення “віку”. Кожен крок вік живої клітини збільшується на 1, вік “новорожденої” клітини становить 1. При цьому вік не може перевищувати 20. Алгоритм розфарбування використовує функцію перетворення кольору з кольорової моделі HSB в RGB. Найстарішій клітині відповідає синьо-фіолетовий колір, новородженій – зелений. Еволюцію кольору клітини наведено на рисунку 2.1

Рисунок 2.1 Еволюція кольору

Для візуалізації головного елементу програмного продукту – ігрового поля – було обрано стандартний компонент середовища Delphi 7 – TImage. Кожна клітина відмальовується, як прямокутник, що має певний колір.

В розробці реалізована можливість збереження та завантаження ігрового світу у власний формат GLF. Цей формат є текстовим і просто зберігае основні смінні програми у вигляді чисел, у такому порядку: xmax, ymax, FieldIsTorus, BordersAreDead, borderstype, cellstate, celltype, cellage.

3. Алгоритм розв’язку

Структурну блок-схему розв’язку задачі наведено на рисунку 3.1.

Рисунок 3.1 Структурна блок-схема програми

4. Опис програмного продукту

Всі створені структури даних, змінні, процедури та функції знаходяться в модулях Unit1.pas та Unit2.pas.

4.1. Опис головних структур і змінних програми

Інформацію про головні змінні та типи програми наведено в таблиці 4.1.

Змінна

Тип

Опис

Призначення

field

CellState

MatrixType

Кожен элемент масиву набуває значення 0..1

Головний массив, що зберігає стан кожної клітини

Temp

MatrixType

Кожен элемент масиву набуває значення 0..1

Додаковий масив, станів клітин. Використовується в якості буфера при обчисленні наступного покоління

CellType

MatrixType

Кожен элемент масиву набуває значення 0..2

Массив, що зберігає тип кожної клітини

CellAge

MatrixType

Кожен элемент масиву набуває значень 0..20

Массив, що зберігає вік кожної клітини

CellChangedOnMouseDown

Array of array of Boolean

Кожен элемент масиву набуває значення true/false

Массив, що зберігає множину клітин, що були змінені при поточному натисканні миші

CellSize

double

Набуває значень ~7..~150

Визначає колір кожної клітини

BordersType

integer

Набуває значень 0..2

Константний масив, що визначає карту кольорів при розфарбуванні (Рис. 1)

CurrMaxCellAge

integer

Набуває значень 1..20

Вмикає та вимикає алгоритм фарбування клітин

FieldIsTorus

boolean

Набуває значеннь true/false

Зберігає інформацію про поточне правило смерті клітини.

xmax

Integer

Набуває значеннь 2..98

Визначає ширину ігрового поля

ymax

Integer

Набуває значень 2..98

Визначає висоту ігрового поля

FieldIsTorus

Boolean

Набуває значень true/false

Вмикає та вимикає торообразну форму світу

BordersAreDead

Boolean

Набуває значень true/false

Таблиця 2.1