Ігрова програма "Змійка"
Призначення ігрової програми "Змійка" для розвитку уваги та логічного мислення гравців. Розробка програми в середовищі C++ Builder 6, її функціонування в ОС Windows. Опис алгоритму та основних функцій програми. Основні переваги та недоліки мови С++.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | украинский |
Дата добавления | 17.12.2014 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Зміст
- 1. Вступ
- 2. Призначення і область застосування
- 3. Технічні характеристики
- 3.1 Постановка задачі
- 3.2 Опис алгоритму
- 3.3 Опис мови програмування
- 3.4 Опис основних функцій
- 4. Реалізація курсової роботи
- 5. Висновок
- 6. Література
- Додаток
1. Вступ
Виконання даного проекту є завершальним етапом при вивченні дисципліни "Програмування (мова С++)".
У роботі наведено рішення завдання з дисципліни "Програмування (мова С++)" по розробці ігрової програми "Змійка".
Розвиток обчислювальної техніки в останні роки, дозволяє автоматизувати більшу частину галузей людської діяльності. Слід також зазначити, що протягом останніх 10-15 років у навчальний процес, як активний інструмент навчання й пізнання, стрімко включається не тільки сам комп'ютер, але й мови програмування.
Виконання проекту є завершальним етапом при вивченні дисципліни "Об'єктно-орієнтоване програмування". Тому розробка гри є найбільш прийнятною темою для застосування об'єктно-орієнтованого підходу при розробці програми.
При розробці комп'ютерних ігор варто виділити наступні етапи, наприклад:
- вивчення теоретичного матеріалу;
- визначенні правил гри;
- складання діаграми об'єктів та наслідування;
- проектування інтерфейсу.
Гра "Змійка" - це гра, в якій уявна змійка рухається по ігровому полю оминаючи перепони і їй потрібно влучити в ціль. Програма є нескладною і доступна для виконання на багатьох ЕОМ в різних операційних.
Вона розрахована на широке коло користувачів завдяки своїй простоті.
2. Призначення і область застосування
Провести аналіз, розробити проект, скласти опис і специфікацію, провести кодування ігрової програми "Змійка" використовуючи знання здобуті під час курсу об'єктно-орієнтованого програмування.
У курсовій роботі наведено рішення завдання з дисципліни "Програмування (мова С++)" по розробці ігрової програми "Змійка".
Щоб виконати завдання, потрібно використати програмне середовище, що дозволяє здійснювати отримання та обробку значень поточного часу і відтворення звукового файлу. Для вирішення даного завдання підходить середовище розробки додатків Borland C++ Builder 6.
Середовище розробки програм Borland C ++ Builder 6 завоювало досить міцні позиції серед професійних програмістів та тих, хто тільки починає програмувати. Тут можна відзначити ряд причин: більшу популярність мови програмування C ++, зручність візуального конструювання додатків, розвинені можливості доступних засобів системи, ефективність генерованого коду та ін.
Ігрова програма "Змійка" призначена для того щоб розвивати увагу та логічне мислення. Гравець повинен продумувати кожен крок змійки, щоб зібрати якнайбільше яблук, і мати високу увагу, щоб уникнути зіткнення зі стіною.
Програма може використовуватися користувачами на персональних комп'ютерах та ноутбуках під управлінням ОС Windows.
3. Технічні характеристики
3.1 Постановка задачі
Розробити ігрову програму, що представляє собою гральне поле, де гравець, контролюючи рухи змії, повинен зібрати якнайбільше яблук та уникнути перешкод у вигляді стін.
Вікно програми має містити в собі ігрове поле і кнопки управління. Необхідно організувати перевірку натиснутої користувачем клавіші та кількість з'їдених яблук. Також необхідно зробити випадкове розміщення змійки, стін та яблук на ігровому полі. Після закінчення ігрового рівня повинно виводитися повідомлення про виграш або програш.
В результаті розробки має бути повністю функціонуюча гра змійка, в якій уявна змійка рухається по ігровому полю і їй потрібно влучити в ціль.
3.2 Опис алгоритму
Програма розроблена в середовищі C++ Builder 6 і функціонує в ОС Windows. Функціональне призначення ігрової програми полягає в проходженні гри "Змійка".
При роботі програми використовується персональний комп'ютер з встановленою на ньому ОС Windows.
Алгоритм розв'язання даної задачі полягає в послідовності виконання наступних кроків:
1) Гра починається при запуску головного exe файла
2) Генеруються об'єкти "змійка", " їжа", "стіна" у випадковому місці
3) Якщо координати "змійки" збігаються з координатами "їжі", "змійка" збільшується на 1 клітинку.
4) Якщо ні, то прослуховується клавіатура (стрілки курсору) і "змійка" переміщається направо, наліво, вгору, вниз (розміри поля 25х25)
5) Якщо координати "змійки" збігаються з координатами "стіни" або координатами "хвоста", гра завершується
6) Якщо набирається максимальна кількість з'їденої "їжі" (своя для кожного рівня), гравець може перейти у наступний рівень гри, натиснувши клавішу "Новый уровень".
7) Якщо потрібно вийти набираємо Ctrl+F4, натискаємо клавішу "Выход" або закриваємо вікно в правому верхньому куті.
3.3 Опис мови програмування
С++ - мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом в AT&TBellLaboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році та спочатку отримала назву "Сі з класами". Згодом Страупструп перейменував мову на С++ у 1983р. Ця мова базується на мові С (Сі).
Переваги мови С++:
· Можливість роботи на низькому рівні з пам'яттю, адресами та портами. (Що при необмеженому використанні, може легко перетворитися на недолік).
· Можливість створення узагальнених алгоритмів для різних типів даних, їхня спеціалізація, і обчислення на етапі компіляції, з використанням шаблонів.
· Підтримуються різні стилі та технології програмування включаючи традиційне директивне програмування, ООП, узагальнене програмування, мета програмування (шаблони, макроси).
· Масштабованість. На мові С++ розробляють програми для найрізноманітніших платформ і систем.
ігрова програма алгоритм мова
· Швидкодія. Швидкість роботи на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби.
Недоліки мови С++:
· Погана підтримка модульності. Підключення інтерфейсу зовнішнього модуля через препроцесорну вставку заголовного файлу (#include) серйозно уповільнює компіляцію, при підключенні великої кількості модулів. Для усунення цього недоліку, багато компіляторів реалізують механізм прекомпіляції заголовних файлів.
· Недостача інформації про типи даних під час компіляції.
· Мова C++ є складною для вивчення і для компіляції.
· Деякі перетворення типів неінтуїтивні. Зокрема, операція над без знаковим і знаковим числами видає без знаковий результат.
· Препроцесор С++ (успадкований від С) дуже примітивний. Це приводить з одного боку до того, що з його допомогою не можна (або важко) здійснювати деякі завдання метапрограмування, а з іншого, в наслідок своєї примітивності він часто приводить до помилок і вимагає багато дій з обходу потенційних проблем.
· Хоча декларується, що С++ мультипарадигмена мова, реально в мові відсутня підтримка функціонального програмування. Частково, даний пропуск усувається різними бібліотеками (Loki, Boost) що використовують засоби метапрограмування для розширення мови функціональними конструкціями (наприклад, підтримкою лямбд/анонімних методів), але якість подібних рішень значно поступається якості вбудованих у функціональні мови рішень. Такі можливості функціональних мов, як зіставлення зі зразком взагалі украй складно емулювати засобами метапрограмування.
Програма на C ++ складається з оголошень (змінних, констант, типів, класів, функцій) і описів функцій. Серед функцій завжди є головна - main для консольних додатків (працюють з WIN32) або WinMain для додатків Windows. Саме ця головна функція виконується після початку роботи програми. Зазвичай в C ++ Builder ця функція дуже коротка і виконує тільки деякі підготовчі операції, необхідні для початку роботи. А далі при об'єктно-орієнтованому підході робота програми визначається подіями, що відбуваються і реакцією на них об'єктів.
Як правило, програми будуються за модульним принципом і складаються з безлічі модулів. Принцип модульності дуже важливий для створення надійних і відносно легко модифікованих додатків. Чітке дотримання принципів модульності в поєднанні з принципом приховування інформації дозволяє всередині будь-якого модуля проводити якісь модифікації, не зачіпаючи при цьому інших модулів і головну програму.
У C ++ Builder всі об'єкти компонентів розміщуються в об'єктах - формах. Для кожної форми, яку ви проектуєте в своєму додатку, C ++ Builder створює окремий модуль. Саме в модулях і здійснюється програмування завдання. У обробниках подій об'єктів - форм і компонентів, ви ставите всі свої алгоритми. В основному вони зводяться до обробки інформації, що міститься у властивостях одних об'єктів, і завданні за результатами обробки властивостей інших об'єктів. При цьому ви постійно звертаєтеся до методів різних об'єктів.
Згідно з принципами приховування інформації зазвичай текст модуля поділяють на заголовний файл інтерфейсу, який містить оголошення класів, функцій, змінних і т.д., і файл реалізації, в якому міститься опис функцій.
Стандартне розширення файлів реалізації - срр. Стандартне розширення заголовних файлів - h.
Після того як програма написана, на її основі повинен бути створений виконуваний файл (модуль). Цей процес здійснюється в кілька етапів.
Спочатку працює препроцесор, який перетворює вихідний текст. Препроцесор здійснює перетворення у відповідності зі спеціальними директивами препроцесора, які розміщуються в початковому тексті. Препроцесор може у відповідності з цими директивами включати тексти одних файлів в тексти інших, розгортати макроси - скорочені позначення різних виразів і виконувати безліч інших перетворень.
Після закінчення роботи препроцесора починає працювати компілятор. Його завдання - перевести тексти модулів в машинний (об'єктний) код. В результаті для кожного вихідного файлу. срр створюється об'єктний файл, що має розширення. obj.
Після закінчення роботи компілятора працює компоновщик, який об'єднує об'єктні файли в єдиний завантажувальний виконуваний модуль, що має розширення. ехе. Цей модуль можна запускати на виконання.
3.4 Опис основних функцій
Програма складається з функцій, опис яких наведений в таблиці 3.4.1.
Таблиця 3.4.1 - Функції програми
Ім'я |
Характеристика |
Призначення |
|
__fastcall TForm1:: TForm1 (TComponent* Owner): TForm (Owner) {} |
Головна |
Забезпечує інтерфейс користувача |
|
void __fastcall TForm1:: Timer1Timer (TObject *Sender) {} |
Спрацьовує при натисканні кнопки "Новая игра" |
Прослуховує клавіатуру та координує змійку в потрібному напрямку |
|
void makeRandomSnake (void) {} |
Спрацьовує при натисканні кнопки "Новая игра" |
Виставляє змійку в випадковому місці на ігровому полі |
|
void render (void) {} |
Спрацьовує при натисканні кнопки "Новая игра" |
Займається побудовою ігрового світу |
|
void music (void) {} |
Спрацьовує при натисканні кнопки "Новая игра" |
Забезпечує фонову музику |
|
void clearAll (void) {} |
Спрацьовує при натисканні кнопки "Новая игра" |
Забезпечує очистку поля |
|
void gameOver (void) {} |
Спрацьовує при програшу |
Виводить повідомлення про програш |
|
void makeRandomFood (void) {} |
Спрацьовує при натисканні кнопки "Новая игра" |
Відповідає за розстановку їжі на полі |
|
void makeRandomPoison (void) {} |
Спрацьовує при натисканні кнопки "Новая игра" |
Відповідає за розстановку стін на полі |
|
void Exit (void) {} |
Спрацьовує при натисканні кнопки "Выход" |
Забезпечує вихід із програми |
|
void Win (void) {} |
Спрацьовує при виграшу |
Відповідає за виграш |
|
void step (void) {} |
Викликається автоматично таймером |
Відповідає за кожен крок змії |
|
void __fastcall TForm1:: FormKeyDown (TObject *Sender, WORD &Key, TShiftState Shift) |
Спрацьовує при натисненні певних клавіш |
Відповідає за направлення змії по ігровому полю |
|
void __fastcall TForm1:: Button1Click (TObject *Sender) |
Спрацьовує при натисканні кнопки "Новая игра" |
Відповідає за початок нової гри |
4. Реалізація курсової роботи
Програма реалізує об'єктно-орієнтований варіант інтерфейсу, в середовищі C++ Builder. Інтерфейс забезпечується повідомленнями користувачеві, зразки яких, джерело виникнення та опис ситуації наведені у таблиці 4.1.
Таблиця 4.1 - Повідомлення користувачеві
Повідомлення |
Джерело |
Опис ситуації |
|
Игра окончена |
void gameOver (void) {} |
Координати змійки збіглися з границею поля |
|
Поздравляем, вы прошли уровень!!! |
void Win (void) {} |
Ви пройшли рівень гри |
Інтерфейс гри "Сапер"
Програма має такий вигляд (Рисунок 4.1)
Рисунок 4.1 - Інтерфейс програми
При натисканні клавіш-стрілок, змія повертається у відповідний напрямок. Коли координати змії співпадають з координатами яблука, змія росте.
Рисунок 4.2 - Ігровий процес
Коли гравець програє, то виведеться таке повідомлення:
Рисунок 4.3 - Виведення повідомлення про програш
Коли гравець виграє, то виведеться таке повідомлення:
Рисунок 4.4 - Виведення повідомлення про виграш
У цьому проекті не використовуються вхідні дані тобто користувач нічого не вводить з клавіатури.
Використовуються допоміжні змінні:
int world [25] [25] |
Ігрове поле |
|
int east, south, relativeE, relativeS, wrappedE, wrappedS; |
Змінні, які відповідають за частини ігрового поля |
|
int snakeE [650], snakeS [650], snakeHeadE, snakeHeadS, snakeTailE, snakeTailS, segment; |
Позиції кожного сегменту змійки |
|
int snakeLength; |
Довжина змійки |
|
int direction, lastDirection, reverseDirection; |
Напрямок змійки |
|
int w=0; |
Кількість пройдених рівнів |
|
int maxSize = 25. |
Максимальний розмір поля |
Вихідні дані
Повідомлення |
Джерело |
Опис ситуації |
|
Игра окончена. Размер змеи: |
void gameOver (void) {} |
Координати змійки збіглися з границею поля |
|
Поздравляем, вы прошли уровень!!! |
void Win (void) {} |
Ви пройшли рівень гри |
Спочатку з'являється форма, яка відображає меню гри. За меню відповідає функція __fastcall TForm1:: TForm1 (TComponent* Owner): TForm (Owner).
Потім при натисканні клавіші нової гри, об'являються змінні які потім використовуватимуться для роботи програми.
bool ateFood = false; // їжа
// світ
int world [25] [25];
// змінні які відповідають за частини ігрового поля
int east, south, relativeE, relativeS, wrappedE, wrappedS;
// позиції кожного сегменту змійки
int snakeE [650], snakeS [650];
int snakeHeadE, snakeHeadS;
int snakeTailE, snakeTailS;
int snakeLength;
int segment;
int direction, lastDirection, reverseDirection; // напрямок
int w=0; // вінрейт
int maxSize = 25; // максимальний розмір поля
Наступною частиною є головна функція
void __fastcall TForm1:: Timer1Timer (TObject *Sender) {}
яка працює по запуску таймера та повністю відповідає за рух та напрямок змійки, використовуючи допоміжні функції які знаходяться в наступній частині программи:
void music (void) {}
Відповідає за музику на фоні
void render (void) {}
Формує ігрове поле рівня
void makeRandomSnake (void) {}
Генерує випадкову позицію змійки
void clearAll (void) {}
Очищає поле
void Win (void) {}
Функція, яка відповідає за виведення повідомлення про виграш
void gameOver (void) {}
Закінчує гру.
void makeRandomFood (void) {}
Виставляє на полі їжу.
void makeRandomPoison (void) {}
Виставляє стіни.
void Exit (void) {}
Вихід.
void step (void) {}
Відповідає за кожну дію змійки.
void __fastcall TForm1:: FormKeyDown (TObject *Sender, WORD &Key, TShiftState Shift)
Прослуховує натиснуті клавіші.
void __fastcall TForm1:: N5Click (TObject *Sender)
Пауза (зупинка таймера).
void __fastcall TForm1:: N6Click (TObject *Sender)
Продовження гри.
void __fastcall TForm1:: N7Click (TObject *Sender)
Виведення інформації.
void __fastcall TForm1:: Button1Click (TObject *Sender)
Клавіша, яка відповідає за початок нової гри або за перехід на новий рівень.
5. Висновок
У ході виконання курсової роботи були вивчені основи програмування мовою С + +. Написання програми сприяло закріпленню теоретичного матеріалу на практиці.
Гравець керує змією за допомогою клавіш-стрілок. При кожній взаємодії з яблуком змія поступово збільшується на одну клітинку. В кожному рівні потрібно з'їсти різну кількість яблук. Коли гравець досяг кінця рівня, програма виводить повідомлення про виграш. Кількість яблук, які потрібно з'їсти наступного рівня, підвищується на один. Коли змія взаємодіє зі стіною, гра закінчується і програма виводить повідомлення про програш. При кожній взаємодії з яблуком, на ігровому полі з'являється нове яблуко. Гра "Змійка" є логічно завершеною грою. Також можливі зміни і удосконалення деяких моментів в геймплеї, такі як мультиплеер і додавання на ігровому полі перешкод.
Програма повністю написана згідно заданому завданню, все задумане в програмі було повністю реалізоване. Проведене тестування програми підтвердило, що програма працює коректно та без помилок.
6. Література
1. Прата С. Язык программирования C++ / C. Прата. Москва: "Издательство ТРИУМФ", 2003. - 172 с.
2. Динман М.И. С++. Освой на примерах. / М.И. Динман. Петербург - БХВ, 2006. - 384 с.
3. Стефан Р. Дэвис - С++ Для чайников / С.Р. Дэвис. Вильямс, 2003. - 336 с.
4. C++ [Електронний ресурс] / Матеріал з Вікіпедії - вільної енциклопедії. - Режим доступу: \www/ URL: http://uk. wikipedia.org/wiki/C++.
5. Романов Е.Л. Си++. От дилетанта до профессионала / Е.Л. Романов. Москва: "Издательство ТРИУМФ", 2014. - 600 с.
6. А. Крупник Изучаем Си / А. Крупник. Питер, 2001. - 233 с.
7. Энтони Уильямс Параллельное программирование на С++ в действии / Э. Уильямс. Москва, 2012. - 672 с.
8. Культин Н.Б. Borland C++ Builder. Основы программирования в Borland C++ Builder. / Н.Б. Культин. - СПб.: БХВ-Петербург, 2003. - 480 с.
9. Коплиен Дж. - Мультипарадигменное проектирование для с++ / Дж. Коплиен. Питер, 2005. - 235 с.
10. Литвиненко Н.А. Технология программирования на С++ / Н.А. Литвиненко. БХВ-Петербург, 2010. - 281 с.
11. Макс Шлее Профессиональное программирование на С++ / М. Шеле. БХВ-Петербург, 2010. - 883 с.
12. . Оверленд Б. С++ Без страха. / Б. Оверленд. Москва: "Издательство ТРИУМФ", 2005. - 432 с.
13. Либерти Д. Освой самостоятельно С++ за 24 часа, 4-е издание. / Д. Либерти, Д. Хорват. Москва: Издательский дом "Вильямс", 2007. - 448 с.
14. Оверленд Б. С++ Без страха. / Б. Оверленд. Москва: "Издательство ТРИУМФ", 2005. - 432 с.
15. Подбельский В.В. Програмирование на языке Си: Учеб. пособие. - 2-е доп. изд. / В.В. Подбельский, С.С. Фомин. Москва: Финансы и статистика, 2004. - 600 с.
16. Фаронов В. Borland C++ Builder. Учебный курс / В. Фаронов. - М.: Нолидж, 2003. - 580 с.
17. Шилдт Г. С++: руководство для начинающих, 2-е издание. / Г. Шилдт. - М. Пер. с англ. - М.: Издательский дом "Вильямс", 2005. - 672 с.
18. Романов Е.Л. Си++. От дилетанта до профессионала / Е.Л. Романов. Москва: "Издательство ТРИУМФ", 2014. - 600 с.
19. Коплиен Дж. Мультипарадигменное Проектирование для С++ / Дж. Коплиен. Питер, 2005. - 237 с.
20. Шпак З.Я. Програмування мовою С: Навчальний посібник / З.Я. Шпак. Оріяна-Нова, 2006. - 432 с.
Додаток
Додаток А - Текст програми
#include <vcl. h>
#include <iostream>
#include <time. h>
#pragma hdrstop
#pragma hdrstopFlag
#include "Unit1. h"
// ---------------------------------------------------------------------------
#pragma package (smart_init)
#pragma resource "*. dfm"
bool ateFood = false; // їжа
// світ
int world [25] [25];
// змінні які відповідають за частини ігрового поля
int east, south, relativeE, relativeS, wrappedE, wrappedS;
// позиції кожного сегменту змійки
int snakeE [650], snakeS [650];
int snakeHeadE, snakeHeadS;
int snakeTailE, snakeTailS;
int snakeLength;
int segment;
int direction, lastDirection, reverseDirection; // напрямок
int w=0; // вінрейт
int maxSize = 25; // максимальний розмір поля
TForm1 *Form1;
// ---------------------------------------------------------------------------
void music (void) {
Form1->MediaPlayer1->FileName = "fon. mp3";
Form1->MediaPlayer1->Open ();
Form1->MediaPlayer1->Play ();
}
__fastcall TForm1:: TForm1 (TComponent* Owner)
: TForm (Owner)
{
PlaySound ("F: \\Labs\\My Game\\music. wav", NULL, SND_ASYNC|SND_LOOP);
Form1->Timer1->Enabled = false;
}
// ---------------------------------------------------------------------------
void render (void) { // формування поля
for (east=0; east<maxSize; east++) {
for (south=0; south<maxSize; south++) {
switch (world [east] [south]) {
case 0: // фон поля
Form1->Canvas->Pen->Color=clBlack;
Form1->Canvas->Brush->Color=clBlack;
Form1->Canvas->Rectangle
(east*20,south*20,east*20+20,south*20+20);
break;
case 1: // колір змії
Form1->Canvas->Pen->Color=clGreen;
Form1->Canvas->Brush->Color=clGreen;
Form1->Canvas->Rectangle
(east*20,south*20,east*20+20,south*20+20);
break;
case 2: // колір їжі
Form1->Canvas->Pen->Color=clRed;
Form1->Canvas->Brush->Color=clRed;
Form1->Canvas->Ellipse
(east*20,south*20,east*20+20,south*20+20);
break;
case 3: // колір отрави
Form1->Canvas->Pen->Color=clGray;
Form1->Canvas->Brush->Color=clGray;
Form1->Canvas->Rectangle
(east*20,south*20,east*20+20,south*20+20);
break;
}
}
}
}
void clearAll (void) { // очистка поля
for (east=0; east<maxSize; east++) {
for (south=0; south<maxSize; south++) {
world [east] [south] =false;
}
}
for (int i = 0; i < 650; i++) {
snakeE [i] = - 1;
snakeS [i] = - 1;
}
render ();
}
void gameOver (void) { // "Кінець гри"
Form1->Timer1->Enabled = false;
Form1->MediaPlayer1->Stop ();
Form1->Button1->Caption="Новая игра";
PlaySound ("F: \\Labs\\My Game\\go. wav", NULL, SND_ASYNC);
ShowMessage ("Игра окончена. Размер змеи: "+IntToStr (snakeLength));
w=0;
}
void makeRandomFood (void) { // розстановка їжі
for (int i = 0; i < 20+w; i++) {
world [random (25)] [random (25)] = 2;
}
}
void makeRandomPoison (void) { // розстановка стін
for (int i = 0; i < 20; i++) {
world [random (25)] [random (25)] = 3;
}
}
void Exit (void) { // Вихід із програми
Application->Terminate ();
}
void Win (void) { // Виграш
Form1->Timer1->Enabled = false;
Form1->MediaPlayer1->Stop ();
Form1->Button1->Caption="Новый уровень";
PlaySound ("F: \\Labs\\My Game\\win. wav", NULL, SND_ASYNC);
ShowMessage ("Поздравляем!!! Вы прошли " + IntToStr (w) + " уровень! Нажмите Новый уровень, чтобы перейти на новый уровень. ");
}
void makeRandomSnake (void) { // установка змійки
Randomize ();
// розпочати з направлення вверх чи вниз
lastDirection = 1;
int flip = random (2);
switch (flip) {
case 0:
direction = 0;
break;
case 1:
direction = 2;
break;
}
// розпочати з випадкової позиції голови
snakeHeadE = 1 + random (15);
snakeHeadS = 1 + random (23);
// встановлення розміру змійки
snakeLength = 3;
// розташувати змійку горизонтально
for (int span = 0; span < snakeLength; span++) {
world [snakeHeadE + span] [snakeHeadS] = true;
snakeE [span] = snakeHeadE + span;
snakeS [span] = snakeHeadS;
}
snakeTailE = snakeHeadE + snakeLength - 1;
snakeTailS = snakeHeadS;
Form1->Timer1->Enabled = true;
}
void step (void) {
// куди буде переміщатися змійка
switch (direction) {
case 0: // вверх
snakeHeadS--;
if (snakeHeadS < 0) snakeHeadS = 24;
break;
case 1: // вправо
snakeHeadE++;
if (snakeHeadE > 24) snakeHeadE = 0;
break;
case 2: // вниз
snakeHeadS++;
if (snakeHeadS > 24) snakeHeadS = 0;
break;
case 3: // вліво
snakeHeadE--;
if (snakeHeadE <0) snakeHeadE = 24;
break;
}
// якщо з'їсти яд або себе, то гра закінчується
if (world [snakeHeadE] [snakeHeadS] == 3) gameOver ();
if (world [snakeHeadE] [snakeHeadS] == 1) gameOver ();
// якщо з'їсти їжу, змійка збільшується
if (world [snakeHeadE] [snakeHeadS] == 2) ateFood = true;
world [snakeHeadE] [snakeHeadS] = true;
// розміщення кожного сегменту змійки.
for (segment = snakeLength + 1; segment > 0; segment - -) {
snakeE [segment] = snakeE [segment - 1];
snakeS [segment] = snakeS [segment - 1];
}
//. і її голови
snakeE [segment] = snakeHeadE;
snakeS [segment] = snakeHeadS;
// видалити останній сегмент змії, якщо їжа не була з'їдена
if (! ateFood) { // якщо не з'їсти їжу
snakeTailE = snakeE [snakeLength];
snakeTailS = snakeS [snakeLength];
}
if (ateFood) { // якщо з'їсти їжу
snakeLength++; // розмір збільшиться
ateFood = false; // їжа зникне з поля
PlaySound ("F: \\Labs\\My Game\\eat. wav", NULL, SND_ASYNC);
}
lastDirection = direction; // переміщення змійки
world [snakeTailE] [snakeTailS] = false;
render ();
// рахування набраних очків, очки відповідають розміру змійки, тобто початкова кількість очків - 3
Form1->EditLength->Text = snakeLength;
if (snakeLength>21+w) {w=w+1; Win (); }
}
void __fastcall TForm1:: Button1Click (TObject *Sender)
{
PlaySound ("F: \\Labs\\My Game\\start. wav", NULL, SND_ASYNC);
music ();
Form1->Timer1->Enabled = true;
clearAll ();
makeRandomFood ();
makeRandomPoison ();
makeRandomSnake ();
render ();
EditLength->SetFocus ();
}
// ---------------------------------------------------------------------------
void __fastcall TForm1:: Button2Click (TObject *Sender)
{
Exit ();
}
// ---------------------------------------------------------------------------
void __fastcall TForm1:: N3Click (TObject *Sender)
{
Exit ();
}
// ---------------------------------------------------------------------------
void __fastcall TForm1:: Timer1Timer (TObject *Sender)
{
step ();
Application->ProcessMessages ();
}
// ---------------------------------------------------------------------------
void __fastcall TForm1:: FormKeyDown (TObject *Sender, WORD &Key,
TShiftState Shift)
{
if (Key == VK_LEFT) direction = 3;
if (Key == VK_RIGHT) direction = 1;
if (Key == VK_UP) direction = 0;
if (Key == VK_DOWN) direction = 2;
}
// ---------------------------------------------------------------------------
void __fastcall TForm1:: N7Click (TObject *Sender)
{
ShowMessage ("Created by DimonsTools" "\n dimonstools@googlemail.com" "\n 2014 БЧКІ 1-13" "\n @Все права защищены конгломератом беременных бегемотов");
}
// ---------------------------------------------------------------------------
void __fastcall TForm1:: N5Click (TObject *Sender)
{
Form1->Timer1->Enabled = false;
}
// ---------------------------------------------------------------------------
void __fastcall TForm1:: N6Click (TObject *Sender)
{
Form1->Timer1->Enabled = true;
}
// ---------------------------------------------------------------------------
void __fastcall TForm1:: N2Click (TObject *Sender)
{
PlaySound ("F: \\Labs\\My Game\\start. wav", NULL, SND_ASYNC);
music ();
Timer1->Enabled =! Timer1->Enabled;
clearAll ();
makeRandomFood ();
makeRandomPoison ();
makeRandomSnake ();
render ();
}
// ---------------------------------------------------------------------------
Додаток Б - БЛОК-СХЕМИ
Блок схема функції step.
Блок схема функції render
Блок схема функції makeRandomSnake
Размещено на Allbest.ru
Подобные документы
Характеристика предметної області: FTP-server для ОС Windows. Шляхи встановлення FTP-серверу в ОС Windows. Опис мови та середовища програмування, компонентів та функцій програми. Аналіз реалізованої програми FTP-клієнта. Тестовий запуск та опис програми.
курсовая работа [1,7 M], добавлен 22.06.2017Призначення гри в хрестики-нулики та програмне забезпечення, необхідне для її функціонування. Написання програми в середовищі Borland C++ Builder. Способи виклику програми. Характер вхідних та вихідних даних. Алгоритм та тестування роботи програми.
курсовая работа [321,6 K], добавлен 01.04.2016Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.
курсовая работа [1,3 M], добавлен 23.06.2010Розробка та схема алгоритму проектованої гри. Особливості мови програмування та середовища "Microsoft Visual Studio C++ 2008 Express Edition". Лістинг програми та загальний опис її роботи, аналіз отриманих результатів та оцінка практичної ефективності.
курсовая работа [762,8 K], добавлен 03.05.2015Опис методів і алгоритмів вирішення задачі в середовищі розробки Myeclipse. Основні функції програмного продукту, його структура. Розробка алгоритму та програми, інструкція користувачу. Результати тестування, лістинг основних блоків. Вікно головного меню.
курсовая работа [1,8 M], добавлен 24.02.2014Теоретичні відомості про язик С++. Розробка програми, що виконує основні арифметичні дії над простими та складними числами на язику С++. Опис алгоритму програми та її код. Інструкція по користуванню. Обгрунтовування вибору та складу технічних засобів.
курсовая работа [852,8 K], добавлен 30.11.2011Розробка програми перевірки логічного мислення людини на мові програмування С++, результатом якої є моделювання координатного переміщення. Визначення структури вхідних та вихідних даних, вибір мови програмування. Розгляд алгоритму рішення задачі.
курсовая работа [55,8 K], добавлен 28.04.2015Призначення драйверів та порядок роботи з драйверами в MS-DOS. Розробка драйверів консолі. Структура драйвера та призначення компонентів. Розробка структури алгоритму, програми налагодження драйвера. Опис змінних програми та роботи модулів програми.
курсовая работа [1,0 M], добавлен 22.06.2012Загальна характеристика алгоритму та опис програми. Керівництво системного програміста. Особливості запуску програми в Linux, FreeBSD, Windows. Аналіз результатів тестування програми, що проектується, вивчення та оцінка її практичної ефективності.
курсовая работа [91,4 K], добавлен 13.06.2014Розробка програми стеження за натиснутими клавішами клавіатури. Програмне забезпечення, необхідне для функціонування програми, мови програмування. Опис логічної структури, алгоритм програми та її зв'язок з іншими програмами. Характер та організація даних.
курсовая работа [375,4 K], добавлен 01.04.2016