- •Курсова робота з курсу: “ Програмування та алгоритмічні мови” на тему: Гра “Сапер”
- •1. Постановка задачі
- •2. Метод розв’язку
- •3. Алгоритм розв’язку
- •4. Опис програмного продукту
- •4.1. Опис головних структур і змінних програми
- •4.2. Опис головних процедур та функцій програми
- •5. Опис інтерфейсу
- •6. Результати роботи програмного продукту
- •Додаток а. Лістинг програми
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
