Розробка програмного забезпечення для комп'ютерної гри

Обґрунтування вибору складу технічних та програмних засобів. Недетерміновані методи штучного інтелекту, використання нейронних мереж для оцінки поведінки і дій гравця. Написання програми-гри "Шашки" з використанням об’єктно-орієнтованого програмування.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 12.12.2014
Размер файла 621,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Зміст

    • Вступ
    • 1. Призначення і область застосування системи
    • 2. Перегляд аналогічних існуючих систем
    • 2.1 Огляд існуючих систем, технологій по профілю теми курсової роботи
    • 2.2 Опис мови програмування
    • 2.3 Опис та обґрунтування вибору складу технічних та програмних засобів
    • 2.4 Розгорнута постановка задачі
    • 3. Опис і обґрунтування проектних рішень
    • 3.1 Опис функціонування системи
    • 3.2 Розробка структурної схеми
    • 3.3 Розробка функціональної схеми
    • 3.4 Розробка діаграми процесів
    • 4. Реалізація курсової роботи
    • 4.1 Розробка блок-схем функціонування системи
    • 4.2 Опис алгоритмів системи
    • 5. Інструкція користувача
    • Висновки
    • Перелік скорочень, символів і спеціальних термінів
    • Література

Вступ

Завжди люди грали в які-небудь гри, хто то в прості ігри, а комусь були до душі саме ігри комп'ютерні. Комп'ютерні ігри були створені ще в далекому 1949 році, коли ще були комп'ютери Edsac. Перша гра, яка з'явилася була симулятором літака, а точніше ракети. І саме після її появи стали з'являтися все нові і нові ігри. Жанри комп'ютерних ігор-це стратегії, симулятори, логічні ігри, квести, освітні, екшен та інші. Також гри на комп'ютер можна розділити на багатокористувацькі й поодинокі. Багато хто любить грати в ігри на консолях / ігрових приставках, деякі персональних комп'ютерах, а хтось на КПК і мобільних телефонах. У наш час величезну популярність здобули онлайн-ігри.

Виходячи з вище описаного - курсова робота присвячена розробці програмного забезпечення для комп'ютерної гри, а саме - "Шашки" для гри між людиною і комп'ютером. Ця гра відноситься до жанру "логічних ігор", але це також гра для двох гравців, тому потрібен штучний інтелект, щоб замінити суперника.

Для створення гри "шашки " потрібно відносно нескладна функція ШІ, головними завданнями якої є передбачення на встановлену глибину своїх ходів і ходів противника. Це пророцтво базується на виборі найкращих ходів з обох сторін. На фінальному етапі функція ШІ обирає найбільш вигідний для комп'ютера ланцюжок ходів.

1. Призначення і область застосування системи

Загалом, призначення цієї гри не відрізняється основною задачею від інших ігор, а саме - розвага та відпочинок користувача в перервах між певною роботою.

Гра розвиває пам'ять, логіку, вольові якості, терпіння. При всьому при тому мудра гра викликає багато позитивних емоцій.

Майже ні в кого не викликає сумнівів очевидна корисність гри в шашки для дітей.

Комп'ютерний варіант шашок застосовується тільки у навчальних та розважальних цілях. У спорті використовується лише традиційний варіант гри.

2. Перегляд аналогічних існуючих систем

2.1 Огляд існуючих систем, технологій по профілю теми курсової роботи

Розглянемо розвиток штучного ігрового інтелекту. Спочатку комп'ютерні ігри та ігровий процес знаходилися в галузі досліджень різних вчених. У 1951 році, використовуючи Ferranti Mark I, перший у світі доступний для покупки комп'ютер, в Манчестерському університеті Крістофер Стречі написав програму, яка грала в шашки, а Дітріх Принц написав програму для шахів. Це були одні з перших комп'ютерних програм, коли-небудь написаних. Симулятор шашок, розроблений Артуром Самуелем в середині 50-х і початку 60-х років, в кінцевому рахунку досяг достатнього майстерності, щоб кинути виклик чемпіону світу. Робота над комп'ютерними шашками і шахами досягла кульмінації в 1997 році, коли комп'ютер Deep Blue виграв матч з шахів у чемпіона світу Гаррі Каспарова.

Узагальненням подібних програм є універсальні ігрові програми, здатні виступити партнером у цілому ряді логічних ігор, правила яких повинні бути описані на спеціальну декларативну мову, приклад комерційної реалізації подібного підходу - гра Zillions of Games.

Ігри, в яких був присутній одиночний (сінгл плеєрний) режим і комп'ютерні суперники, почали з'являтися в 1970-х роках. Першими помітними іграми були аркади Qwak (полювання на качок) і Pursuit (симулятор бійки). Дві текстові комп'ютерні ігри 1972 року випуску, Полювання на Вампуса (англ. Huntthe Wumpus) і Star Trek, також надавали комп'ютерних суперників. Рух ворогів було засновано на заздалегідь збережених шаблонах.

У аркадній грі 1978 випуску Space Invaders був присутній змінюваний рівень складності, виразні шаблони руху і внутрішньоігрові події, що залежать від хеш-функцій, заснованих на вводі гравця. Аркадний шутер Galaxian (1979) містив більш складні і різні рухи ворогів.

Культова аркада Pac-Man (1980) застосовувала ці шаблони до ігрового лабіринту, а також додавала відмінності для кожного ворога. Karate Champ (1984) додала аналогічні шаблони поведінки до файтингу, хоча поганий ігровий ШІ підштовхнув випуск другої версії гри.

Ігри типу Madden Football, Earl Weaver Baseball і Tony La Russa Baseball будували свій ШІ на спробі дублювати на комп'ютері тренування або менеджмент обраної знаменитості. Групи розробників ігор Madden, Weaver і La Russa проробили велику роботу, щоб максимізувати точність цих ігор. Пізніше спортивні ігри дозволяли користувачам "настроювати, тюнінгувати" змінни в ігровому полі для створення обумовленою гравцем організаторської або тренувальної стратегії .

Поява нових ігрових жанрів в 1990-х роках простимулювало використання таких формальних інструментальних засобів штучного інтелекту, як кінцеві автомати (en : finitestate machines). Стратегії реального часу (англ. RTS) ставили перед ігровим штучним інтелектом багато нових завдань: неповна інформованість, знаходження шляху, прийом рішень в реальному часі і економічне планування. У перших ігор цього жанру були відомі проблеми. Наприклад, в одній з перших стратегій Herzog Zwei був поганий пошук шляху, а в Dune II були порушені дуже важливі кінцеві автомати з трьома станами для управління юнітів, внаслідок чого комп'ютерні супротивники функціонували неправильно. Наступні ігри в жанрі мали багато кращий ігровий ШІ.

Пізніші ігри використовували недетерміновані методи штучного інтелекту, в межах від першого використання нейронних мереж у грі 1996 Battlecruiser 3000AD до непередбачуваної поведінки і оцінці дій гравця в таких іграх як Creatures (англ.) і Black & White.

Golden Eye 007 (1997) був одним з перших шутерів від першої особи, в якому ігрові боти реагували на рухи і дії гравця, а також використовували укриття і виконували перекати щоб уникнути попадання в них. Боти також були здатні кидати ручні гранати у відповідний час. Пізніше творці цієї гри поліпшили ігровий ШІ в грі Perfect Dark . Важливою вадою ігрового ШІ в обох іграх було те, що боти завжди знали точне місцезнаходження гравця, навіть якщо жоден з них не бачив його.

Halo (2001) містив ігровий ШІ, який міг використовувати транспортні засоби та мав базові принципи командних дій. Боти могли розпізнавати такі загрози, як кинуті гранати і наступаючі ворожі транспортні засоби, і відповідно могли переміщатися з небезпечної зони, створюваної цими погрозами.

Шутер від першої особи Far Cry (2004) показував дуже просунутий ігровий ШІ для свого часу, хоча і не без помилок. Вороги могли реагувати на стиль гри гравця і намагалися по можливості оточити його. У боротьбі з гравцем боти використовували реальні військові тактики. Вороги не мали "чітерське" ШІ в тому сенсі, що вони не знали точне місце розташування гравця, а лише діяли відповідно з позицією, яку вони запам'ятовували.

Значний внесок у розвиток ігрового ШІ привніс шутер від першої особи FEAR, випущений компанією Monolith Productions в 2005 році. На свій час він містив дуже "просунутий" ШІ, який був зустрінутий дуже позитивно всіма ігровими рецензентами та аналітиками. Бої в грі відбуваються в закритих приміщеннях; боти працюють в команді, використовують оточення як укриття, застосовують до гравця різні тактики в залежності від ситуації, штурмують, відходять, викликають підкріплення, використовують гранати для "викурювання" гравця, адекватно реагують на гранати, кинуті гравцем.

Комп'ютерна рольова гра The Elder Scrolls IV: Oblivion використовувала дуже складний ігровий ШІ для неігрових персонажів. Неігрові персонажі мають графік формату 24/7 і слідують своїм власним цілям власними шляхами. Вони не стоять в одному місці весь час. Вони їдять, сплять і виконують свої щоденні обов'язки. Події, які трапляються в грі, можуть змінити їх розпорядок дня і поведінку. Вони можуть змінитися з хорошого міського населення до смертельних вбивць.

Комп'ютерна ПК-ексклюзивна гра STALKER: Тінь Чорнобиля, що вийшла в березні 2007 року, мала досить складний ігровий ШІ, який розробники називали "A-Life ". Ця система почала розроблятися з 2002 року, однак у фінальній версії гри більша частина особливостей "A-Life" була "вирізана". Частково "A-Life " був доопрацьований у грі " STALKER : Чисте небо" 2008 року випуску.

Мережевий кооперативний шутер від першої особи Left 4 Dead (2008) використовує нову систему ігрового ШІ під назвою "Режисер" (англ. The Director). "Режисер" використовується для процедурного генерування різного ігрового досвіду (experience) для гравців при кожному запуску гри. Розробники гри називають спосіб, згідно з яким працює Режисер, "процедурним наративом". Замість строго встановлених і статичних рівнів складності "Режисер" аналізує дії і "ступінь виживання" гравців і відповідно з цим динамічно додає наступні події, роблячи гру цікавою, але також і прохідною. Проте, поряд з "Режисер" у грі присутні і рівні складності, які впливають на стійкість і ступінь пошкоджень ігрових персонажів.

Ігровий штучний інтелект продовжує розвиватися з метою досягти такого рівня, щоб гравець був нездатний відрізнити комп'ютерного суперника від людського.

2.2 Опис мови програмування

Після офіційного виходу в світ мови програмування С, багато людей почали програмувати надзвичайно складні програми, тому, розробники вищезгаданої мови почали працювати над новою версією. Зараз вона відома всі нам під короткою назвою "С++". При створенні С++ розробники прагнули зберегти сумісність з мовою С. Більшість програм на С справно працюватимуть і з компілятором С++. С++ має синтаксис, заснований на синтаксисі С.

Мова С++ багато в чому є надмножиною С. Нові можливості С++ включають оголошення у вигляді виразів, перетворення типів у вигляді функцій, оператори new і delete, тип bool, посилання, розширене поняття константності та змінності, функції, що підставляються, аргументи за умовчанням, перевизначення, простори імен, класи (включаючи і всі пов'язані з класами можливості, такі як успадкування, функції-члени (методи), віртуальні функції, абстрактні класи і конструктори), перевизначення операторів, шаблони, оператор::, обробку винятків, динамічну ідентифікацію і багато що інше. С++ є також мовою строгого типування і накладає більше вимагань щодо дотримання типів, порівняно з С.

Деякі особливості С++ пізніше були перенесені в С, наприклад ключові слова const і inline, оголошення в циклах for і коментарі в стилі С++ ("//"). У пізніших реалізаціях С також були представлені можливості, яких немає в С++, наприклад макроси vararg і покращена робота з масивами-параметрами.

Стандарт С++ на 1998 рік складається з двох основних частин: ядра мови і стандартної бібліотеки. Стандартна бібліотека С++ увібрала в себе бібліотеку шаблонів STL, що розроблялася одночасно із стандартом. Зараз назва STL офіційно не вживається, проте в кругах програмістів на С++ ця назва використовується для позначення частини стандартної бібліотеки, що містить визначення шаблонів контейнерів, ітераторів, алгоритмів і функторів. Стандарт С++ містить нормативне посилання на стандарт С від 1990 року і не визначає самостійно ті функції стандартної бібліотеки, які запозичуються із стандартної бібліотеки С.Поза тим, існує величезна кількість бібліотек С++, котрі не входять в стандарт. У програмах на С++ можна використовувати багато бібліотек С.

Стандартизація визначила мову програмування С++, проте за цією назвою можуть ховатися також неповні, обмежені достандартні варіанти мови. Спочатку мова розвивалася поза формальними рамками, спонтанно, у міру завдань, що ставилися перед ним. Розвиток мови супроводив розвиток кросс-компілятора C-front. Нововведення в мові відбивалися в зміні номера версії кросс-компілятора. Ці номери версій кросс-компілятора розповсюджувалися і на саму мову, але стосовно теперішнього часу мову про версії мови С++ не ведуть.

2.3 Опис та обґрунтування вибору складу технічних та програмних засобів

В програмі використовуються бібліотека vlc.h, яка розроблена таким чином, що можна вільно маніпулювати компонентами в інтегрованому середовищі C++ Builder в режимі реального часу, безпосередньо в процесі створення додатку. У С++ Builder можна змінювати поведінкові і візуальні характеристики компоненту, як у процесі розробки програм, так і під час їх виконання (run-time).

Вхідні дані - позиція курсору під час натиснення (лівої) клавіші на маніпуляторі.

Вихідні дані - графічна інформація, що виводиться на екран.

У роботі програми тимчасові характеристики неістотні.

Для функціонування програми потрібна персональна ЕОМ з процесором 8086/8088, від 512Кбайт оперативної пам'яті, відеоадаптер VGA/TGA/SVGA і відповідний монітор, маніпулятор(мишка). Інші зовнішні пристрої для роботи програми не потрібні. Для функціонування програми потрібна ОС Windows 98.

2.4 Розгорнута постановка задачі

Задачею моєї курсової роботи є написання програми-гри "Шашки", з використанням об'єктно-орієнтованого програмування. Програмне забезпечення повинне виконувати наступні вимоги:

- Мати файл запуску;

- Гра у графічному вигляд;

- Обрати і реалізувати набір правил для гри;

- Реалізувати повідомлення про "Програш", "Перемогу" та "Обов'язкове побиття шашки";

- Використовувати маніпулятор ("мишку"), як основний засіб керування;

- Можливість без зайвих дій почати гру;

-З початком нової гри обрати чий перший хід;

- Можливість у будь-який час вийти з програми;

- Мати простий та зручний інтерфейс.

3. Опис і обґрунтування проектних рішень

3.1 Опис функціонування системи

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

Форми в С++ дозволяє використовувати бібліотека візуальних компонентів (Visual Component Library, VCL) являє собою каркас з якого будуються всі компоненти додатків, що розробляються на С + + Builder.

Інтелект комп'ютера базується на використанні "Жадібного алгоритму" - використання такого алгоритму зменшує складність гри комп'ютера на користь визначеного призначення, тобто розвитку початкових навичок гри у шашки.

Жадібний алгоритм (англ. Greedy algorithm) - алгоритм, що полягає у прийнятті локально оптимальних рішень на кожному етапі, допускаючи, що кінцеве рішення також виявиться оптимальним. Відомо, що якщо структура завдання задається матроідом, тоді застосування жодного алгоритму видасть глобальний оптимум.

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

Недоліком алгоритму є те що він не має чіткого "розуміння" наступного кроку, тому грає хаотично та не бачить коли він втрачає одну або декілька шашок за хід. Саме цей недолік було вирішено використати на користь.

Задачу перевірки на можливість побити шашку можна розбити на підзадачі :

- вправо + вниз;

- вліво + вниз;

- вліво + вгору;

- вправо + вгору;

Таке розбиття дає можливість вдало використати рекурсію.

Основний метод побудови рекурсивних алгоритмів - це метод декомпозиції. Ідея методу полягає в поділі завдання на частини меншої розмірності, отримання рішення для отриманих частин і об'єднання рішень.

Значно ускладнює алгоритми двомірний масив 8х 8. Цей масив буде використовуватись формами, як позначення дошки. Реакції розміщених на дошці форм на курсор можна вважати подіями. А подією - називається сутність, що надає дві можливості: для класу - повідомляти про зміни, а для його користувачів - реагувати на них. Повідомлення про обов'язкове побиття шашки буде в відповідати методу натиснення клавіші мишки, що містить у собі функцію невідповідності дії.

Щоб відокремити логіку роботи програми від способу подання даних, тобто від дизайну, будемо використовувати шаблони. Найпростіше визначення шаблону - це текст із змінними всередині нього. При обробці шаблону відбувається заміна змінних на їх значення. Також будуть використовуватись класи, методи класу та властивості класу.

Клас - це визначений тип об'єктів. Потрібно враховувати, що методи класу мають прихований параметр this - вказівник на поточний об'єкт. Цей параметр теж можна використовувати в процесі розробки. При роботі з класами слід пам'ятати про специфікатори доступу (private, protected і public), особливо коли використовується спадкоємність. Наприклад, захищені властивості і методи класу у похідному класу стають закритими.

Похідний клас починає своє існування з копіювання членів базових класів, включаючи всі члени, успадковані з більш далеких родинних класів. У похідний клас не копіюються тільки конструктори да деструктори.

3.2 Розробка структурної схеми

Структурна схема - схема, яка визначає основні функціональні частини виробу, їх взаємозв'язки та призначення. Під функціональною частиною розуміють складову частину схеми: елемент, пристрій, функціональну групу, функціональну ланку.

Структурна схема призначена для відображення загальної структури пристрою (алгоритму), тобто його основних блоків, вузлів, частин та головних зв'язків між ними. Із структурної схеми повинно бути зрозуміло, навіщо потрібний даний пристрій і як він працює в основних режимах роботи, як взаємодіють його частини, або ж у випадку з програмним забезпеченням - структурні елементи програми.

Структурна схема розробленого програмного забезпечення включає у себе 3 великих блоки:

- блок вхідних даних - відповідає за введення гравця в гру та початок ігрового процесу;

- блок графічних операцій - демонструє всі можливі послідовні дії в роботі програми, які виводяться на графічний пристрій, в нашому випадку це монітор.

- блок вихідних даних - відповідає за виведення знайденого результату та його передачу на головний екран програми.

Кожен з великих блоків складається у свою чергу з менших блоків, кожен з яких представляє реальні структурні компоненти готової програми шашки. Напрямок стрілок на рисунку вказує на напрямок взаємодії компонентів між собою.

Окремим компонентом розробленого програмного забезпечення постає графічний інтерфейс програми, реалізований за допомогою середовища Builder C++, що має безпосередній вплив на всі інші структурні елементи програми, так як виклик будь-якої функції програми здійснюється за допомогою графічної форми, підключеної до основної програми.

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

3.3 Розробка функціональної схеми

Функціональна схема - схема, що роз'яснює певні процеси, що відбуваються у певних функціональних ланцюгах виробу (програмного забезпечення) чи у виробі (програмному забезпеченні) в цілому.

Функціональна схема містить інформацію про способи реалізації пристроєм заданих функцій. За такою схемою можна визначити, як здійснюються всі графічні дії і які для цього необхідні функціональні елементи. Кожен функціональний елемент містить лише ті входи і виходи, які необхідні для його коректної роботи. Дана схема розробляється на основі структурної схеми для кожного блоку, в результаті з окремих функціональних елементів складається загальна функціональна схема об'єкту.

Розроблена функціональна схема програми - гри "Шашки" схожа на його структурну схему. Але біля стрілок, що вказують напрям руху інформаційних потоків вказано, які саме величини повертаються або передаються до наступного блоку.

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

Функціональна схема наведена на рисунку 3.2.

Рисунок 3.2- Функціональна схема системи

3.4 Розробка діаграми процесів

інтелект нейронний програмування гравець

Діаграма процесів показує структуру впливу певних дій. Відповідно до цього, всі блоки беруть звідкись свій початок та знаходять свій логічний кінець, беручи участь у взаємодії з іншими важливими елементами програми

Діаграма процесів представлена на рисунку 3.3.

Рисунок 3.3 - Діаграма процесів

Розроблена діаграма показує як взаємопов'язані процеси, що відбуваються при функціонуванні гри Шашки.

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

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

4. Реалізація курсової роботи

4.1 Розробка блок-схем функціонування системи

Блок-схема - представлення задачі для її аналізу або розв'язування за допомогою спеціальних символів (геометричних образів), які позначають такі елементи, як операції, потік, дані тощо.

Розроблена мною блок - схема алгоритму функціонування програми-гри Шашки представлені на рисунках 4.1 та 4.2.

Рисунок 4.1 - Блок-схема головної програми

Рисунок 4.2 - Підпрограма виведення повідомлення про переможця

Рисунок 4.1 є блок-схемою головної програми, котра описує виклик функцій графічного інтерфейсу та виведення інформації для користувача у вигляді довідки та головного меню. Крім того ця блок-схема вміщує в себе сам початок гри, та процес маніпулювання курсором на ігровому полі.

Після завершення гри та виведення результатів, за користувачем залишається можливість повторного використання програми. Щоб завершити програму треба скористатися опціями "закриття".

На рисунку 4.2 представлена блок-схема, яка відображає процес завершення гри, відбувається перевірка на кількість шашок які залишилися. Ця перевірка відбувається, лише тоді, коли один з гравців немає ходу чи були побиті всі його шашки. Переможцем є той, у кого залишилося більше шашок.

Крім цієї підзадачі, у програмі виділяються ще декілька підзадач у відповідності із функціями, які виконує програма. Реалізація цих блок-схем досить складна, тому в пояснювальній записці вони не наводяться.

В грі реалізовані "Російські" правила гри в шашки - це було зроблено для того щоб не було ситуації, за якої у переможця була менша кількість шашок, а також не було "Нічиєї".

4.2 Опис алгоритмів системи

В кожній великій програмі доречніше і раціональніше використовувати функції та класи. Якщо їх є велика кількість функції, класів, краще відділити їх від основного коду, описавши їх в окремих файлах. Це спрощує навігацію по коду програми.

Основна частина програми складає заголовний файл DlgMain.h та його реалізація DlgMain.cpp. В ньому описуються значна частина функцій, які використовуються у програмі.

classTDlgMain : publicTForm

{

__published: // Графічні компоненти

TImage *imgField;

TImage *imgWhite;

TImage *imgBlack;

TMainMenu *menuMain;

TMenuItem *N1;

TImage *imgWhiteDamka;

TImage *imgBlackDamka;

TImage *drawImage;

TImage *imgAlpha;

TMenuItem *menuStart;

TMenuItem *menuQuit;

TMenuItem *menuAuthor;

TMenuItem *menuAbout;

У фрагменті вказаному вище відображаються вказівники на зображення, це - вкладки меню, прості шашки, дошка, дамки. У наступній частині, функції роботи з курсором:

void __fastcallFormCreate(TObject *Sender);

void __fastcalldrawImageMouseDown(TObject *Sender, TMouseButtonButton, TShiftStateShift, int X, int Y); //Оброблювач подію натискання миші

void __fastcalldrawImageMouseMove(TObject *Sender, TShiftStateShift, int X, int Y); //позиція курсору

Вкладки меню згадані вище, це Нова гра, Вихід та Від автора описують наступні функції:

void __fastcallmenuQuitClick(TObject *Sender);

void __fastcallmenuAboutClick(TObject *Sender);

void __fastcallmenuStartClick(TObject *Sender);

Що ж стосовно змінних, які використовуються у фрагменті програми, вони є закритими и до них мають доступ тільки функції члени класу. Ці змінні опису наступна частина коду:

private:

charfield[FIELD_SIZE][FIELD_SIZE];

RECT frect[FIELD_SIZE][FIELD_SIZE];

boolfcpu[FIELD_SIZE][FIELD_SIZE];

boolfdamka[FIELD_SIZE][FIELD_SIZE];

intselect_row;

intselect_col;

intfocus_row;

intfocus_col;

inttype_logic;

В наступній частині, описані функції які мають доступ до закритих змінних. Дії які виконують функції описують коментарі.

private:

voidBeginGame(void); //розстановка шашок

voidDrawing(void); // графіка шашок (всієї гри)

intUserCourse(int x, int y);// Користувач - вибір ходу (побити)

intComputerCourse(void); // Хід комп'ютера

intComputerKill(int n, introw, intcol);

// Рекурсивна перевірка на побиття шашок користувача (комп'ютер)

intComputerDamkaKill(int n, introw, intcol);

// Рекурсивна перевірка на побиття дамки комп'ютера шашок (користувача)

intUserKill(introw, intcol);

// Перевірка користувача на побиття шашок (комп'ютера) бити обов'язково буде

intUserDamkaKill(introw, intcol);

// Користувач б'є дамкою шашку комп'ютера

voidSetDamka(boolmy, introw, intcol);

// Створення дамки для (cpu, user)

boolIsComputerKillVector(intvx, intvy, introw, intcol);

// Побиття шашки(компьютер)

boolIsUserDamkaKill(boolone = false, introw = 0, intcol = 0);

// Перевіряє дамку (користувача) на побиття шашки

boolIsVector(introw, intcol, intvx, intvy);

// Перевірка чи є у дамки на шляху пішак для побиття

boolIsUserStep(introw, intcol);

// Перевіряє клітку пуста, або немає, для ходу

boolIsComputerStep(introw, intcol);

// Перевірка на доступність ходу для шашки (комп'ютер)

boolIsComputerKill(intir, intic, introw, intcol);

// Перевірка всіх кутів на побиття шашок (комп'ютер)

boolIsRightBottom(introw, intcol);

boolIsLeftBottom(introw, intcol);

boolIsRightTop(introw, intcol);

boolIsLeftTop(introw, intcol);

boolIsUserChecker(introw, intcol);

boolIsComputerChecker(introw, intcol);

boolIsUserKill(boolone = false, introw = 0, intcol = 0);

// Перевіряє якщо на побиття готових шашкок комп'ютера

boolIsNone(introw, intcol);// Перевірка поля на порожнечу

boolIsRect(introw, intcol);

boolIsDamka(introw, intcol);

boolIsUserDamka(introw, intcol);

boolToComputerPath(int&row, int&col, intvr, intvc);

// Перевіряє шлях до останньої порожньої клітинці (комп'ютер)

voidShowTool(AnsiStringstr, TColorcolor, TColorfcolor, boolauto_pt = true);

voidSwap(intfrom_row, intfrom_col, intto_row, intto_col);

voidIsVictory(intresult);

intOffsetComputerCourse(int&row, int&col);

// Напрямок ходу для дамки (комп'ютер)

public:

__fastcallTDlgMain(TComponent* Owner);

};

В коді з'являється _published - це ключове слово, яке використовується для оголошення елементів VCL. Ці елементи допомагають у побудові графічних елементів, які описує код, в процесі розробки. Це допомагає не компілювати весь час код, щоб побачити результат.

В цьому класі також перераховані всі основні функції, які складають центральну логіку гри та побудову графічних елементів, а також події, які пов'язані з маніпулятором "мишкою". Детальний лістинг цих функцій див. Додаток А.

Окрім DlgMain (DlgMain.h, DlgMain.cpp), є ще дві пари. Це AboutDlg (AboutDlg.h, AboutDlg.cpp) та ToolDlg (ToolDlg.h,ToolDlg.cpp). Вони виконують допоміжні функції. А саме, реалізують виведення меню, яке присвячене користувачу, тобто графа "Про програму", та підсвічення області ходу.

AboutDlg.h - має в основі клас, який складається повністю з графічних компонентів та має вигляд:

classTDlgAbout : publicTForm

{

__published:

TButton *Button1;

TLabel *Label1;

TLabel *Label2;

TImage *Image1;

TLabel *Label3;

TMemo *Memo1;

void __fastcall Button1Click(TObject *Sender);

public:

__fastcallTDlgAbout(TComponent* Owner);

};

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

Розглянемо пару ToolDlg - це так званий "інструмент підсвічення шашки".ToolDlg.h, так само як і AboutDlg.h, має в основі клас, який складається повністю з графічних компонентів

classTDlgTool : publicTForm

{

__published:

TLabel *pszText;

TTimer *Timer1;

void __fastcallFormShow(TObject *Sender);

void __fastcallFormClose(TObject *Sender, TCloseAction&Action);

void __fastcall Timer1Timer(TObject *Sender);

void __fastcallFormCreate(TObject *Sender);

void __fastcallFormClick(TObject *Sender);

void __fastcallpszTextClick(TObject *Sender);

public:

__fastcallTDlgTool(TComponent* Owner);

voidExecute(AnsiStringstr, TColorcolor, TColorfcolor, LPPOINT pt);

};

Цей "інструмент" відіграє важливу роль у грі він вказує, які саме шашки можна обирати. Це було вирішено зробити для розуміння, який хід може зробити користувач. Відбувається це наступним чином:

- виділяється форма;

- накладається кольорова маска;

- клік мишки в області виділеної форми;

- накладається нова кольорова маска;

Модифікатор _fastcall дозволяє конвертацію деяких функцій VCL, так як ця бібліотека була переписана і додана в Builder з Delphi. Використовується при створенні,відкритті, закритті форм.

Детальну реалізацію функцій, заданих у заголовних файлах вказаних вище можна побачити в відповідних їм ToolDlg.cpp, AboutDlg.cpp, DlgMain.cpp у лістингу.

5. Інструкція користувача

Згідно з технічним завданням в процесі роботи над курсовою роботою було розроблене програмне забезпечення для комп'ютерної гри "Шашки". Гра розрахована на навчання грі в шашки за російськими правилами.

На початку програми користувач бачить готове до гри поле з розташованими на ньому шашками та ігрове меню. Тут гравець може вибрати чи почати гру чи звернутися до вкладки Гра. Гра - все, що зв'язано з грою, тобто початок нової гри або вихід. Від автора - допомога користувачеві.

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

Рисунок 5.1 - Вибір шашки

Щоб почати гру, користувачу необхідно натиснути на клавішу Гра->Нова гра. Після цього з'явиться питання "Ваш перший хід?". Вигляд питання зображує Рисунок 5.2.

Рисунок 5.2 - Питання про перший хід

В кінці ігрового кола користувачу буде виведене повідомлення про переможця. Щоб залишити гру треба скористатись вкладкою меню, здійснюється дана операція за допомогою тієї ж клавіші Гра>Вихід, чи стандартним "хрестиком". Щоб відкрити ту чи іншу клітинку користувачу потрібно перемістити курсор у відповідну позицію.

Висновки

Виконавши цю курсову роботу, я вважаю, що цілком добре справився з поставленою задачею: написати програму-гру Шашки з використанням об'єктно-орієнтованого програмування. Після виконання цієї роботи, я усвідомив, що програма - це сукупність об'єктів які взаємодіють між собою. Кожен об'єкт в цій моделі є незалежним, і він здатний отримувати, обробляти дані та відправляти ці дані іншим об'єктам. Також, не варто забувати, що в об'єктно-орієнтованому програмуванні використано моделі успадкування, модульності, поліморфізму та інкапсуляції.

Об'єктно-орієнтовані системи легко підтримуються. Їх перевага полягає в способі комплектування об'єктно-орієнтованих програмних модулів. Традиційне ПЗ складається з даних і процедур, здійснюючий доступ і зміну даних. Дані і процедури комплектуються окремо, тому зміна структури даних впливає на різні модулі, написані різними користувачами. У об'єктно-орієнтованій системі дані і процедури розглядаються разом як частина одного пакету - об'єкту. При зміні даних всі задіяні процедури легко ідентифікуються і змінюються одночасно. Оскільки зміна розповсюджується тільки на одну область системи, його побічний вплив на всю систему зменшується.

Урахування перелічених техніко-технологічних та психолого-фізіологічних особливостей розробки програмного засобу дозволяє спеціалісту значно знизити термін створення ефективної комп'ютерної програми, зорієнтованої на підвищену якість обробки інформації та продуктивну роботу користувача.

Унаслідок багатьох переваг, а також ще ряду причин, ООП є в даний час, поширенішим і ефективнішим напрямом в програмуванні.

Перелік скорочень, символів і спеціальних термінів

EDSAC - Electronic Delay Storage Automatic Calculator

Windows XP - 32 розрядна операційна система.

Pascal, APL, LISP, Basic, С++ - мови програмування високого рівня

VGA - Video Graphics Array

TGA - Truevision Graphics Adapter

SVGA - Super Video Graphics Array

ШІ - штучний інтелект

ПЗ - програмне забезпечення.

Див. - дивись.

Література

1. Конспект лекцій.

2. Гетеберт Шилд "С++ для професіональних програмістів".

3. Чумак А.В. "Керівництво користувача".

4. Шпак З.Я. Програмування мовою С++

5. Джордан "Довідник програміста персональних комп'ютерів"

6. Інтернет-сайт Wikipedia: http://uk.wikipedia.org/wiki/C++

7. "Мова програмування С++. Спецкурс. 10-12 клас ", Лехан С.А.

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.