Ієрархія наслідування

Анотація

 

Гра «Змійка» - це гра, в якій уявна змійка рухається по ігровому полю оминаючи перепони і їй потрібно влучити в ціль. Програма є нескладною і доступна для виконання на багатьох ЕОМ в різних операційних системах з встановленою Virtual Java Machine. Вона розрахована на широке коло користувачів завдяки своїй простоті.


 

Завдання:

 

Провести аналіз, розробити проект, скласти опис і специфікацію, провести кодування програми-гри «Змійка» використовуючи методи об’єктно-орієнтованого програмування.

 




Аналіз предметної області, постановка задачі

Формулювання проблеми

Комп’ютерні ігри для людини – це не лише засіб розважитись. Вони допомагають розвинути людську реакцію, інтелект, знання в певних галузях і областях. Гра змійка – одна з таких ігор. Рівень, до якого дійде гравець, залежить лише від швидкості його реакції на поточні обставини гри, які динамічно змінюватимуться в сторону збільшення з кожним новим раундом, що також сприятиме збільшенню реакції. Провівши частину вільного часу за грою, можна отримати задоволення від набраних очок і пройдених рівнів. Якщо людина ніколи не працювала з комп’ютером, то гра допоможе набути мінімальних навиків з клавіатурою без необхідності розбиратись з складними правилами великих ігор та програм.

Правила гри такі: на прямокутному ігровому полі створюється змійка, яка має декілька життів і складається з кількох частин. На полі також знаходяться клітки-перепони та ціль, в яку змійка має влучити. Змійка починає рухатися в довільному напрямку на найнижчій швидкості, яка відповідає першому рівню гри. Коли гравець натискатиме клавіші курсору, то напрям руху першої частини змійки – «голови» змінюватиметься відповідно до натиснутої клавіші. Коли голова змійки вийде за межі ігрового поля чи влучить в одну з перепон, то в залежності від того, залишились чи ні життя, в змійки або ж буде відняте одне життя, або ж гру буде припинено. Коли голова змійки «врізається» в ціль, то вона стане новою головою і рух змійки продовжиться. Коли довжина змійки перевищує максимально можливу, то даний рівень буде пройдено і гра перейде на наступний. В наступному рівні швидкість руху збільшується.



Аналіз предметної області

Гру «змійка» можна було б реалізувати в текстовому режимі, зображуючи всі об’єкти різними текстовими символами, наприклад, границі – підкреслюванням «_ і |», перепони хрестиками «Х», змійку прямокутниками.

Але в іграх, що вже існують і подібні до даної, використовуються побудови в графічному режимі, хоч і максимально прості. Проте поряд з простотою в них застосовуються анімації для зображення руху, наприклад у грі в танки, ці танки рухаються по екрану, імітуючи рух справжнього танку.

У грі для створення інтерфейсу користувача - виводу вікна гри, ігрових меню та кнопок, можна використати стандартні засоби мови JAVA - компоненти бібліотек AWT (застаріла) чи Swing (більш нова, що є частиною API – Java Foundation Classes), і тому її використання цієї бібліотеки дає більше можливостей для графічного оформлення гри – побудова найпростіших геометричних фігур, розфарбовування областей екрану та інше.

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

Розробити проект гри, з допомогою який можна програмно реалізувати, провівши кодування на об’єктно-орієнтованій мові програмування, скласти специфікацію.



Проект програми

Ієрархія об’єктів

На основі того, що необхідно розробити гру змійка, можна виділити головний об’єкт ієрархії – «Гра Змійка». Вона складається з «ігрового поля» та «меню».

Об’єкти-пункти меню: «Гра» з вкладеними підпунктами «нова гра» - розпочинає нову гру, «пауза» - тимчасово припиняє гру, «зупинити гру» - зупиняє поточну гру, «вихід» - дозволяє вийти з програми. Підменю «швидкість гри» з меню «Настроювання» дозволяє змінити швидкість руху змійки.

Об’єкт «ігрове поле» складається з об’єктів «ціль», «змійка», «перепона», «межі», «поле інформації» та «повідомлення». «Ціль» це клітка на ігровому полі, у яку має влучити змійка. «Змійка» складається з «частин» і згідно описаних вище правил рухається по ігровому полі. «Перепони» - це клітки на ігровому полі, які змійка має оминати. «Межі» ігрового поля встановлюють границі, за які змійка не може вийти. Влучання змійки в перепони чи вихід за ігрове поле зменшують її кількість гравців.

«Поле інформації» інформуватиме гравця про стан гри: «Повідомлення» - якій будуть видаватися різноманітні текстові повідомлення про події в грі та вказівки гравцю (наприклад, повідомлення про те, що гру закінчено, про перехід в наступний тур або виграш у грі). «Індикатор життів» - об’єкт, який показуватиме про кількість життів змійки. «Індикатор рівня» буде показувати номер рівня, на якому знаходиться гра. «Індикатор довжини» відображатиме довжину змійки, щоб гравець орієнтувався, скільки цілей поцілено – згідно вказаних правил для переходу на наступний рівень, потрібно поцілити в певну кількість цілей.

 

Рисунок 1 – ієрархія об’єктів гри Змійка



Ієрархія наслідування

Рисунок 2 – Ієрархія класів



Діаграма станів гри

Рисунок 3 - Діаграма станів гри



Специфікація

Клас public class Game – головний клас проекту необхідний для запуску гри

Метод public static void main(String[] args) – з нього починається виконання програми

 

Клас public class GameFrame реалізує вікно для відображення ігрового поля та даних гри

Метод public GameFrame() – конструктор вікна гри в якому встановлюються його параметри.

Метод public void newGame() - метод запускає новий сеанс гри

Метод public void pauseGame() - метод створює паузу

Метод public void stopGame() - метод зупиняє гру

 

Клас p ublic class GameField – ігрове поле

Змінні:

Snake snake - змійк

GameFrame frame – змінна для доступу до вікна гри

InformPanel informPanel – інформаційна панель

protected boolean isGameRun = істина, якщо йде гра

protected boolean isGamePause – істина під час паузи

int gameSpeed – швидкість гри

protected int colObstacles - Кількість перепон

protected int delay - Затримка при русі змійки

final int w = 35, h = 25 – розміри ігрового поля

protected GameSquare square[][] – ігрові клітки

boolean keyBlocked – істина, коли заблокована клавіатура

Методи

public GameField(GameFrame owner) - конструктор

public void setDefault() – встановлення в початковий стан

public void clearSquares()- відмічення всіх кліток вільними

protected void createSnake() – створення змійки

protected void createBorders() – Створює межі поля

protected void createObstacles(int col) – створює col перепон на ігровому полі

protected void createTarget() - створення мішені для змійки

public void paintComponent(Graphics g) – малювання компонентів поля

public void run () – обробка подій гри

public void cheeckWin() – перевірка перемоги в грі

public void processCrash() – перевірка влучання в перепону

public void newGame() – Запуск нової гри

public void pauseGame() – пауза в грі

public void stopGame() – зупинка гри

public void setGameSpeed(int s) – задання швидкості гри

Клас public class InformPanel

Змінні:    

protected int lives, len, speed, obstacles – кількість життів, довжина змійки, швидкість змійки, кількість перепон;

Методи

public InformPanel(final GameField field) - Конструктор

public void updateInfo(int lives, int len, int speed, int obstacles) Зміна поточних даних новими

public void paintComponent(Graphics g) – малювання панелі

 

Клас class Snake - змійка

Змінні:    

int colElements – кількість елементів

final int maxLen – максимально можлива довжина

SnakeElement elem[] – масив частин змійки

   

int xNextSpeed, yNextSpeed – напрям руху на наступному кроці

final int startLives – початкова кількість життів

private static int lives – зберігає кількість життів змійки

Методи

public Snake(int c, int xPos, int yPos) – створення змійки довжини с з заданими координатами

public void increment(SnakeElement lastElem) додавання до змійки нового елемента

public boolean isMaxLong() - перевірка досягнення змійкою максимальної довжини

public boolean isKilled() – перевірка, чи «жива» змійка

public void decrementLive() – забирає життя в змійки

 

Клас class SnakeElement – елемент змійки

Змінні:    

int xSpeed – швидкість елемента змійки по горизонталі

int ySpeed - швидкість елемента змійки по вертикалі

int xPos - позиція елемента змійки по горизонталі

int yPos - позиція елемента змійки по вертикалі

public SnakeElement(int xPos, int yPos) - конструктор задає координати елемента

public void move() – рухає елемент

 public void setSpeed(int x, int y) – встановлення швидкості елемента

 

Клас class GameSquare – клітка ігрового поля

Змінні:    

int w, h - розміри

boolean used - використання

boolean isBorder - перепона

Методи

public void setSize(int w, int h) - встановлює розміри

public void setBorder(boolean b) – робить клітинку перепоною

public void setUsed(boolean b) – робить клітинкою зайнятою/незайнятою

public void paintComponent(Graphics g) - малювання клітинки

Клас public class MenuString – строка меню

Змінні: - пункти меню і підменю

JMenu Game; JMenuItem mi_NewGame, mi_PauseGame,

                           mi_StopGame, mi_ExitGame;

JMenu Options, Speed; JMenuItem mi_S1, mi_S2, mi_S3;

JMenu Help; JMenuItem mi_About;



Кодування

Кодування проведено згідно викладеного проекту на об’єктно орієнтованій мові Java.

Мова Java є об’єктно-орієнтовнованою дозволяє реалізувати запроектовані класи, їх взаємодію та сприяє написанню надійних програм і спрощує їх реалізацію. Існує багато інших мов підтримуючих ООП технологію програмування. Це такі мови програмування, як С++, Object Pascal, Python та ін. Мова Java завдяки широким можливостям та бібліотекам класів має велику гнучкість і забезпечує можливість реалізації дуже великих проектів за мінімальний час,

Тому для даної роботи було обрано мову Java, як найбільш ефективну та багато платформну.

 

Висновок

Враховуючи аналіз предметної області і проект програми, можливо зробити висновок, що розроблена гра „Змійка” розрахована на широке коло користувачів завдяки своїй простоті. Модель програми дозволяє легко та зручно її модернізувати: додати нові команди; зробити сприйнятливий для користувача інтерфейс.

 



Додаток


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: