Розробка програмного забезпечення

Курсовая работа по предмету «Банковское дело»
Информация о работе
  • Тема: Розробка програмного забезпечення
  • Количество скачиваний: 2
  • Тип: Курсовая работа
  • Предмет: Банковское дело
  • Количество страниц: 26
  • Язык работы: українська мова (Украинский)
  • Дата загрузки: 2014-06-24 01:57:29
  • Размер файла: 598.75 кб
Помогла работа? Поделись ссылкой
Информация о документе

Документ предоставляется как есть, мы не несем ответственности, за правильность представленной в нём информации. Используя информацию для подготовки своей работы необходимо помнить, что текст работы может быть устаревшим, работа может не пройти проверку на заимствования.

Если Вы являетесь автором текста представленного на данной странице и не хотите чтобы он был размешён на нашем сайте напишите об этом перейдя по ссылке: «Правообладателям»

Можно ли скачать документ с работой

Да, скачать документ можно бесплатно, без регистрации перейдя по ссылке:

ЗМІСТ

1. Постановка задачі
1.1. Опис об’єкту комп’ютерізації
1.2. Опис вхідних та вихідних даних
1.3. Формуліровка задачі
2. Вибір та обґрунтування засобів розробкипрограми
2.1. Вибір та обґрунтуваннясередовищарозробки
2.2. Описпрограмно-апаратногозабезпечення
3. Проектування задачі
3.1. Опислогічноїструктуризадачі
3.2. Проектування системи меню
4. Описпрограми
4.1. Опис компонентів
4.2. Опис процедур та функцій
5. Тестування програми
6. Опис використання програми
6.1. Описпроцесу установки програми
6.2. Інструкція користувача
Висновкидо проекту
Список використанихджерел
Додатки:
a) ДодатокА. Код програми
b) Додаток Б. Алгоритми роботи компонентів програми
Електронний варіант програми


ВСТУП

Інтенсивний розвиток технологій та вдосконалення компютерної техніки призвели до появи принципово нових методів дослідження. Такі сучасні методи, як рентгенівська та магнітно-резонансна томографії, дозволяють дослідити людський організм, оцінити стан різних анатомічних утворень. Кожна технологія широко використовує комп’ютерні можливості обробки графічних зображень, на основі яких будується пошарове відображення досліджуваного обєкта та формується діагностичний висновок.
Мета роботи - розробити програму, для виводу графічного зображення квіткового поля.
Об’єкт дослідження – об’єктом дослідження є графічний редактор в Delphi.
Предметом дослідження є технології, засоби розробки та мови програмування для створення програми з виводу графічного зображення.
Задачі курсового проекту:
a) Ознайомитись з особливостями створення графічного зображення в Delphi.
b) Розглянути структуру побудови програми графічного виводу зображення.
c) Розглянути сучасні середовища програмування.
d) Створити програму виводу зображення.







1 ПОСТАНОВКА ЗАДАЧІ

1.1 Опис об’єкту комп’ютерізації

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

1.2 Опис вхідних та вихідних даних
Вхідні данні:
a) программа має доступ до файлів з зображеннями по етапно промальованої квітки;
b) фон программи;
c) Вихідні данні:
d) при запуску программи, створюється зображення, із фалів промальованої квітки, программа задає рандомно місця, де буде відображатися промальовані квіти у згенерованій кількості.

1.3 Формулювання задачі

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

2 ВИБІР ТА ОБҐРУНТУВАННЯ ЗАСОБІВ РОЗРОБКИ ПРОГРАМИ

2.1 Вибір та обґрунтування середовища розробки

У даний час все частіше використовуються візуальні мови програмування. Дані мови програмування зручні через досить багаті бібліотеки, що накопичувалися роками. Вони дають можливість досить швидко і без особливих зусиль створити робочий додаток зі звичним для користувачів інтерфейсом. Візуальні компоненти звільняють програміста від довгострокової роботи над інтерфейсом програми і дають можливість цілком зосередитися на поставленій задачі.
Тепер на ринку ПО пропонується кілька систем візуального програмування. У першу чергу це Delphi, C++ Builder, Visual Basic, Visual C++. Найбільш повними, універсальними і часто використовуваними системами є Delphi і Builder C++ від Borland. Ці мови мають найбільшу і наймогутнішу бібліотеку візуальних компонентів. Крім того, ця бібліотека постійно поповнюється за рахунок інших компаній, що створюють програмне забезпечення. Безліч нових компонентів можна знайті у всесвітній мережі Internet. Система Delphi є ще й однією з найпростіших у вивченні, що дає їй перевагу над іншими візуальними мовами. Delphi має прекрасні засоби для обробки і збереження як локальних так і мережевих баз даних. Виходячи із цього зупиняємо вибір на системі Delphi-7.0. Ця версія продукту фірми Borland є однією з розповсюджених розробок і має всі необхідні компоненти для розробки автоматизованої системи формування довідників.
Як операційне середовище для функціонування програмного комплексу була обрана платформа wіn32 (їй відповідають операційні системі Wіndows95, Wіndows98 і т.д.), що обумовлено наступними її особливостями:
- орієнтація ВНЗ на цю платформу;
- розвинені засоби створення користувальніцького інтерфейсу;
- достатня масштабуємість, тобто здатність працювати на широкому діапазоні компютерного устаткування, починаючи від машин початкового рівня Pentium до багатопроцесорніх систем;
- наявність драйверів для підтримки широкого спектру периферійних пристроїв (відеоадаптерів, мережніх адаптерів, принтерів, дисководів CD-ROM і ін.);
- надзвичайно широке поширення цієї платформи;
Вибір пакету Borland Delphі 7.0 обумовленій наступними його особливостями:
- можливість повторного використання готових програмних компонентів;
- наявність великої кількості стандартних компонентів, а також достатня кількість бібліотек компонент від сторонніх фірм, що розширюють і доповнюють можливості стандартних;
- можливість генерації коду під платформу wіn32;
- підтримка технологій ActіveX, OLE, COM, ІnterNet-технологій;
- досить висока швидкість і надійність роботи скомпільованих програм у порівнянні з інтерпретуючими системами;
- орієнтація на «візуальні» методи розробки програм, що дозволяє швидко і якісно спроектувати і реалізувати стандартний користувальницький інтерфейс;
- перспективність, популярність і широка поширеність середовіща розробки у світі.


2.1 Опис програмно-апаратного забезпечення

Для роботи програми потрібно
 операційна система Windows Vista, Windows XP, Windows 7, Windows 8.
 оперативної пам’яті близько 500 мб.
 процесор Intel Core 2 Duo 2Ггц.
вільне місце на жорсткому місці не менше 25 мб.
3 ПРОЕКТУВАННЯ ЗАДАЧІ

3. 1 Опис логічної структури задачі
a) Програма являю собою виведення графічного зображення;
b) Можна почати с початку натиснувши клавішу R.

3.2 Проектування системи меню
У верхньому лівому куті програми знаходиться меню “Про програму ”. При натиску на нього відкривається вікно (Рисунок 1).

Рисонок 1. Вікно “Про програму”
При натиску на пункт “Выход” - повне закриття програми.

4 ОПИС ПРОГРАМИ

4.1 Опис компонентів

4.1.1 Компонент MainMenu
Компонент Delphi MainMenu призначений для додавання до програми головного меню, елемента, без якого не обходиться жодна з програм для Windows.
Щоб додати до програми Delphi головне меню, потрібно розташувати на Формі в довільному місці компонент MainMenu. Компонент MainMemu невізуальний, тобто, хоча і відображається на прототипі Форми як невеликий квадрат, в працюючій програмі не буде видно. Опції головного меню створюються за допомогою спеціального редактора. Редактор меню викликається за допомогою подвійного клацання по компоненту MainMenu. Спочатку меню пусте, але має один виділений елемент.
Для створення першої опції (як правило, опція головного меню програми File) потрібно перейти в Інспектор обєктів і властивості Caption привласнити потрібну назву. У Windows опції меню, як правило, мають можливість вибору за допомогою поєднання клавіш ALT + <Key>, де Key - перша буква в назві даної опції повинна мати підкреслення. Для створення такого підкреслення перед цією буквою ставиться символ &. Після натискання Enter створений пункт меню зявляється на Формі.

4.1.2 Компонент Timer

Delphi Timer дуже простий компонент, який не видно на екрані, але, тим не менш, Timer Delphi виконує дуже важливі функції в програмі. Delphi Timer дозволяє вводити необхідні затримки між виконанням тих чи інших дій. Розміщуємо компонент Delphi Timer на Форму.
Задаємо у властивості Interval потрібний інтервал часу (вимірюється в мілісекундах). Переходимо на вкладку Events і бачимо єдина подія, підтримуване компонентом Delphi Timer: OnTimer. Виконавши по ньому подвійний клік, або також подвійний клік по самому компоненту, ми потрапимо в сформований середовищем Delphi обробник події, де і введемо код, який передбачає виконання тих чи інших дій.
Так як за замовчуванням сойства Enabled встановлено в True, то в програмі через встановлений у властивості Interval проміжок часу таймер спрацює, тобто видасть подія OnTimer. Будуть виконані необхідні дії. Іноді ж заплановані дії повинні відбутися не автоматично при старті програми, а при виконанні яких-небудь інших дій. У цьому випадку необхідно властивість Enabled в інспектор обєктів встановити в False. Потім в необхідний момент потрібно виконати команду:

Timer1.Enabled: = True;

Врахуйте, що поки Timer1.Enabled одно True, компонент продовжить генерувати подія OnTimer після закінчення кожного проміжку часу, рівного значенню свойcтва Interval. Тому, якщо потрібно тільки одиничне спрацьовування, то таймер потрібно зупинити, причому відразу ж:
procedure TForm1.Timer1Timer (Sender: TObject);
begin
Timer1.Enabled: = False;
{Необхідні дії}
end;
Якщо ж запрограмувати "вимкнення" таймера після виконання передбачених у програмі дій, то при досить малому в порівнянні з тривалістю необхідних дій значенні властивості Interval таймер знову спрацює, і це може перешкодити ходу програми.
4.1.2 Компонент TrackBar
Компонент TrackBar являє собою елемент керування у вигляді повзунка, який користувач може переміщати курсором миші або клавішами під час виконання. Таким чином, користувач може управляти якимись процесами: гучністю звуку, розміром зображення і т.п
Основна властивість компонента - Position. Це властивість можна задавати під час проектування або програмно під час виконання. При переміщенні користувачем повзунка можна прочитати значення Position, що характеризує позицію, в яку користувач перемістив повзунок. Для можливості такого читання служить подія OnChange. У обробнику цієї події можна прочитати значення Position і використовувати його для управління якимось компонентом.
Властивість Position - ціле, значення якого може змінюватися в межах, що задаються властивостями Min і Мах. За замовчуванням Min = 0, Мах = 10, так що Position може приймати тільки 11 значень - від 0 до 10. Якщо задати більше значення Мах, відповідно збільшиться кількість можливих значень Position в діапазоні Min - Мах.
Властивість Orientation визначає орієнтацію повзунка: trHorizontal - горизонтальна, trVertical - вертикальна.

Властивість TickMarks вказує розміщення шкали щодо компонента і може приймати значення: tmBottomRight - знизу або справа залежно від орієнтації компонента, tmTopLeft - зверху або зліва в залежності від орієнтації компонента , tmBoth - з обох сторін.
Властивість TickStyle визначає спосіб зображення шкали. Воно може приймати значення: tsAuto - автоматична промальовування шкали, tsNone - відсутність шкали, tsManual - програмне малювання шкали за допомогою методу SetTick (Value: Integer), який поміщає мітку шкали в позицію, відповідну величині Value. Мітки, що відповідають початку і кінця шкали автоматично розміщуються і в разі TickStyle = tsManual.
При TickStyle = tsAuto частота міток шкали визначається властивістю Frequency. Ця властивість задає, скільки можливих значень Position лежить між мітками. Наприклад, якщо Frequency = 2, то мітки будуть відповідати лише кожному другому можливого значенням позиції.
Властивості LineSize і PageSize визначають, наскільки зміщується повзунок, якщо користувач управляє їм за допомогою відповідно клавіш зі стрілками або клавішами PageUp і PageDown.
Властивості SelStart і SelEnd дозволяють візуально виділити на шкалі деякий діапазон, який про щось говорить користувачеві, наприклад, рекомендований діапазон значень. При цьому ніщо не заважає користувачеві вийти за межі цього діапазону.


4.2 Опис процедур та функцій

Процедури:
a) procedure FormDestroy (Sender: TObject) - подія виникає при знищенні форми активного додатку (завершення програми). Щоб вставити код процедури в тіло програми потрібно перейти до Object Inspector, на вкладку Events (події) і після подвійного клацання миші в поле OnDestroy (по знищенню) Delphi автоматично додасть потрібний код.
b) procedure FormShow(Sender: TObject) – показує форму.
c) procedure FormResize(Sender: TObject) – змінює розмір.
d) procedure N2Click(Sender: TObject) – ця процедура дозволяє гравцеві почати гру спочатку.
e) procedure Render – процес створення зображення.
f) procedure IdleHandler(Sender : TObject; var Done : Boolean) – авто промальовування.
g) procedure ErrorHandler – виводе повідомлення про помилку в заголовку вікна.
h) procedure HResize(Sender : TObject) – коректування при зміні розмірів.




5. ТЕСТУВАННЯ ПРОГРАМ

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


6 АЛГОРИТМ РЕАЛІЗАЦІЇ ІГРОВОЇ ПРОГРАМИ

6.1 Опис процесу установки програми

a) Прослідкуйте, чи достатньо вільного місця на Вашому накопичувачі;
b) Збережіть, скопіюйте файли програми у свою директорію;
c) Після процесу копіювання запустіть програму(TheGame).

6.2 Інструкція користувача:
a) Прослідкуйте, чи достатньо вільного місця на Вашому накопичувачі;
b) Програма являє собою розважальний характер.




ВИСНОВКИ ДО ПРОЕКТУ

В результаті виконання даної курсової роботи був отриманий графічний програмний продукт. Було проведено дослідження компонентів програмної середовища Borland Delphi 7.0, які використовувалися при графічного зображення.



ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ

1) . Гринзоу Лу. Философия программирования для Windows 95/NT: пер. с анг. – СПб.: Символ-Плюс, 1997. – 640 с.
2) Дарахвелидзе П.Г., Марков Е.П. Delphi – среда визуального программирования. – СПб: BHV-Санкт-Петербург, 1996. – 352 с.
3) Епашенников А.М., Епашенников В.А. Программирование в среде Delphi: В 4-х частях. – М.: Диалог-МИФИ, 1997-98.
4) Культин Н.Б. Программирование на Object Pascal в Delphi 5. – СПб: BHV-Санкт-Петербург, 2000. – 464 с.
5) 5. Мэтьюз Джон Г., Финк Куртис Д. Численные методы. Использование MATLAB, 3-е издание.: Пер. с англ. – М.: Издательский дом «Вильямс», 2001. – 720 с.
6) Сван Т. Основы программирования в Delphi для Windows 95: Пер. с англ. – К.: Диалектика, 1996. – 480 с.
7) Фаронов В.В. Delphi 5. Руководство программиста. – М.: Нолидж, 2001. – 880 с.;



Додаток А
(обов’язковий)
Код програми
unit U_Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, dglOpenGL, StdCtrls, Menus;

type
TGame = class(TForm)
PanelScr: TPanel;
TrackBar1: TTrackBar;
Timer1: TTimer;
Label1: TLabel;
Timer2: TTimer;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure N2Click(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
DC : HDC;
hrc : HGLRC;
//procedure PixelFormat;
procedure SetupGL;
procedure Render;
procedure IdleHandler(Sender : TObject; var Done : Boolean);
procedure ErrorHandler;
procedure HResize(Sender : TObject);
end;

const

NearClipping = 0.1;
FarClipping = 100;
n = 150;
var
Game: TGame;
HWidth, HHeight : Integer;
spin, fanSpeed : GLfloat;
r,g,b, tr1, tr2, tr3, tr4, tr5, tr6 : GLfloat;
tx, ty, tz : GLfloat;
fi : Byte;
Texture : array [0..9] of UINT;
FlowerT : array [0..13] of UINT;
YCoord : array [0..n] of Integer;

implementation

uses Textures, Unit1;

//uses dglOpenGL;

{$R *.dfm}

procedure TGame.FormShow(Sender: TObject);
var i: Integer;
begin
Randomize;
DC:=GetDC(PanelScr.Handle);
Application.Terminate;
HWidth := PanelScr.Width;
HHeight := PanelScr.Height;
hrc := CreateRenderingContext
ActivateRenderingContext(DC, hrc);
SetupGL;
Application.OnIdle := IdleHandler;


glEndList;
glNewList(2, GL_COMPILE);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-0.2, -0.2, -2.0);
glTexCoord2f(1.0, 0.0); glVertex3f( 0.2, -0.2, -2.0);
glTexCoord2f(1.0, 1.0); glVertex3f( 0.2, 0.2, -2.0);
glTexCoord2f(0.0, 1.0); glVertex3f(-0.2, 0.2, -2.0);
glEnd;
glEndList;

for i := 0 to n do
begin
YCoord[i] := Random(n-1);
end;
end;

procedure TGame.SetupGL;
begin
glClearColor(0.0, 0.0, 0.0, 0.0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glPointSize(2);
glEnable(GL_POINT_SMOOTH);
spin := 1.0;
r := 0.5;
g := 0.5;
b := 0.5;
tr1 := -0.1;
tr2 := 0.255;
tr3 := 1.0;
tr4 := 0.455;
tr5 := -0.255;
tr6 := -0.6;
tx := 0.0; ty := 0.0; tz := 0.0;
fi := 0;
****************************************************************************

glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
//glAlphaFunc(GL_GREATER,0.0);
LoadTexture(fon.tga,Texture[1], false);
LoadTexture(textflower00.tga,FlowerT[0], false);
LoadTexture(textflower01.tga,FlowerT[1], false);
LoadTexture(textflower02.tga,FlowerT[2], false);
LoadTexture(textflower03.tga,FlowerT[3], false);
LoadTexture(textflower04.tga,FlowerT[4], false);
LoadTexture(textflower05.tga,FlowerT[5], false);
LoadTexture(textflower06.tga,FlowerT[6], false);
LoadTexture(textflower07.tga,FlowerT[7], false);
LoadTexture(textflower08.tga,FlowerT[8], false);
LoadTexture(textflower09.tga,FlowerT[9], false);
LoadTexture(textflower10.tga,FlowerT[10], false);
LoadTexture(textflower11.tga,FlowerT[11], false);
LoadTexture(textflower12.tga,FlowerT[12], false);
LoadTexture(textflower13.tga,FlowerT[13], false);

//glEnable (GL_BLEND);
//glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ;
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.30);



//glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
// glTexImage2d(GL_TEXTURE_2D,0,3,256,256,0,GL_RGBA, GL_UNSIGNED_BYTE, @Texture);
// glEnable(GL_TEXTURE_GEN_S);
// glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_2D);
//glBindTexture(GL_TEXTURE_2D, Texture); //glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);

end;


procedure TGame.Render;
var
i, j, Rand : Integer;
OpenGL.}
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, HWidth, HHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(45.0, HWidth / HHeight, NearClipping, FarClipping);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;

{glBegin(GL_QUADS); //Ñòðîêà 11
glColor3f(1,0,0); glVertex3f(-1,-1,0);
glColor3f(0,1,0); glVertex3f(1,-1,0);
glColor3f(0,0,1); glVertex3f(1,1,0);
glColor3f(1,1,0); glVertex3f(-1,1,0);
glEnd; }
//glEnable(GL_LINE_SMOOTH);
//glLineWidth(TrackBar1.Position);
glEnable(GL_TEXTURE_2D);
glTranslatef(tx, ty, tz);
//background;
glBindTexture(GL_TEXTURE_2D, Texture[1]);
glPushMatrix;
glTranslatef(0.0, 0.0, -10);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-7.15, -5.15, 1.0);
glTexCoord2f(1.0, 0.0); glVertex3f( 7.15, -5.15, 1.0);
glTexCoord2f(1.0, 1.0); glVertex3f( 7.15, 5.15, 1.0);
glTexCoord2f(0.0, 1.0); glVertex3f(-7.15, 5.15, 1.0);
glEnd;
glPopMatrix;

//Flower
for i := -n div 2 to n div 2 do
begin
glPushMatrix;
glAlphaFunc(GL_GREATER, 0.7);
glBindTexture(GL_TEXTURE_2D, FlowerT[fi]);
glTranslatef(i/((n div 3)+5.5),-0.55 + (YCoord[i+(n div 2)]* -(0.1/n)),( YCoord[i+(n div 2)] * -(3/n)));
glCallList(2);
glAlphaFunc(GL_GREATER, 0.50);
glPopMatrix;
end;



(*glBegin(GL_QUADS);
glNormal3f( 0.0, 0.0,-1.0); //front
glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, 1.0);
glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, 1.0);
glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0);
glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, 1.0);
glNormal3f( 0.0, 0.0, 1.0); //side
glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0, -1.0);
glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, 1.0, -1.0);
glTexCoord2f(0.0, 1.0); glVertex3f( 1.0, 1.0, -1.0);
glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0, -1.0);
glNormal3f( 0.0, 1.0, 0.0); //top
glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, -1.0);
glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, 1.0);
glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, 1.0, 1.0);
glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, -1.0);
glNormal3f( 0.0,-1.0, 1.0); //bottom
glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, -1.0, -1.0);
glTexCoord2f(0.0, 1.0); glVertex3f( 1.0, -1.0, -1.0);
glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0, 1.0);
glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0, 1.0);
glNormal3f( 1.0, 0.0, 0.0); //right
glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -1.0);
glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, 1.0, -1.0);
glTexCoord2f(0.0, 1.0); glVertex3f( 1.0, 1.0, 1.0);
glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0, 1.0);
glNormal3f( -1.0, 0.0, 0.0); //left
glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0);
glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0, 1.0);
glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, 1.0, 1.0);
glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, -1.0);
glEnd;
SwapBuffers(DC);

procedure TGame.HResize(Sender : TObject);
var
tmpBool : Boolean;
begin
glViewport(0, 0, HWidth, HHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(45.0, HWidth / HHeight, NearClipping, FarClipping);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;

IdleHandler(Sender, tmpBool);
end;


procedure TGame.FormDestroy(Sender: TObject);
begin
DeactivateRenderingContext;
DestroyRenderingContext(hrc);
ReleaseDC(Handle, dc);
end;

//àâòîïðîðèñîâêà
procedure TGame.IdleHandler(Sender : TObject; var Done : Boolean);
begin
Render;
Sleep(1);
Done := False;
end;

procedure TGame.ErrorHandler;
begin
Game.Caption := gluErrorString(glGetError);
end;

procedure TGame.FormResize(Sender: TObject);
begin
HWidth := PanelScr.Width;
HHeight := PanelScr.Height;
HResize(Sender);
end;

procedure TGame.TrackBar1Change(Sender: TObject);
begin
glClearColor((TrackBar1.Position/10),0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
end;

procedure TGame.Timer1Timer(Sender: TObject);
begin
spin := spin + 1.0;
if spin > 360 then
spin := spin - 360;
fanSpeed := FanSpeed + 2.0;
if fanSpeed > 360 then
fanSpeed := fanSpeed - 360;
r := r + 0.001;
if r>=1.0 then
r := 0.0;
b := b - 0.001;
if b <= 0.0 then
b := 1.0;
g := g + 0.001;
if g >= 1.0 then
g := 0.25;

Render;
end;

procedure TGame.Timer2Timer(Sender: TObject);
begin
if fi >= 13 then
begin
if fi>0 then
fi := fi-1;
fi:= fi-2;
fi:=fi-5;
end
else
fi := fi+1;
end;

procedure TGame.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var i: Integer;
begin
if Key = 27 then
Close;
if key = 82 then
begin
fi := 0;
for i := 0 to n do
begin
YCoord[i] := Random(n-1);
end;
Timer2.Enabled := true;
end;
end;

procedure TGame.N2Click(Sender: TObject);
begin
Close;
end;

procedure TGame.N1Click(Sender: TObject);
begin
AboutBox.Show;
end;

end.
Додаток Б. Алгоритми роботи компонентів програми.

На рисунку 2 представлена блок-схема роботи програми.

Рисунок 2 Блок – схема програми