Розробка програмного забезпечення з використанням засобів WinAPI на прикладі гри 'Три стакани'(або 'Наперстки')

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    134,77 Кб
  • Опубликовано:
    2015-06-09
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Розробка програмного забезпечення з використанням засобів WinAPI на прикладі гри 'Три стакани'(або 'Наперстки')

Міністерство освіти і науки України

Харківський національний університет радіоелектроніки

Факультет Прикладна математика та менеджмент

Кафедра Інформатика

Напрямок Прикладна математика








Пояснювальна записка до курсової роботи

Розробка програмного забезпечення з використанням засобів WinAPI на прикладі гри "Три стакани" (або "Наперстки")


Виконав:

студент гр. ІНФ-14-1

О.Д. Дев’ятов

Перевірив:

доц. В.А. Любченко



р.

Завдання на курсовий проект (роботу)

Студенту Дев’ятову Олександру Дмитровичу   

1. Тема проекту (роботи) розробка програмного забезпечення з використанням засобів WinAPI на прикладі гри "Три стакани" (або "Наперстки")

2. Строк здачі студентом закінченого проекту (роботи) 02.06.2015.

. Вихідні данні проекту (роботи)

. Відомості про предметну область: ігри.

. Перелік використовуваних програмних засобів: середовище програмування Code::Blocks, мова С++, засоби WinAPI.

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

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

. Математичні моделі алгоритму моделі програми.

. Комп’ютерна модель гри "Три стакани".

5. Перелік графічного матеріалу (з точним зазначенням обов’язкових  креслень): блок схема(рис. 2.3), UML-діаграма (рис. 3.1)

6. Дата видачі завдання 03.02.2015

Календарний план

Найменування етапів курсового проекту

Термін виконання етапів проекту

Примітки

1

Пошук необхідної літератури

03.02.15 - 15.02.15

Виконано

2

Пошук необхідного програмного забезпечення

15.02.15 - 05.03.15

Виконано

3

Ознайомлення з можливостями візуального програмування

05.03.15 - 15.03.15

Виконано

4

Розроблення алгоритму для вирішення поставленої задачі

15.03.15 - 28.03.15

Виконано

5

Створення комп’ютерної моделі по розробленому алгоритму

28.03.15 - 10.04.15

Виконано

6

Оформлення пояснювальної записки

10.04.15 - 15.05.15

Виконано

7

Захист курсового проекту

15.05.2015 - 02.06.2015



Реферат

Пояснювальна записка: 26 с., 11 рис., 1 додаток, 5 джерел.

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

Гра, winapi, класси наслідування, повідомлення стакани.

Зміст

Вступ

. Огляд проблеми

.1 Загальні факти про комп’ютерні ігри

1.1.1 Розвиток

1.1.2 Напрямки

.2 Гра "Наперстки"

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

.1 Аналіз обраних засобів створення графічного інтерфейсу

.2 Алгоритм роботи

.3 Блок схема

. Комп'ютерна модель гри "Три стакани"

.1 Обґрунтування вибору мови С++

.2 Програмна реалізація

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

Висновки

Перелік посилань

Додаток

Вступ

Комп’ютерні ігри мають багато призначень: проводження часу, навчальний матеріал, моделювання життєвих ситуацій. Взагалі, відеоігри (більш поширена назва) - це гра <https://uk.wikipedia.org/wiki/%D0%93%D1%80%D0%B0>, в ігровому процесі якої гравець використовує інтерфейс користувача <https://uk.wikipedia.org/wiki/%D0%86%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_%D0%BA%D0%BE%D1%80%D0%B8%D1%81%D1%82%D1%83%D0%B2%D0%B0%D1%87%D0%B0>, щоб отримати зворотну інформацію з відео <https://uk.wikipedia.org/wiki/%D0%92%D1%96%D0%B4%D0%B5%D0%BE> пристрою.

Розробку гри можна розділити на три частини: розробка програмного (джерельного) коду, розробка контенту (малюнки, моделі, музика) та розробка ігрових механік. Джерельний код <https://uk.wikipedia.org/wiki/%D0%94%D0%B6%D0%B5%D1%80%D0%B5%D0%BB%D1%8C%D0%BD%D0%B8%D0%B9_%D0%BA%D0%BE%D0%B4> є основою будь-якої відеогри і відповідає за її технічні можливості, від яких залежить контент та ігровий процес. Індустрія відеоігор <https://uk.wikipedia.org/wiki/%D0%86%D0%BD%D0%B4%D1%83%D1%81%D1%82%D1%80%D1%96%D1%8F_%D0%B2%D1%96%D0%B4%D0%B5%D0%BE%D1%96%D0%B3%D0%BE%D1%80> включає у себе багато людей з різними професіями та ролями: програмістів <https://uk.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F>, які відповідають за технічні можливості гри, художників, моделювальників та аніматорів, які створюють графічний контент, композиторів <https://uk.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80> та звукорежисерів, які створюють звукове оформлення та музичний супровід, якій нерідко видається окремим накладом. За успішне завершення роботи над проектом відповідають продюсери <https://uk.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B4%D1%8E%D1%81%D0%B5%D1%80>.

1. Огляд проблеми

.1 Загальні факти про комп’ютерні ігри

.1.1 Розвиток

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

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

В 1971 році з'явилася перша комп'ютерна гра Computer Space,а в 1972 році на ринок вийшла перша ігрова приставка Odissey, яку випустила фірми Magnavox. У цьому ж році була розроблена комп'ютерна гра Pong, по сторонах екрана знаходилися дві палички, які відбивали квадратний м’ячик - перший комп'ютерний теніс.

Першим переломним моментом в історії комп'ютерних ігор варто назвати 1981 рік, саме цього року компанія IBM представила свій перший IBM PC. З появою персонального комп'ютера комп'ютерні ігри стали стали розроблятися з величезною швидкістю й до сьогоднішнього часу вдосконалюються. Другим переломним періодом був кінець 1996-го року, у даний період почали розробляти "комп'ютерне залізо", призначене саме для ігор, ігри стали досконаліші. Очевидний приклад - вийшов в 1997 році Quake2 від компанії id Software.

Трохи пізніше, в 1998 році компанія Epic MegaGames випустила свій знаменитий Unreal, що довго знаходився в стадії розробки ( уперше згаданий в 1995 році). Довга розробка пояснюється відсутністю попередніх навичок роботи з іграми подібного масштабу. До розробки Unreal, Epic MegaGames створювала "демки" - маленькі програми, які демонструють мистецтво кодування, а також цікаві звукові й графічні ефекти й т.п. Гра претендувала на самий незакінчений продукт за всю ситуацію софтверній промисловості за разюче гігантську кількість багів (помилок). Але проте Unreal приваблював своїй на той час прекрасно зробленою графікою.

Після виходу Unreal багато хто заявляв , що id Software"відстали" і т.п., хоча із зовсім іншої сторони небувала криза даного жанру (3D-Action), коли новим іграм ставало тісно . Компанії прийняли власні рішення: id перенесли провідні титанічні зусилля на відточування multiplayer, не надаючи грандіозної цінності цікавості single-player режиму й сподіваючись безпомилково захопити частину серверів в Інтернеті для власних ігор, Epic же виготовили велику "демку", і вона радувала око гравця й змусила витратитися потенційним клієнтам на технології. І саме цікаве, обидві компанії своїх намірів досягли.

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

1.1.2 Напрямки

Комп'ютерні ігри можуть бути класифіковані за кількома ознаками:

Жанр:

Пригодницька гра (Adventure) - гра, що володіє повноцінним літературним сюжетом, і гравець в процесі гри сам розкриває всі перипетії цього сюжету.

Бойовик (Action) - гра, яка полягає, в основному, з бойових сцен, бійок і перестрілок. Бойовики поділяються на: "Шутери" (від англ. Shoot - стріляти), "Файтинг" (від англ. Fight - битися), "Жахи", "Стелс" (від англ. Stealth - потайний).

Рольова гра (RPG - англ. Role Playing Game) - гра, відмітною особливістю якої є наявність у персонажів певних навичок і характеристик, які можна знайти, а згодом розвивати, виконуючи будь-які дії.

Стратегічна гра (Strategy) - гра, що представляє собою управління масштабними процесами, як, наприклад, будівництво міст, ведення бізнесу, командування армією і т.д.

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

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

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

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

Кількість гравців і спосіб їх взаємодії: гра може бути однокористувальницької, або багатокористувацької;

Візуальне подання: гра може як використовувати графічні засоби оформлення, так і навпаки, бути текстової. Гра також може бути двомірної або тривимірної. Є й звукові гри - в них замість візуального представлення використовуються звуки.

Платформа: гра може належати як до однієї платформі, так і бути мультиплатформенної.

.2 Гра "Наперстки"

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

Гра в наперстки була відома ще в Стародавній Греції. Назва гра в наперстки з'явилося в 1790-і роки, в Англії, де для гри стали використовувати швейні наперстки. Раніше замість наперсток використовувалися шкаралупа волоського горіха і кришечки від пляшок.

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

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

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

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

зробити максимально зручний інтерфейс користувача;

розробити алгоритм руху склянок;

розробити алгоритм обміну склянок з урахування некоректної праці функції рандому для 3 чисел;

розробити методи відрисовки склянки та м’ячика;

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

реалізувати перевірку, чи вгадав користувач обраний ним стакан;

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

2. Аналіз методів та моделі алгоритму програми

.1 Аналіз обраних засобів створення графічного інтерфейсу

Задля виконання задач, поставлених у попередньому розділі доведеться використовувати не тільки знання, отримані на першому курсі з програмування, а й самостійно освоїти засоби створення графічного інтерфейсу. У програмі було використано WinAPI.

Windows API (application programming interfaces) - загальне найменування для цілого набору базових функцій інтерфейсів програмування застосунків <#"870297.files/image001.jpg">

Рисунок 2.1 - початковий вигляд програми

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

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

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

Останні два абзаці виконуються поки змінна-лічильник на дійде до певного числа.

Після зупинки стаканів користувач може натиснути на один з стаканів та отримати повідомлення про правильну відповідь(рис.2.2).

Рисунок 2.2 - повідомлення

Також реалізовані рівні складності, що регулюють швидкість руху стаканів.

2.3 Блок схема


Рисунок 2.3 - блок схема логіки програми

3. Комп'ютерна модель гри "Три стакани"

.1 Обґрунтування вибору мови С++

C++ (Сі-плюс-плюс) - мова програмування <https://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B2%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F> високого рівня з підтримкою декількох парадигм програмування <https://uk.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%B4%D0%B8%D0%B3%D0%BC%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F>: об'єктно-орієнтованої <https://uk.wikipedia.org/wiki/%D0%9E%D0%B1%E2%80%99%D1%94%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D1%96%D1%94%D0%BD%D1%82%D0%BE%D0%B2%D0%B0%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F>, узагальненої <https://uk.wikipedia.org/wiki/%D0%A3%D0%B7%D0%B0%D0%B3%D0%B0%D0%BB%D1%8C%D0%BD%D0%B5%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F> та процедурної <https://uk.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F>. Розроблена Б'ярном Страуструпом <https://uk.wikipedia.org/wiki/%D0%91%27%D1%8F%D1%80%D0%BD_%D0%A1%D1%82%D1%80%D0%B0%D1%83%D1%81%D1%82%D1%80%D1%83%D0%BF> (англ. <https://uk.wikipedia.org/wiki/%D0%90%D0%BD%D0%B3%D0%BB%D1%96%D0%B9%D1%81%D1%8C%D0%BA%D0%B0_%D0%BC%D0%BE%D0%B2%D0%B0> Bjarne Stroustrup) в AT&T <https://uk.wikipedia.org/wiki/AT%26T> Bell Laboratories <https://uk.wikipedia.org/wiki/Bell_Labs> (Мюррей-Хілл, Нью-Джерсі <https://uk.wikipedia.org/wiki/%D0%9D%D1%8C%D1%8E-%D0%94%D0%B6%D0%B5%D1%80%D1%81%D1%96>) у 1979 <https://uk.wikipedia.org/wiki/1979> році та початково отримала назву "Сі з класами". Згодом Страуструп перейменував мову у C++ у 1983 <https://uk.wikipedia.org/wiki/1983> р. Базується на мові <https://uk.wikipedia.org/wiki/%D0%A1_(%D0%BC%D0%BE%D0%B2%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F)>.

Перевагами С++ є:

масштабованість. На мові C++ розробляють програми для найрізноманітніших платформ і систем;

можливість роботи на низькому рівні з пам'яттю, адресами, портами; (Що, при необережному використанні, може легко перетворитися на недолік.)

- можливість створення узагальнених алгоритмів <https://uk.wikipedia.org/wiki/%D0%A3%D0%B7%D0%B0%D0%B3%D0%B0%D0%BB%D1%8C%D0%BD%D0%B5%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F> для різних типів даних, їхня спеціалізація, і обчислення на етапі компіляції, з використанням шаблонів;

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

.2 Програмна реалізація

Першим етапом розробки був базовий класс MDot, що мав protected змінні-позиції int xp, yp та методи: MDot(),void ChangeX(int, bool, bool&, int), virtual void MPaint(HWND, HDC), де конструктор пустий, друга функція змінювала певну змінну уперед або назад відносно булевої змінної з кроком, що передавався останнім параметром, а, коли об’єкт классу доходить до точки, значення якої передається першим, друга булева змінна становиться брехнею , а остання функція малює точку, можна зазначити, що цей метод віртуальний, адже наслідники відрисовуються по-іншому.

Наступним кроком був класс наслідник MDot - класс MCircle, на якому була спроектована і відпрацьована модель обміну, на той час, м’ячиків. До цього классу добавилося багато допоміжних змінних, що теж зберігалися у protected: int mas [3] - масив позицій об’єкту, int xc - змінна для запам’ятовування позиції перед обміном, int level - коефіцієнт важкості гри, bool side - змінна сторони руху, bool move - змінна перевірки руху, bool bobj1, bobj2 - змінні перевірки, який побічний м’ячик рухається, bool obj_side - змінна сторони руху іншого м’ячику, int k - допоміжна змінна для визначення рандомної позиції головного м’яча, int change_x - змінна зі старою позицією головного, а також public: int count - кількість ітерацій, bool circ - змінна видимості м’ячика у фінальному проекті. Останні змінні мені потребувалося змінювати не у функціях.

Також новим у цьому классі є методи: void Level(int) - зміни рівня важкості, void Size(int, int, int) - запам’ятовування розміру, void Timer(HWND, MCircle&, MCircle&) - головна логіка гри, до якої звертається головний таймер программи, спочатку функцією рандому обирається одна з позицій м’ячика для обміну при умови перевірки, що це не позиція, у якій зараз знаходиться м’ячик. Якщо це не так, то механічним шляхом обирається інший м’ячик, тому що переобирання рандомного значення дало не коректну роботу програми. Далі визначається напрям руку м'ячика відносно його положення, а змінна. На кожному з пунктів також визначаються змінні для осьового руху інших м'ячиків. Так як було обрано інший м’яч, враховані данні переходу та інші уточнювання, цей метод тепер заходить до іншої умови - до руху м’ячів. М’ячі взаємно та рівномірно рухаються відносно умовної осі між ними. А virtual void MPaint(HWND, HDC) - тепер малює коло.

Далі був розроблений класс наслідник MCircle - класс MGlass. Його нововведеннями стали три методи: virtual void MPaint(HWND, HDC) - запуск, знищення таймеру програми та повна від рисовка стакану, де задається структура з точок, по якій відрисовуються два чотирикутники та один шестикутник, а потім домальовується прямокутник, усе це утворює стакан, який підрисовується при кожному виклику методу, void Check(int, int, HWND) - використовуються для перевірки правильності кліку.

І нарешті головна частина програми: функція int WINAPI WinMain, що є головною функцією у структурі программ на WINAPI, яка регіструє класс вікна, створює кнопку та утворює петлю з повідомлень, що передаються до функції LRESULT CALLBACK WindowProcedure, яка обробляє усі повідомлення за допомогою конструкції switch case. У цьому фрагменті є створення контекстного меню для регулювання рівня складності, обробка даних щодо розміру вікна та подальше обробка цієї інформації методами, обробка виклику таймеру з обробкою методів Timer та Level, обробка малювання з викликами відповідних методів, обробка кліку на екран з відповідним викликом методу для перевірки правильності кліку та обробка натиску на кнопку чи об’єкт меню.

Рисунок 3.1 - діаграма классів

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

Рисунок 3.2 - Початок

Спочатку вас зустріне вікно програми рис. 3.2. Після чого ви зможете обрати рівень складності рис. 3.3, натиснувши на праву клавішу миші.

Рисунок 3.3 - Рівень важкості

Після чого обирайте рівень та натискайте на кнопку рис.3.4 і чекайте завершення циклу рис. 3.5.

Рисунок 3.4 - Початок

Рисунок 3.5 - Гра

Після того, як стакани зупинилися можете натиснути на обраний вами, якщо ви вгадали, то з’явиться віконце рис. 3.6, якщо ні - рис. 3.7.

Рисунок 3.6 - Виграш     

комп’ютерний гра програмний winapi

Рисунок 3.7 - Програш

Якщо ви виграли, то натискайте на кнопку початку гри, якщо програли, то шукайте правильний стакан, та натискайте на кнопку.

Якщо ви не хочете більше, то виходьте, натиснувши на червону кнопку рис. 3.8.

Рисунок 3.8 - завершення

 

Висновки


У рамках даної курсової роботи була розроблена і реалізована гра "Три стакани" за допомогою засобів WinAPI та середовища програмування Code::Blocks.

У роботі приведені скріншоти з гри, у додатку міститься код, а в архіві разом з текстовим документом сама гра у розширенні .exe.

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

Перелік посилань

1.    Страуструп Б. Язык программирования С++. Часть 1 [Текст] / Б. Страуструп; перевод с англ. - К.: ДиаСофт, 1993. - 264 с.

2.    Страуструп Б. Язык программирования С++. Часть 2 [Текст] / Б. Страуструп; перевод с англ. - К.: ДиаСофт, 1993. - 296 с.

.      Форум WinAPI [Електронный ресурс]. − Режим доступу: http://www.cyberforum.ru/win-api/

4.    Электронні уроки по WinAPI [Електронный ресурс]. − Режим доступу: http://www.progs.biz/winapi/winapi.aspx <http://www.progs.biz/winapi/winapi/winapi01.aspx>

.      Графический интерфейс GDI в Microsoft Windows [Електронный ресурс]. − Режим доступу: http://www.frolov-lib.ru/books/bsp/v14/ch2_3.htm

Додаток

.h

#include <windows.h>MDot

{:xp, yp;:(){};ChangeX(int, bool, bool&, int);void MPaint(HWND, HDC);

};MDot::ChangeX(int x, bool side, bool& move, int level)

{(!side)

{(xp<x)+=level;

}if(side)

{(xp>x)=level;

}(xp<(x+level+1)&&xp>(x-level-1))

{=x;=false;

}

}MDot::MPaint(HWND hwnd, HDC hdc)

{(hwnd, 1);(hwnd, 1, 100, NULL);(hdc, xp, yp, RGB(0xff, 0, 0));

}.h

#include "Dot.h"MCircle: public MDot

{:mas[3];xc,level;side, move, bobj1, bobj2, obj_side;k;change_x;:count;circ;();Level(int);Size(int, int, int);Timer(HWND, MCircle&, MCircle&);void MPaint(HWND, HDC);

};::MCircle()

{=false;=false;_side=false;=false;=false;=true;=1000;=0;=1;

}MCircle::Level(int l)

{=l;

}MCircle::Size(int x , int y, int n)

{(int i =0; i<3; ++i)[i]=x/4+i*x/4;=mas[n-1];=y/2;

}MCircle::Timer(HWND hwnd, MCircle &obj1, MCircle &obj2)

{(time(NULL));(count<25&&!move)

{=false;=false;=false;=mas[k];c=k;=rand()%3;(k==c && k%2==0 && count%2==0)=1;if(k==c && k%2==0 &&count%2==1)=3;if(k==c && k%2==1 && count%2==0)=2;++;(xc>=mas[k])=true;=false;=true;(obj1.xp==mas[k])

{_x=xc;=true;

}(obj2.xp==mas[k])

}

}(move)

{(mas[k], side, move, level);(side)_side=false;_side=true;(bobj1).ChangeX(change_x, obj_side, move, level);(bobj2).ChangeX(change_x, obj_side, move, level);(hwnd, NULL, TRUE);

}

}MCircle::MPaint(HWND hwnd, HDC hdc)

{(circ)

{(hwnd, 1);(hwnd, 1, 1, NULL);hBrush;=CreateSolidBrush(RGB(0,200,0));(hdc,hBrush);(hdc, xp+15, yp+15, xp-15, yp-15);

}

}.h

#include "Circle.h"MGlass : public MCircle

{:void MPaint(HWND, HDC);Check(int, int, HWND);

};MGlass::MPaint(HWND hwnd, HDC hdc)

{(hwnd, 1);(hwnd, 1, 1, NULL);six[]={{xp+30, yp-60},//a

{xp+15, yp-75},//b

{xp-15, yp-75},//c

{xp-30, yp-60},//d

{xp-15, yp-45},//p

{xp+15, yp-45}};//lman1[]={{xp-30, yp-60},//d

{xp-40, yp+30},//e

{xp-15, yp+45},//f

{xp-15, yp-45}};//pman2[]={{xp+30, yp-60},//a

{xp+40, yp+30},//k

{xp+15, yp+45},//g

{xp+15, yp-45}};//l(hdc, xp-15, yp+45, xp+15, yp-45);(hdc,six, 6);(hdc,man1, 4);(hdc,man2, 4);

}MGlass::Check(int x, int y, HWND hwnd)

{(xp-40<x && x<xp+40 && yp-45<y && y<yp+40)(hwnd,"You win!", "Congratulate!", MB_OK);(hwnd,"You lose!", "Haha", MB_OK);

}.cpp

#include <windows.h>

#include <time.h>

#include "..\Glass.h"

/* Declare Windows procedure */CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/* Make the class name into a global variable */szClassName[ ] = "CodeBlocksWindowsApp";glass, glass2, glass3;circle;WINAPI WinMain (HINSTANCE hThisInstance,hPrevInstance,lpszArgument,nCmdShow)

{hwnd; /* This is the handle for our window */messages; /* Here messages to the application are saved */wincl; /* Data structure for the windowclass */

/* The Window structure */.hInstance = hThisInstance;.lpszClassName = szClassName;.lpfnWndProc = WindowProcedure; /* This function is called by windows */.style = CS_DBLCLKS; /* Catch double-clicks */.cbSize = sizeof (WNDCLASSEX);

/* Use default icon and mouse-pointer */.hIcon = LoadIcon (NULL, IDI_APPLICATION);.hIconSm = LoadIcon (NULL, IDI_APPLICATION);.hCursor = LoadCursor (NULL, IDC_ARROW);.lpszMenuName = NULL; /* No menu */.cbClsExtra = 0; /* No extra bytes after the window class */.cbWndExtra = 0; /* structure or the window instance */

/* Use Windows's default colour as the background of the window */.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

/* Register the window class, and if it fails quit the program */(!RegisterClassEx (&wincl))0;

/* The class is registered, let's create the program*/= CreateWindowEx (

, /* Extended possibilites for variation */, /* Classname */

"Three glasses", /* Title Text */_OVERLAPPEDWINDOW, /* default window */

, /* Windows decides the position */

, /* where the window ends up on the screen */

, /* The programs width */

, /* and height in pixels */_DESKTOP, /* The window is a child-window to desktop */, /* No menu */, /* Program Instance handler *//* No Window Creation data */

);("button",

"Go",_CHILD | WS_VISIBLE | BS_PUSHBUTTON,

, 10, 80, 30,,

(HMENU)1001,,);

/* Make the window visible on the screen */(hwnd, nCmdShow);

/* Run the message loop. It will run until GetMessage() returns 0 */(GetMessage (&messages, NULL, 0, 0))

{

/* Translate virtual-key messages into character messages */(&messages);

/* Send message to WindowProcedure */(&messages);

}messages.wParam;

}CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{hdc;ps;int level=1;(message) /* handle the messages */

{WM_CONTEXTMENU :

{hMenu = CreatePopupMenu();( hMenu, MFT_STRING, 10, "&Легко" );( hMenu, MFT_STRING, 20, "&Средне" );( hMenu, MFT_STRING, 30, "&Трудно" );( hMenu, TPM_RIGHTBUTTON |_TOPALIGN |_LEFTALIGN,( lParam ),( lParam ), 0, hwnd, NULL );( hMenu );

};WM_SIZE:

//Запоминаем текущие размеры окна..Size(LOWORD(lParam),HIWORD(lParam), 1);.Size(LOWORD(lParam),HIWORD(lParam), 1);.Size(LOWORD(lParam),HIWORD(lParam), 2);.Size(LOWORD(lParam),HIWORD(lParam), 3);;WM_TIMER:.Timer(hwnd, glass2, glass3);.Level(level);;WM_PAINT:= BeginPaint(hwnd, &ps);.MPaint(hwnd,hdc);.MPaint(hwnd,hdc);.MPaint(hwnd,hdc);(glass.circ).MPaint(hwnd,hdc);(hwnd, &ps);;WM_LBUTTONDOWN:.Check(LOWORD(lParam),HIWORD(lParam), hwnd);;WM_COMMAND:(LOWORD(wParam)==1001)

{.count=0;.circ=true;(1000);

}(LOWORD(wParam)==10)=1;(LOWORD(wParam)==20)=6;(LOWORD(wParam)==30)=10;;WM_DESTROY:(0); /* send a WM_QUIT to the message queue */;: /* for messages that we don't deal with */DefWindowProc (hwnd, message, wParam, lParam);

}0;

}

Похожие работы на - Розробка програмного забезпечення з використанням засобів WinAPI на прикладі гри 'Три стакани'(або 'Наперстки')

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!