DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

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

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Розрахункова робота з курсу “Об'єктно-орієнтоване програмування”

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
Комп’ютерні науки
Кафедра:
Кафедра автоматизованих систем управління

Інформація про роботу

Рік:
2015
Тип роботи:
Розрахункова робота
Предмет:
Об’єктно-орієнтоване програмування
Група:
КН-30
Коротко про документ

Про що ця робота

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

У роботі розглядаються

  • Об'єктно-орієнтоване програмування
  • Графіка та анімація в Delphi
  • Створення власних класів
  • Обробка подій таймера
  • Програмне моделювання

Зміст і розділи

  1. Аналіз методів та алгоритму виконання завдання
  2. Опис класів та об'єктів
  3. Текст програми
  4. Інструкція користувачеві програми
  5. Висновок
Для кого:Студенти технічних спеціальностей та викладачі об'єктно-орієнтованого програмування
Викладачі:Викладач кафедри АСУ

Ключові поняття

Delphiкласоб'єктанімаціяграфічний контекстполотнометодподіяінтерфейс

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет «Львівська політехніка» Кафедра АСУ Розрахункова робота з курсу “Об'єктно орієнтоване програмування” Варіант 24 Тема Створення проекту з елементами графіки” ЗАВДАННЯ: Створити проект Delphi для побудови рухомих графічних зображень. Основні елементи зображення розглядати як об’єкти класів, які необхідно ввести та описати. Рух або зміну об’єктів реалізувати за допомогою відповідних методів класів. Рух більшості об’єктів здійснюється зліва направо, а тоді повторюється або змінює напрямок. Програма має реагувати на керуючі клавіші: 1) для видачі підказки; 2) для зупинки (паузи) та продовження руху; 3) старт із початкового стану; 4) збільшення-зменшення об’єкта; 5) уповільнення-прискорення руху; 6) завершення програми. Примітка. Опис класів та реалізацію методів виконати в окремому програмному модулі. Індивідуальне завдання: Кулька надувається та лопає. Аналіз методів та алгоритмув виконнання завдання У даної задачі є безліч методів рішення. Проце свідчить навіть те що є безліч варіантів створення зображення кульки а саме її побудова чи прив’язки розмірів або координат. Хоча побудова класу не залежить від зовнішнього предствалення даних які містяться в класі оскільки воно формується реалізацією тих чи інших класів завданням яких є відображення інформації об’єкту. У моєму випадку інформація яка зберігається – кулька. Основою для побудови кульки я взяв координати її центру та кількість вуглекислого газу який міститься у ній (що еквівалентно радіусу кульки).Кульку зообразив разам із ниткою якою завязано «отвір» у кулі Таким чином малювання здійснюється викликом відповідних методів. Для створення ефекту рухомості , або іншими словами анімації я використовую клас таймера TTimer і призначаю події OnTimer функцію Animate. Саме ця функція забезпечуэ зміну параметрів класу ,в ній відбувається механізм анімування. Отже з кожним тіком таймера буде викликана функція Animate . Однією з особливостей класу є те шо виконнання анімації залежить тільки від таймера і без нього зображення не поворухнеться. Виклик цієї функції провокує перемаьовку вікна (оновлення вмісту),що в свою чергу викликає функцію Draw; Опис класів та об’єктів В програмі створено два нові класи : TMyBallon,TMyLine оскільки зображення кулі я поділив на Дві частини – це сама куля і власне шнурок яким вона зав’язана. -Клас TMyLine Поля: -x,y –координати точки вузла; -Сan- графічний контекст об’єкта на якому ми малюємо наше зображення; -L -довжина лінії; Методи: -Create -Створення об’єкту -Draw -процедура мальвання обэкту; -Клас TMyBallon Поля: -Broken- ознака того що кулька знищилась -doBoom- ознака що тепер на екран виводиться знищення кульки -effect –тривалість ефекту лопання - x,y- координати середини кульки -CurCo2- вміст Со2 у кулі що дає змогу зразу ж розглядати СurCo2 як радіус кулі; -Can- графічний контекст фікна на якому буде відображатись анімація -Shnyrok: об’єкт-шнурок котрий завязує кулю; Методи Сreate- створення об’єкту Кулька BooM – процедура зображення лопання кульки RotatePoint-поворот точки на заданий кут відносно (0,0) Move – переміщення кулі на заданий крок по x,y CO2(Co2:double)- зміна вмісту вуглекислого газу у кульціна приріст(+/-) Draw –зображення кульки Текст Програми ------------ MyBallonAnimation.dpr ----------- program MyBallonAnimation; uses Forms, MainForm in 'MainForm.pas' {Main}, MyBallon in 'MyBallon.pas'; {$R *.res} begin Application.Initialize; Application.CreateForm(TMain, Main); Application.Run; end. ---------------- MainForm.pas ---------------- unit MainForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,ExtCtrls,MyBallon,Math; type TMain = class(TForm) procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); private My:TMyBallon; AnimTimer:TTimer; Way:integer; procedure Animate(Sender: TObject); { Private declarations } public { Public declarations } end; var Main: TMain; implementation {$R *.dfm} { TForm1 } procedure TMain.FormPaint(Sender: TObject); begin if(My<>nil) then My.Draw; end; procedure TMain.Animate(Sender: TObject); begin if My=nil then My:=TMyBallon.Create(Width div 2,Height-100,20,Self.Canvas); if My.Broken=true then Begin Invalidate; My.Free; My:=Nil; end else begin My.Move(0,-Way); My.CO2(Way*0.5); invalidate; end; end; procedure TMain.FormCreate(Sender: TObject); begin AnimTimer:=TTimer.Create(Owner); AnimTimer.Interval:=10; AnimTimer.OnTimer:=Animate; AnimTimer.Enabled:=true; Way:=1; end; procedure TMain.FormKeyPress(Sender: TObject; var Key: Char); begin Case Key of '+': My.CO2(2); '-': My.CO2(-2); ' ': AnimTimer.Enabled:=not AnimTimer.Enabled; #8 : begin My.Free; My:=nil; end; '1':AnimTimer.Interval:=100; '2':AnimTimer.Interval:=80; '3':AnimTimer.Interval:=50; '4':AnimTimer.Interval:=20; '5':AnimTimer.Interval:=10; 'h','H':Application.MessageBox('1-5 - зміна швидкость анімації'+#10#13+ 'Пробіл- зупинити/продовжити'+#10#13+ '+ - надувати кулю'+#10#13+ '- - спустити кулю'+#10#13+ 'BackSpace - програти з початку','',0); end; end; end. ---------------------- MyBallon.pas ---------------------- unit MyBallon; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,ExtCtrls,Math; type TMyLine=class private x,y:integer; Can:TCanvas; L:integer; public constructor Create(setx,sety:integer;Len:integer;Place:TCanvas); procedure Draw; end; TMyBallon=class public Broken:boolean; doBoom:boolean; effect:integer; x,y:double; CurCo2:double; Can:TCanvas; Shnyrok:TMyLine; procedure BooM; procedure RotatePoint(var x, y: double; Angle:double); procedure Move(dx,dy:integer); procedure CO2(Co2:double); constructor Create(x,y:integer;Co2:integer; SetCan:TCanvas); procedure Draw; end; implementation constructor TMyLine.Create(setx, sety, Len: integer;Place:TCanvas); begin x:=setx; y:=sety; L:=Len; Can:=Place; end; procedure TMyLine.Draw; begin Can.MoveTo(x,y); Can.LineTo(x,y+L); end; procedure TMyBallon.RotatePoint(var x, y: double; Angle:double); var Sk,Ck,x1,y1:double; begin Sk:=sin(Angle); Ck:=cos(Angle); x1:=x; y1:=y; x:=x1*Ck-y1*Sk; y:=x1*Sk+y1*Ck; end; procedure TMyBallon.BooM; var eff,nx,ny:double; begin randomize; nx:=x+5*effect; ny:=y-5*effect; eff:=0; while eff<360 do begin RotatePoint(nx,ny,DegToRad(eff)); nx:=(nx+x-x*cos(DegToRad(eff))+sin(DegToRad(eff))); ny:=(ny+y-x*sin(DegToRad(eff))-cos(DegToRAd(eff))); Can.MoveTo(round(x),round(y)); Can.LineTo(round(ny),round(nx)); eff:=eff+1; end; can.Pen.Style:=psSolid; effect:=effect+1; if effect>50 then Broken:=true; end; procedure TMyBallon.CO2(Co2: double); begin if not((CurCo2<10) and (Co2<0))and (not doBoom) then begin CurCo2:=CurCo2+Co2*0.5; y:=y-Co2; end; if CurCo2>80 then doBoom:=true; end; constructor TMyBallon.Create(x, y: integer;Co2:integer; SetCan: TCanvas); begin Self.Can:=SetCan; Self.x:=x; Self.y:=y; CurCo2:=Co2; Can.Pen.Width:=2; Shnyrok:=TMyLine.Create(x,round(y+Co2*1.5),CO2*2,SetCan); effect:=0; end; procedure TMyBallon.Draw; begin if not doBoom then begin Can.Arc(round(x-CurCo2),round(y-CurCo2),round(x+CurCo2),round(y+CurCo2),round(x+CurCo2),round(y),round(x-CurCo2),round(y)); Can.Arc(round(x-CurCo2),round(y-(Shnyrok.y-y)),round(x+CurCo2),round(Shnyrok.y),round(x-CurCo2),round(y),round(x+CurCo2),round(y)); can.Pie(round(x-CurCo2/2),round(y-CurCo2/2), round(x+CurCo2/2),round(y+CurCo2/2), round(x-CurCo2/4),round(y+CurCo2/2), round(x+CurCo2/4),round(y+CurCo2/2)); can.Pie(round(x-CurCo2/2),round(y-CurCo2/2), round(x+CurCo2/2),round(y+CurCo2/2), round(x+CurCo2/2),round(y-CurCo2/10), round(x+CurCo2/4),round(y-CurCo2/2),); can.Pie(round(x-CurCo2/2),round(y-CurCo2/2), round(x+CurCo2/2),round(y+CurCo2/2), round(x-CurCo2/4),round(y-CurCo2/2), round(x-CurCo2/2),round(y-CurCo2/10)); can.Ellipse(round(x-CurCo2/10),round(y-CurCo2/10), round(x+CurCo2/10),round(y+CurCo2/10)) ; with Can do begin MoVeTo(Shnyrok.x,Shnyrok.y); LineTo(Shnyrok.X-5,Shnyrok.y+5); LineTo(Shnyrok.x+5,Shnyrok.y+5); LineTo(Shnyrok.x,Shnyrok.y); end; Shnyrok.Draw; end else Boom; end; procedure TMyBallon.Move(dx, dy: integer); begin if not doBoom then begin Shnyrok.x:=Shnyrok.x+dx; x:=x+dx; y:=y+dy; Shnyrok.y:=Shnyrok.y+dy; end; end; end. Інструкція користувачеві програми. Щоб відкрити допомогу натисніть h 1-5 - зміна швидкость анімації 'Пробіл- зупинити/продовжити + надувати кулю' - спустити кулю' BackSpace - програти з початку Висновок: Знання графічних можливостей системи є невід’ємною частиною при побудові сучасних програмних вжитків, що дозволяє приваблювати клієнтів зовнішнім виглядом, тому використання лише стандартних компонентів призводить до одноманіності програм. Крім того Особливо цікавим є побудова анімації та динамічних зображень що забезпечує створення унікального інтерфейсу.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!