Ігрова програма

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Міністерство освіти Російської Федерації

Професійний коледж №
Спеціальність :__________________
__________________________________
__________________________________

КУРСОВИЙ ПРОЕКТ

Дисципліна __ Технологія розробки програмних продуктів _
Тема _____Ігровая програма «Автомобільні гонки »______
________________________________________________
(КР. 2203. 04. 35. ПЗ)
РОЗРАХУНКОВО-ПОЯСНЮВАЛЬНА ЗАПИСКА
Керівник _______ ________________ _____________________
Дата Особистий підпис Розшифровка підпису
Нормоконтролер ______ ____________ _____________________
Зав. кафедрою ______ ____________ _____________________
Виконав студент групи __ ______________________________ ____
Оцінка ____________________________________________________


Новокузнецьк, 2005


ЗМІСТ
ВСТУП 3
1. ЗАГАЛЬНА ЧАСТИНА 4
1.1 МОВА ПРОГРАМУВАННЯ DELPHI 4
1.2 Delphi. Основні характеристики продукту 4
1.3 Компілятор в машинний код 6
1.4 Об'єктно-Орієнтована модель програмних Компонент 6
1.5 Масштабовані кошти для побудови баз даних 8
1.6 Деякі особливості Delphi 8
1.7 Бібліотека візуальних компонентів 9
1.8 Структурний об'єктно-орієнтоване програмування 9
1.9 Підтримка OLE 2.0, DDE і VBX 10
2. Спеціальна частина 10
2.1 Постановка завдання 10
2.2 Мінімальні технічні вимоги і ОС 10
2.3 Проектування пп 11
2.4 Основні алгоритми для подій на формі і компонентах 12
3. розробка 12
3.1 Коротко опису програмного середовища розробки 12
3.2 Реалізація основних алгоритмів у середовищі розробки 12
4. Документування 13
4.1 Інструкція користувача по пп 13
5. Тестування 15
5.1 тестування функцій пп 15
5.2 тестування надійності 15
Додаток 16


КП. 2203. 04. 35. ПЗ

Змін
Лист
№ докум
Підпис
Дата
Розробник.
Ігрова програма «Автомобільні гонки»
Літ
Лист
Листів
Пров.
2
24
Н. контр
Утв.

Введення

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

Мета гри проїхати відстань 20 кілометрів.

Під час гри на дорозі будуть зустрічатися:

1. Інші машини (противники) перешкоджають проходженню, при зіткненні віднімають у вас 1 одиницю палива;

2. Значок у вигляді бочки (паливо), який заповнює втрати при зіткненні або при тривалій їзді;

3. Нітро, елемент прискорення допомагає розвинути на деякий час велику швидкість.

Гра розроблялася в середовищі Delphi 5 з використанням бібліотеки OpenGL версія 1.3.4582 допомагає прискорити виведення графічного движка, Pixia версія 2.4g для створення і редагування текстур, Image Editor версія 3.0 для створення іконок, 3D-Stydio Max версія 5.0 для створення моделей машин (гравця ).

КП. 2203. 04. 35. ПЗ

Лист
3
Змін
Лист
№ докум
Підпис.
Дата.

1. Загальна частина
1.1 Мова програмування Delphi.
Delphi - це грецьке місто, де жив дельфійський оракул. І цим ім'ям був названий новий програмний продукт із феноменальними характеристиками.
Hадо відзначити, що до моменту виходу продукту обстановка навколо компанії Borland складалася не кращим для неї чином. Подейкували про можливий перепродаж компанії, курс акцій компанії нестримно котився вниз. Зараз вже можна без жодних сумнівів стверджувати, що період труднощів позаду. Hеверно, звичайно, було б говорити, що тільки Delphi з'явився причиною відновлення компанії.
Тим не менш, саме Delphi став тим продуктом, на прикладі якого стало ясно, що у Borland є ще довго не піде з ранка, і що один єдиний продукт може настільки вдало поєднувати кілька передових технологій.
1.2 Delphi. Основні характеристики продукту
Delphi - це комбінація кількох найважливіших технологій:
· Високопродуктивний компілятор в машинний код
· Об'єктно-орієнтована модель компонент
· Візуальне (а, отже, і швидкісне) побудова додатків з програмних прототипів
· Масштабовані кошти для побудови баз даних.

КП. 2203. 04. 35. ПЗ

Лист
4
Змін
Лист
№ докум
Підпис.
Дата

1.3 Компілятор в машинний код
Компілятор, вбудований в Delphi, забезпечує високу продуктивність, необхідну для побудови додатків в архітектурі "клієнт-сервер". Цей компілятор в даний час є найшвидшим у світі, його швидкість компіляції становить понад 120 тисяч рядків у хвилину на комп'ютері 486DX33. Він пропонує легкість розробки і швидкий час перевірки готового програмного блоку, характерного для мов четвертого покоління (4GL) і в той же час забезпечує якість коду, характерного для компілятора 3GL. Крім того, Delphi забезпечує швидку розробку без необхідності писати вставки на Сі чи ручного написання коду (хоча це можливо).
У процесі побудови програми розробник вибирає з палітри компонент готові компоненти як художник, що робить великі мазки пензлем. Ще до компіляції він бачить результати своєї роботи - після підключення до джерела даних їх можна бачити відображеними на формі, можна переміщатися за даними, представляти їх у тому чи іншому вигляді. У цьому сенсі проектування в Delphi мало чим відрізняється від проектування в интерпретирующей середовищі, проте після виконання компіляції ми отримуємо код, який виконується в 10-20 разів швидше, ніж те ж саме, зроблене за допомогою інтерпретатора. Крім того, компілятор компілятору ворожнечу, в Delphi компіляція проводиться безпосередньо у рідній машинний код, в той час як існують компілятори, що перетворюють програму у так званий p-код, який потім інтерпретується віртуальною p-машиною. Це не може не позначитися на фактичному швидкодії готового додатку.

КП. 2203. 04. 35. ПЗ

Лист
5
Змін
Лист
№ докум
Підпис.
Дата

1.4 Об'єктно-орієнтована модель програмних компонентів
Основний упор цієї моделі в Delphi робиться на максимальному не використання коду. Це дозволяє розробникам будувати програми досить швидко з заздалегідь підготовлених об'єктів, а також дає їм можливість створювати свої власні об'єкти для середовища Delphi. Ніяких обмежень по типах об'єктів, які можуть створювати розробники, не існує. Дійсно, все в Delphi написано на ньому ж, тому розробники мають доступ до тих же об'єктів та інструментів, які використовувалися для створення середовища розробки. У результаті немає ніякої різниці між об'єктами, що поставляються Borland або третіми фірмами, і об'єктами, які ви можете створити.
У стандартну поставку Delphi входять основні об'єкти, які утворюють вдало підібрану ієрархію з 270 базових класів. Для початку - непогано. Але якщо виникне необхідність у вирішенні якоїсь специфічної проблеми на Delphi, радимо, перш ніж спробувати починати вирішувати проблему "з нуля", переглянути список вільно розповсюджуваних або комерційних компонент, розроблених третіми фірмами, кількість цих фірм в даний час перевищує число 250, хоча , можливо, я не про всіх знаю. Скептики, можливо, не повірять мені, коли я скажу, що на Delphi можна однаково добре писати як додатки до корпоративних баз даних, так і, наприклад, ігрові програми. Тим не менш, це так. Багато в чому це пояснюється тим, що традиційно в середовищі Windows було досить складно реалізовувати користувальницький інтерфейс. Подієва модель в Windows завжди була складна для розуміння і налагодження. Але саме розробка інтерфейсу в Delphi є найпростішим завданням для програміста.

КП. 2203. 04. 35. ПЗ

Лист
6
Змін
Лист
№ докум
Підпис.
Дата

Середовище Delphi включає в себе повний набір візуальних інструментів для швидкісної розробки додатків (RAD - rapid application development), що підтримує розробку користувальницького інтерфейсу і підключення до корпоративних баз даних. VCL - бібліотека візуальних компонент, включає в себе стандартні об'єкти побудови користувальницького інтерфейсу, об'єкти управління даними, графічні об'єкти, об'єкти мультимедіа, діалоги та об'єкти управління файлами, управління DDE і OLE. Єдине, що можна поставити в провину Delphi, це те, що готових компонент, що поставляються Borland, могло б бути і більше. Однак, розробки інших фірм, а також вільно поширювані програмістами freeware-компоненти вже заповнили цей недолік. Стривайте, - скажете ви, адже це вже було. Так, це було в Visual Basic.
Відповідний стандарт компонент називався VBX. І цей стандарт так само підтримується в Delphi. Однак, візуальні компоненти в Delphi мають більшу гнучкість. Згадаймо, у чому була проблема в VB. Прикладний програміст програмував, взагалі кажучи, в середовищі мови Бейсік. А компоненти в стандарті VBX готували йому його колеги-професіонали на С + +.
VBX'и приходили, "як є", і ні виправити, ні додати нічого було не можна.
А для виготовлення VBX треба було освоювати "кухню" мови C + +. У Delphi візуальні компоненти пишуться на об'єктному Паскалі, на тому ж Паскалі, на якому пишеться алгоритмічна частина програми. І візуальні компоненти Delphi виходять відкритими для надбудови і переписування.

КП. 2203. 04. 35. ПЗ

Лист
7
Змін
Лист
№ докум
Підпис.
Дата

1.5 Масштабовані кошти для побудови баз даних
Об'єкти БД в Delphi засновані на SQL і включають в себе повну міць Borland Database Engine. До складу Delphi також включено Borland SQL Link, тому доступ до СУБД Oracle, Sybase, Informix і InterBase відбувається з високою ефективністю. Крім того, Delphi включає в себе локальний сервер Interbase для того, щоб можна було розробити розгортаються на будь-які зовнішні SQL-сервера програми в офлайновом режимі. Розробник в середовищі Delphi, який проектує інформаційну систему для локальної машини (наприклад, невелику систему обліку медичних карток для одного комп'ютера), може використовувати для зберігання інформації файли формату. Dbf (як в dBase або Clipper) або. Db (Paradox). Якщо ж він буде використовувати локальний InterBase for Windows 4.0 (це локальний SQL-сервер, що входить в постачання), то його застосування без жодних змін буде працювати і в складі великої системи з архітектурою клієнт-сервер.
1.6 Деякі особливості Delphi
Локальний сервер InterBase - слід зауважити, що цей інструмент призначений тільки для автономного налагодження додатків. Насправді він представляє з себе скорочений варіант обробника SQL-запитів InterBase, в який не включені деякі можливості справжнього сервера InterBase. Відсутність цих можливостей з лишком компенсується перевагою автономного налагодження програм.
Team Development Support - засіб підтримки розробки проекту в групі. Дозволяє істотно полегшити управління великими проектами. Це зроблено у вигляді можливості підключення такого продукту як Intersolve PVCS 5.1 безпосередньо до середовища Delphi.

КП. 2203. 04. 35. ПЗ

Лист
8
Змін
Лист
№ докум
Підпис.
Дата

1.7 Бібліотека візуальних компонентів
Ця бібліотека об'єктів включає в себе стандартні об'єкти побудови користувальницького інтерфейсу, об'єкти управління даними, графічні об'єкти, об'єкти мультимедіа, діалоги та об'єкти управління файлами, управління DDE і OLE.
1.8 Структурний об'єктно-орієнтоване програмування
Delphi використовує структурний об'єктно-орієнтована мова (Object Pascal), який поєднує з одного боку виразну потужність і простоту програмування, характерну для мов 4GL, а з іншого боку ефективність мови 3GL. Програмісти негайно можуть почати виробляти працюючі додатки, і їм не доведеться для цього вивчати особливості програмування подій в Windows. Delphi повністю підтримує передові програмні концепції включаючи інкапсуляцію, успадкування, поліморфізм і керування подіями.
1.9 Підтримка OLE 2.0, DDE і VBX
Це дуже важлива особливість для розробників в середовищі Windows, оскільки у вже існуючі Windows-програми програміст може інтегрувати те, що розробить за допомогою Delphi.

КП. 2203. 04. 35. ПЗ

Лист
9
Змін
Лист
№ докум
Підпис.
Дата

2. Спеціальна частина
2.1 Постановка завдання
Функції ПП
Даний програмний продукт виводить зображення на форму засобами графічної бібліотеки OpenGL. Під час роботи програми відбувається три етапи:
1. Завантаження текстури (картинки) з файлу;
2. Підготовка зображення, перестановка кольорової палітри (особливість OpenGL);
3. Висновок створеної текстури на полігон і промальовування в своєї черги.
Вхідні і вихідні дані.
Вхідними даними в даному випадку будуть дії вироблені користувачем на клавіатурі (керування рухом автомобіля).
Вихідні дані відображення автомобіля внаслідок змінених координат, швидкості зіткнення і розгін.
2.2 Мінімальні технічні вимоги і ОС
· Процесор Intel (R) Pentium (R) III 900 MHz або вище;
· ОЗУ 32MB SDRAM або вище;
· Відео карта з підтримкою OpenGL v. 1.3.4582 тобто Підійде навіть вбудована але головне з встановленими драйверами;
· Звукова карта AC '97 або краще;

КП. 2203. 04. 35. ПЗ

Лист
10
Змін
Лист
№ докум
Підпис.
Дата

2.3 Проектування пп
Головна форма призначена для виведення графічних дій. Під час роботи програми з'являється пункти меню в яких можна вибрати чотири дії. Дана форма називається SpeedGL і на ній знаходиться два компоненти:
1. MediaPlayer;
2. ActionList.
MediaPlayer
Служить для завантаження звуків (музики) формату *. mp3, *. wav і надалі програвання її.
ActionList
Служить для виконання коду на ту клавішу на яку в нього прописані дії. Приклад: дія на клавіші Alt + F4.

КП. 2203. 04. 35. ПЗ

Лист
11
Змін
Лист
№ докум
Підпис.
Дата

2.4 Основні алгоритми для подій на формі і компонентах
Самий головний алгоритм відбувається на формі на події OnPaint;
Подія OnPaint відбувається приблизно кожні 0,010 сек. Воно викликається спеціальним таймером, який підключається з модуля mmsystem. Якщо сталася подія OnPaint то відбуваються наступні дії:
· Перевірка головної умови знаходження в меню;
Перевірка полягає в наступному:
якщо змінна Selected_Menu_item = 'Start' то тоді гра почнеться і автоматично будуть завантажені потрібні текстури і почне вимальовуватися завантажений рівень, в інших випадках якщо:
Selected_Menu_item ='';
Selected_Menu_item = 'Car';
Selected_Menu_item = 'Actors';
Selected_Menu_item = 'Exit', то це все відноситься до меню і невеликим маніпуляціям з текстурами.
3. розробка
3.1 Коротко опису програмного середовища розробки
Розробка велася в програмному середовищі Delphi 5 оскільки це найбільш сучасна і найбільш сумісна з майбутніми версіями Delphi. Починаючи з цієї версії Delphi і вище велася підтримка OpenGL.
3.2 Реалізація основних алгоритмів у середовищі розробки
У даній програмі реалізований механізм зациклення на події таймера. Коли відбувається ця подія спеціальний алгоритм переглядає стан клавіатури і якщо натиснута клавіша на яку в нього прописано дія відбувається певні обчислення.

КП. 2203. 04. 35. ПЗ

Лист
12
Змін
Лист
№ докум
Підпис.
Дата

Після виконання процедури таймера автоматично викликається процедура перемальовування вікна OnPaint. У цій процедурі грунтуючись на змінених і підрахованих даних у процедурі таймера прорисовуються за відповідними координатами текстури. Так відбувається взаємодія користувача з програмою. Так як подія таймера відбувається досить часто приблизно 100 разів на секунду то промальовування вікна і реакція програми досить висока. Звичайно тут не маловажну роль грає процесор тому що чим вище його частота тим частіше і швидше буде відбуватися подія таймера.
4. Документування
4.1 Інструкція користувача по пп
Так як у моєму проекті мова йде про гру то я опишу основні функціональні клавіші управління.
Клавіші діючі в меню:
· «Стрілка вгору» і «Стрілка вниз» пересування курсору виділення вгору і вниз;
· «Esc» вихід з гри і повернення в головне меню;
· «Стрілка вправо» і «Стрілка вліво» діють якщо знаходишся в підменю вибору машини; при натисненні «Esc» вибирається та машина яка була показана;
· «Enter» використовується для входу в підменю та початку гри;

КП. 2203. 04. 35. ПЗ

Лист
13
Змін
Лист
№ докум
Підпис.
Дата

Клавіші діють у грі:
· «Стрілка вгору» і «Стрілка вниз» розгін і гальмування автомобіля;
· «Стрілка вліво» і «Стрілка вправо» поворот ліворуч і поворот направо;
· «N» (англ.) використовується для тимчасового прискорення;
· «P» або «Pause» пауза в грі, при повторному натисканні пауза відключається;
· «Esc» повернення в головне меню;
Клавіші діють і у меню і в грі:
· «K» (англ.) використовується для відображення координат знаходження курсору миші на формі, результат виводиться у заголовок форми;
· «F» (англ.) використовується для відображення кількості кадрів в секунду, результат виводиться у заголовок форми;
· «A» (англ.) використовується для перевірки підтримки OpenGL, якщо підтримується то в заголовку форми буде написано версія OpenGL і відео карта через яку здійснюється висновок;

КП. 2203. 04. 35. ПЗ

Лист
14
Змін
Лист
№ докум
Підпис.
Дата

5. тестування
5.1 тестування функцій пп
Виконання функцій у даному проекті йде відмінне так як невеликий збій бал б відразу помічений при роботі програми.
5.2 тестування надійності
Функція з зчитування клавіш продумана таким чином що тільки реагує на ті клавіші на які є код виконання, інші ігноруються.
КП. 2203. 04. 35. ПЗ
Лист
15
Змін
Лист
№ докум
Підпис.
Дата




додаток
Подія таймера:
procedure FNTimeCallBack (uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD) stdcall;
var
word: DWORD;
begin
Inc (CountTickTimer);
if (((PressedKey [19] = true) or
(PressedKey [80] = true)) and (CountTickTimer> 100)) and (CountFuel> 0) then
if (not Pause) then begin
Pause: = true;
CountTickTimer: = 0;
end
else
begin
Pause: = false;
CountTickTimer: = 0;
end;
if not Pause then begin
if Selected_Menu_item = 'Start' then / / Натиснуто клавіша Start
begin
if SpeedGL.MediaPlayer1.FileName <> 'Sound \ Race.mp3' then begin
SpeedGL.MediaPlayer1.FileName: = 'Sound \ Race.mp3';
SpeedGL.MediaPlayer1.Open;
SpeedGL.MediaPlayer1.Play;
end;
if (PressedKey [27] = true) and (CountTickTimer> 100) then
begin
Selected_Menu_item :='';
SpeedGL.MediaPlayer1.Stop;
SpeedGL.MediaPlayer1.Close;
SpeedGL.MediaPlayer1.FileName :='';
Menu_item: = 2;
CountTickTimer: = 0;
Speed: = 0.0;
sound: = false;
CountFuel: = 8;
CountKM: = 0;
end;
/ / Гальмування
if PressedKey [40] = true then
begin
Speed: = Speed ​​+0.00002;
GasDeley: = 1;
end;
if (CountFuel> 0) and (CountKM <20) then if PressedKey [38] = true then Speed: = Speed-0.000005; / / розгін
if (PressedKey [39] = true) and (Speed ​​<-0.00001) then X_KordCar: = X_KordCar +0.00005-Speed ​​/ 5; / / поворот праворуч з урахуванням швидкості
if (PressedKey [37] = true) and (Speed ​​<-0.00001) then X_KordCar: = X_KordCar-0.00005 + Speed ​​/ 5; / / поворот вліво з урахуванням швидкості
if (PressedKey [40] = False) and (PressedKey [38] = False) then begin Speed: = Speed ​​+0.000003; GasDeley: = 1; end; / / гальмування інерцією
if Speed> 0 then Speed: = 0; / / швидкість гальмування
////////////////////////////////////////////////// ////////
if (Gas) and (CountFuel <> 0) then
begin
GasDeley: = GasDeley +0.0005;
if GasDeley> = 1 then Speed: = Speed ​​+0.00005 else Speed: =- 0.025;
if Speed> -0.01 then
begin
Speed: =- 0.01;
Gas: = false;
GasDeley: = 1;
end;
end
else
if Speed ​​<-0.01 then Speed: =- 0.01; / / обмеження швидкості
////////////////////////////////////////////////// ////////
Y_Kord: = Y_Kord + Speed; / / нарощування швидкості
if EnymiGoToWay then begin
Y_Enymi: = Y_Enymi + Speed ​​+0.0085;
X_Enymi: = X_Enymi + (0.001 * LR);
if X_Enymi> = Right_death_dot then LR: =- 1;
if X_Enymi <= Left_death_dot then LR: = 1;
if (Y_Enymi> 1.2) or (Y_Enymi <-1.2) then EnymiGoToWay: = false;
end;
if FuelGoToWay then
Y_KordFuel: = Y_KordFuel + Speed; / / Переміщення елементів
if (Speed ​​<> 0) and (Speed ​​<-0.00002) and (CountFuel> 0) then
CountFuel: = CountFuel + MinusFuel / (Speed ​​* 50); / / Зменшення палива
if (CountFuel <= 0) or (CountKM> = 20) then begin Gas: = false; GasDeley: = 1; Speed: = Speed ​​+0.000003; end;
if (Speed ​​<-0.005) and (MinusFuel = 0.00002) then MinusFuel: = MinusFuel * 10 else
if MinusFuel = 0.0002 then MinusFuel: = MinusFuel/10;
if Y_Kord <=- 2.0 then Y_Kord: = 0; / / перестановка кадрів
if X_KordCar> = Right_death_dot then
begin
X_KordCar: = Right_death_dot; / / обмеження праворуч
if Speed ​​<-0.001 then begin Speed: = Speed ​​+0.00002; GasDeley: = 1; end; / / Зменшення швидкості при дотику до бардюр справап
end;
if X_KordCar <= Left_death_dot then
begin
X_KordCar: = Left_death_dot; / / обмеження зліва
if Speed ​​<-0.001 then begin Speed: = Speed ​​+0.00002; GasDeley: = 1; end; / / Зменшення швидкості при дотику до бардюр зліва
end;
end;
end
else
if (PressedKey [27] = true) and (CountTickTimer> 100) then
begin
Selected_Menu_item :='';
Menu_item: = 2;
CountTickTimer: = 0;
Speed: = 0.0;
Pause: = false;
sound: = false;
CountFuel: = 8;
CountKM: = 0;
end;
if Selected_Menu_item =''then / / Натиснуто клавіша Esc в грі або нічого не вибрано
begin
if SpeedGL.MediaPlayer1.FileName <> 'Textures \ Video \ SL_Start_Logo.avi' then
if SpeedGL.MediaPlayer1.FileName <> 'Sound \ Main_Menu.mp3' then begin
SpeedGL.MediaPlayer1.FileName: = 'Sound \ Main_Menu.mp3';
SpeedGL.MediaPlayer1.Open;
SpeedGL.MediaPlayer1.Play;
end;
if CountTickTimer> 100 then begin
if PressedKey [27] = true then
begin
SpeedGL.MediaPlayer1.Stop;
SpeedGL.MediaPlayer1.Close;
SpeedGL.MediaPlayer1.FileName :='';
Selected_Menu_item: = 'Exit';
CountTickTimer: = 0;
end;
if PressedKey [40] = true then
begin
Inc (Menu_item);
PlaySound ('Sound \ Select_MainMenu.wav', 0, SND_ASYNC);
CountTickTimer: = 0;
end; / / вниз
if PressedKey [38] = true then
begin
Dec (Menu_item);
PlaySound ('Sound \ Select_MainMenu.wav', 0, SND_ASYNC);
CountTickTimer: = 0;
end; / / вгору
if CountTickTimer> 1000 then CountTickTimer: = 110;
end;
if Menu_item> 4 then Menu_item: = 1; / / обмеження
if Menu_item <1 then Menu_item: = 4; / / в межах 4 пунктів
if PressedKey [13] = true then begin
PlaySound ('Sound \ Choose_MainMenu.wav', 0, SND_ASYNC);
case Menu_item of
1: begin
Selected_Menu_item: = 'Start';
Score: = 0;
FuelGoToWay: = false;
NextKM_GenerFuel: = 1;
CountKM: = 0;
CountFuel: = 8;
CountNitro: = 0;
MinusFuel: = 0.00002;
Y_KordFuel: = 1.5;
FuelGoToWay: = false;
GasDeley: = 1;
Gas: = false;
NextKmEnymy: = 0.3;
Y_Enymi: = 1.2;
end;
2: begin Selected_Menu_item: = 'Car'; end;
3: begin Selected_Menu_item: = 'Actors'; end;
4: begin Selected_Menu_item: = 'Exit'; end;
end;
end;
end;
if CountTickTimer> 100 then begin
if Selected_Menu_item = 'Actors' then / / Натиснуто клавіша Sound
begin
if SpeedGL.MediaPlayer1.FileName <> 'Sound \ Actor.mp3' then begin
SpeedGL.MediaPlayer1.FileName: = 'Sound \ Actor.mp3';
SpeedGL.MediaPlayer1.Open;
SpeedGL.MediaPlayer1.Play;
end;
if PressedKey [27] = true then
begin
Selected_Menu_item :='';
SpeedGL.MediaPlayer1.Stop;
SpeedGL.MediaPlayer1.Close;
SpeedGL.MediaPlayer1.FileName :='';
CountTickTimer: = 0;
end;
end;
if Selected_Menu_item = 'Car' then / / Натиснуто клавіша Car
begin / / Car
if SpeedGL.MediaPlayer1.FileName <> 'Sound \ Garage.mp3' then begin
SpeedGL.MediaPlayer1.FileName: = 'Sound \ Garage.mp3';
SpeedGL.MediaPlayer1.Open;
SpeedGL.MediaPlayer1.Play;
end;
if PressedKey [27] = true then
begin
Selected_Menu_item :='';
SpeedGL.MediaPlayer1.Stop;
SpeedGL.MediaPlayer1.Close;
SpeedGL.MediaPlayer1.FileName :='';
CountTickTimer: = 0;
OldSelectMenyItem: = 'Car';
end;
if PressedKey [37] = true then
begin
Dec (CarMenuItem);
CountTickTimer: = 0;
LeftButton: = true;
PlaySound ('Sound \ Select_CarMenu.wav', 0, SND_ASYNC);
end;
if PressedKey [39] = true then
begin
Inc (CarMenuItem);
CountTickTimer: = 0;
RightButton: = true;
PlaySound ('Sound \ Select_CarMenu.wav', 0, SND_ASYNC);
end;
if CarMenuItem> 4 then CarMenuItem: = 1;
if CarMenuItem <1 then CarMenuItem: = 4;
end; / / Car
end; / / CountTickTimer
if Selected_Menu_item = 'Exit' then / / Натиснуто клавіша Exit в гланого меню
begin

SpeedGL.MediaPlayer1.Free;
Application.Terminate;
Application.ProcessMessages;
end;
InvalidateRect (SpeedGL.Handle, nil, False); / / перемальовування
if (Symvol = 0) and
(PressedKey [78] = true) and
(CountNitro> 0) and
(GasDeley = 1) then
begin
Gas: = true;
CountNitro: = CountNitro-1;
GasDeley: = 0;
PlaySound ('Sound \ Start_Nitro.wav', 0, SND_ASYNC);
end;
end;

подія OnPaint:
procedure TSpeedGL.FormPaint (Sender: TObject);
var
ps: TPaintStruct;
begin
BeginPaint (dc, ps);
if Selected_Menu_item =''then
begin
case Menu_item of
1: begin LeftTiresMeny: =- 0.849; RightTiresMeny: = 0.8; TopTiresMeny: = 0.76; end;
2: begin LeftTiresMeny: =- 1.1; RightTiresMeny: = 1.0; TopTiresMeny: = 0.4; end;
3: begin LeftTiresMeny: =- 0.8; RightTiresMeny: = 0.8; TopTiresMeny: = 0.0; end;
4: begin LeftTiresMeny: =- 0.8; RightTiresMeny: = 0.8; TopTiresMeny: =- 0.58; end;
end;
if OldSelectMenyItem = 'Car' then begin
if RemoveMeny> = 0.0 then begin RemoveMeny: = 0.0; OldSelectMenyItem: =''end else
RemoveMeny: = RemoveMeny +0.018;
glCallList (Background);
glPushMatrix;
glTranslatef (RemoveMeny, 0.0,0.0);
glCallList (StringMeny);
glPopMatrix;
end
else begin
glCallList (Background); / / Завантаження фону
glCallList (StringMeny); / / Завантаження написів у меню
end;
if (Selected_Menu_item <> 'Car') and (RemoveMeny = 0.0) then begin
Angel: = Angel +1;
if Angel = 360 then Angel: = 0;
glCallList (8); / / Завантаження колеса
glPushMatrix;
glScalef (0.5,0.66,0.5);
glTranslatef (LeftTiresMeny, TopTiresMeny, 0.0);
glRotatef (Angel, 0.0,0.0,1.0);
glCallList (Tires);
glPopMatrix;
glPushMatrix;
glScalef (0.5,0.66,1.0);
glTranslatef (RightTiresMeny, TopTiresMeny, 0.0);
glRotatef (Angel, 0.0,0.0,1.0);
glCallList (Tires);
glPopMatrix;
end;
end;
if Selected_Menu_item = 'Start' then / / Натиснуто клавіша Start гра почалася
begin / / Start
/ / GlClear (GL_COLOR_BUFFER_BIT); / / повільне стирання
glPushMatrix;
glTranslatef (0.0, Y_Kord, 0.0);
glCallList (WayDesert_1);
glPopMatrix;
glPushMatrix;
glTranslatef (0.0, Y_Kord +1.99,0.0);
glCallList (WayDesert_1);
glPopMatrix;
if not Pause then
if Speed ​​<> 0 then CountKM: = CountKM + abs (Speed/27); / / Количест пройдених кілометрів
/ / Caption: = FloatToStrF (CountKM, ffNumber, 6,3);
/ / Генерування Бензину або Нітро на дорозі
if (CountKM> NextKM_GenerFuel) and (FuelGoToWay = False) and (speed <> 0) then
begin
if Random (2) = 1 then X_KordFuel: = Random * 0.5 else X_KordFuel: =- Random * 0.5;
FuelGoToWay: = true;
Y_KordFuel: = 1.5;
Inc (NextKM_GenerFuel, 1);
if not FuelOrNitro then FuelOrNitro: = true else FuelOrNitro: = false;
end;
if (FuelGoToWay) and (Y_KordFuel <-1.2) then FuelGoToWay: = False;
/ / Промальовування Бензину або Нітро
if not KordObjectItems (X_KordFuel, Y_KordFuel, 0.05,0.065, X_KordCar, Y_KordCar, CarXPogresh, CarYPogresh) then
begin / / KordObject
glPushMatrix;
glTranslatef (X_KordFuel, Y_KordFuel, 0.0);
if FuelOrNitro then glCallList (ItemFuelList) else glCallList (ItemNitroList);
glPopMatrix;
end / / KordObject
else
begin
Y_KordFuel: = 1.5;
FuelGoToWay: = False;
PlaySound ('Sound \ Get_Nitro_Fuel.wav', 0, SND_ASYNC);
if FuelOrNitro then if CountFuel <20 then CountFuel: = CountFuel +1;
if not FuelOrNitro then if CountNitro <= 10 then CountNitro: = CountNitro +1;
end;
////////////////////////////////////////////////// / / / /
{Caption: = FloatToStrF (CountFuel, ffNumber, 6,3) + '' +
FloatToStrF (CountNitro, ffNumber, 6,3) + '' +
FloatToStrF (CountKM, ffNumber, 6,3) + '' +
FloatToStrF (GasDeley, ffNumber, 6,3);}
////////////////////////////////////////////////// / / / /
if (CountKM> NextKmEnymy) and (EnymiGoToWay = False) and (speed <> 0) then
begin
NumbrCar: = random (9) +1;
EnymiGoToWay: = true;
NextKmEnymy: = NextKmEnymy +0.1;
Y_Enymi: = 1.2;
end;
if (EnymiGoToWay) and (Y_Enymi <-1.2) then EnymiGoToWay: = False;
if not KordObjectEnimy (X_Enymi, Y_Enymi, 0.08,0.130, X_KordCar, Y_KordCar, CarXPogresh-0.05, CarYPogresh-0.05) then
begin / / KordObject
glPushMatrix;
glTranslatef (X_Enymi, Y_Enymi, 0.0);
glCallList (EnymiCars [NumbrCar]);
glPopMatrix;
end / / KordObject
else
begin
Y_Enymi: = 1.2;
EnymiGoToWay: = False;
GasDeley: = 1;
Gas: = false;
Speed: =- 0.001;
PlaySound ('Sound \ Denger_Sound.wav', 0, SND_ASYNC);
if CountFuel> 0 then CountFuel: = CountFuel-1;
if CountFuel <0 then CountFuel: = 0;
end;
/ / Малювання машини
if ChooseCar = 'ShotWarKiller' then begin
glPushMatrix;
glTranslatef (X_KordCar, Y_KordCar, 0.0);
glCallList (WarKiller);
glPopMatrix;
end;
if ChooseCar = 'ShotFlash' then begin
glPushMatrix;
glTranslatef (X_KordCar, Y_KordCar, 0.0);
glCallList (Flash);
glPopMatrix;
end;
if ChooseCar = 'ShotGembic' then begin
glPushMatrix;
glTranslatef (X_KordCar, Y_KordCar, 0.0);
glCallList (Gembic);
glPopMatrix;
end;
if ChooseCar = 'ShotGlass' then begin
glPushMatrix;
glTranslatef (X_KordCar, Y_KordCar, 0.0);
glCallList (Glass);
glPopMatrix;
end;
/ / Програші й виграші в грі
if (CountFuel <= 0) and (CountKM <20) then begin glCallList (GameOver); if not sound then sound: = true; end;
if CountKM> = 20 then begin glCallList (YouWin); if not sound then sound: = true; end;
if ((CountFuel <= 0) or (CountKM> = 20)) and (Speed> = 0) then begin
glPushMatrix;
glTranslatef (0.0, -0.4,0.0);
glCallList (PressEsc);
glPopMatrix
end;
/ / Ігрове меню
glPushMatrix;
glTranslatef (0.7,0.58,0.0);
glScalef (1.5,1.5,1.0);
glCallList (GameMenu);
glPopMatrix;
/ / Написи на меню
glPushMatrix;
glTranslatef (0.64,0.68,1.0);
glCallList (FontList);
glPopMatrix;
/ /
if Pause then glCallList (PauseToGame);
end; / / Start
if Selected_Menu_item = 'Car' then / / Натиснуто клавіша Car
begin / / Car
if RemoveMeny <=- 0.5 then RemoveMeny: =- 0.5 else RemoveMeny: = RemoveMeny-0.018;
glCallList (Background);
glPushMatrix;
glTranslatef (RemoveMeny, 0.0,0.0);
glCallList (StringMeny);
glPopMatrix;
if RemoveMeny <=- 0.5 then
begin
/ / Меню
glPushMatrix;
glTranslatef (0.5,0.2,0.0);
glCallList (SubMenuInCar);
glPopMatrix;
DeleyButtonInCarMeny;
/ / Вибирається машина
case CarMenuItem of
1: begin
/ / ShotWarKiller
glPushMatrix;
glTranslatef (0.5,0.12,0.0);
glCallList (ShotWarKiller);
glPopMatrix;
ChooseCar: = 'ShotWarKiller';
CarXPogresh: = XPogreshWarKiller;
CarYPogresh: = YPogreshWarKiller;
end;
2: begin
/ / ShotFlash
glPushMatrix;
glTranslatef (0.5,0.12,0.0);
glCallList (ShotFlash);
glPopMatrix;
ChooseCar: = 'ShotFlash';
CarXPogresh: = XPogreshFlash;
CarYPogresh: = YPogreshFlash;
end;
3: begin
/ / ShotGembic
glPushMatrix;
glTranslatef (0.5,0.12,0.0);
glCallList (ShotGembic);
glPopMatrix;
ChooseCar: = 'ShotGembic';
CarXPogresh: = XPogreshFlash;
CarYPogresh: = YPogreshFlash;
end;
4: begin
/ / ShotGlass
glPushMatrix;
glTranslatef (0.5,0.12,0.0);
glCallList (ShotGlass);
glPopMatrix;
ChooseCar: = 'ShotGlass';
CarXPogresh: = XPogreshFlash;
CarYPogresh: = YPogreshFlash;
end;
end; / / Case
end; / / RemoveMeny
end; / / Car
if Selected_Menu_item = 'Actors' then / / Натиснуто клавіша Actors
begin
glCallList (Actor);
end;
if Selected_Menu_item = 'Exit' then / / Натиснуто клавіша Exit
begin
end;
SwapBuffers (DC);
EndPaint (DC, ps);
{If Selected_Menu_item = 'Start'then begin
Canvas.Brush.Color: = clWhite;
Canvas.TextOut (500,40, 'Бензин:' + FloatToStrF (CountFuel, ffNumber, 6,3) + 'л');
Canvas.TextOut (500,55, 'Нітро:' + FloatToStrF (CountNitro, ffNumber, 6,3) + 'кг / см');
Canvas.TextOut (500,70, 'К.метри:' + FloatToStrF (CountKM, ffNumber, 6,3) + 'км');
end;}
/ /
Caption: = StatisticCaption;
/ / Підтримка апаратного прискорювача і версія OpenGL клавіша 'a'
if PressedKey [65] = true then
Caption: = 'OpenGL:' +
StrPas (glGetString (GL_VERSION)) +
'' +
StrPas (glGetString (GL_VENDOR)) +
'' +
StrPas (glGetString (GL_RENDERER));
if PressedKey [70] = true then / / Показувати Fps - клавіша 'f'
begin
newCount: = GetTickCount;
Inc (frameCount);
If abs (newCount - lastCount)> 1000 then
begin
StatisticCaption: = 'FPS:' + FloatToStr (frameCount);
lastCount: = newCount;
frameCount: = 0;
end;
end;
if PressedKey [75] = true then
StatisticCaption: = 'X =' + FloatToStrF (xpos, ffNumber, 4,3) +
'' + 'Y =' + FloatToStrF (ypos, ffNumber, 4,3);
if (PressedKey [70] = false) and
(PressedKey [75] = false) and
(PressedKey [65] = false) then StatisticCaption: = 'SpeedLine';
end;
procedure TSpeedGL.FormDestroy (Sender: TObject);
begin
/ / GlDeleteLists (1,1);
timeKillEvent (uTimerID);
wglMakeCurrent (0, 0);
wglDeleteContext (hrc);
ReleaseDC (Handle, DC);
end;
procedure TSpeedGL.FormMouseMove (Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//////////////////////////////////////////////
xpos: = 2 * X/ClientWidth-1;
ypos: = 2 * (ClientHeight-Y) / ClientHeight-1;
//////////////////////////////////////////////
if Selected_Menu_item =''then begin / / Selected_Menu_item
if (xpos> -0.3) and (ypos> 0.4) and
(Xpos <0.3) and (ypos> 0.4) and
(Xpos <0.3) and (ypos <0.6) and
(Xpos> -0.3) and (ypos <0.6) then begin
if Menu_item <> 1 then
PlaySound ('Sound \ Select_MainMenu.wav', 0, SND_ASYNC);
Menu_item: = 1;
end;
if (xpos> -0.3) and (ypos> 0.15) and
(Xpos <0.3) and (ypos> 0.15) and
(Xpos <0.3) and (ypos <0.35) and
(Xpos> -0.3) and (ypos <0.35) then begin
if Menu_item <> 2 then
PlaySound ('Sound \ Select_MainMenu.wav', 0, SND_ASYNC);
Menu_item: = 2;
end;
if (xpos> -0.3) and (ypos> -0.1) and
(Xpos <0.3) and (ypos> -0.1) and
(Xpos <0.3) and (ypos <0.1) and
(Xpos> -0.3) and (ypos <0.1) then begin
if Menu_item <> 3 then
PlaySound ('Sound \ Select_MainMenu.wav', 0, SND_ASYNC);
Menu_item: = 3;
end;
if (xpos> -0.3) and (ypos> -0.5) and
(Xpos <0.3) and (ypos> -0.5) and
(Xpos <0.3) and (ypos <-0.3) and
(Xpos> -0.3) and (ypos <-0.3) then begin
if Menu_item <> 4 then
PlaySound ('Sound \ Select_MainMenu.wav', 0, SND_ASYNC);
Menu_item: = 4;
end;
{If Selected_Menu_item = 'Start' then
begin
if
end;}
end; / / Selected_Menu_item
end;
 
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
162.6кб. | скачати


Схожі роботи:
Ігрова програма 15
Програма Txtprintcom - резидентна програма для швидкого і зручного друкування виборчого тексту
ОС Windows XP програма Провідник програма Total Commander
Ігрова залежність
Ігрова психотерапія з дітьми
Ігрова і віртуальна графіка
Ігрова залежність неповнолітніх
Ігрова діяльність у тварин і людей
Ігрова проза Віктора Пелевіна
© Усі права захищені
написати до нас