Основи програмування та алгоритмічних мов На тему Анімація в Delphi 7
Зміст
1.Вступ
2.Характеристика предметної області
3.Узагальнена схема алгоритму функціонування проекту
4. Проектування форм
5. Довідкова система
6. Проектування програмного забезпечення
7. Література
8. Додатки
Вступ
В сучасному світі чільне місце посідають комп’ютерні технології. Внаслідок швидкого розвитку цієї галузі комп’ютери тепер є доступними практично всім. А якщо людина має справу з комп’ютером, то рано чи пізно в неї виникне бажання програмувати. Але декілька років назад більшість мов програмування, таких, як Turbo Pascal, або Borland C++ for Windows були досить складними для створення в них програм, якими було б зручно користуватись.
Бурхливий розвиток обчислювалної техніки, необхідність в ефективних засобах розробки програмного забезпечення призвели до появи систем програмування, орієнтованих на так звану „швидку розробку”, серед яких можна виділити Borland Delphi і Microsoft Visual Basic. В основі систем швидкої розробки покладена технологія візуального проектування і подійного програмування, суть якої заключається в тому, що область розробки бере на себе більшу частину рутинної роботи, залишаючи програмісту роботу по конструюванню діалогових вікон і функцій обробки подій. Продуктивність програміста при використанні систем швидкої розробки приложеній (RAD - систем) фантастична.
Delphi – це середовище швидкої розробки, в якій в якості мови програмування використовується мова Delphi. Мова Delphi – строго типізована об’єктно орієнтована мова, в основі якої лежить добре знайомий програмістам Object Pascal.
Характеристика предметної області
Мультиплікація
Під мультиплікацією зазвичай мається на увазі малюнок, який рухається і змінюється. В найпростішому випадку малюнок може або тільки рухатися або тільки змінюватися
Малюнок може бути сформований з графічних примітивів (ліній, завкруглень, дуг, багатокутників і т, д.). Забезпечити переміщення малюнка досить просто: треба спочатку вивести малюнок на екран, потім через якийсь час стерти його і знову вивести цей малюнок, але вже на деякій відстані від його первісного положення. Підбором часу між виведенням і видаленням малюнка, а також відстані між старим і новим положенням малюнка (кроку переміщення), можна домогтися того, що в спостерігача буде складатися враження, що малюнок рівномірно рухається по екрані.
Метод базової крапки
При програмуванні складних зображень, що складаються з безлічі елементів, використовується метод, що називається методом базової крапки Суть цього методу полягає в наступному:
1. Вибирається деяка крапка зображення, що приймається за базову.
2. Координати інших крапок відраховуються від базової крапки.
3. Якщо координати крапок зображення відраховувати від базової у відносних одиницях, а не в пікселях, то забезпечується можливість масштабування зображення.
На мал. 1 наведене зображення кораблика. Базовою крапкою є крапка з координатами (Хо, Уо). Координати інших крапок відраховуються саме від цієї крапки.
Мал. 1. Визначення координат зображення щодо базової крапки
Узагальнена схема алгоритму функціонування проекту
Малювання і стирання зображення кораблика виконує процедура Titanic, яка одержує як параметри координати базової крапки і колір, яким треба намалювати зображення. Якщо при виклику процедури Titanic колір відрізняється від кольору тла форми, то процедура малює зображення, а якщо збігається - те "стирає". У процедурі оголошені константи dx і dу, що визначають крок (у пікселях), який використовується при обчисленні координат крапок зображення. Змінюючи значення цих констант, можна проводити масштабування зображення.
Проектування форм
Програма складається з одної форми на якій розміщені компоненти Timer1, SpeedButton1, SpeedButton2. У властивостях компонент SpeedButton1 і SpeedButton2 виставлені потрібні значення :
SpeedButton1
Caption:CLOSE
Flat:True
Font.Color:clNone
Font.Size:20
Hint:Закриває форму
ShowHint:True
SpeedButton2
Caption:STOP
Flat:True
Font.Color:clNone
Font.Size:20
Hint:Зупиняє рух зображення
ShowHint:True
У властивостях форми виставлено:
Caption:Animate
Constraints.MaxHeigth:380
Constraints.MaxWidth:536
Constraints.MinHeigth:380
Constraints.MinWidth:536
Останні чотири властивості забезпечують неможливість зміни розмірів форми.
Для того, щоб при запуску програми форма з’являлася в центрі екрану в її властивості Position виставлено значення poDesktopCenter.
Довідкова система
В програмі є дві підказки, які вказують на те, які функції виконують дві кнопки, які знаходяться на формі.
Проектування програмного забезпечення
В програмі використовуються змінні x,y,z,k,s,n і u типу integer.
За рух зображення відповідають змінні x,y,s і n, а змінні z,k i u є допоміжними. Змінні х і у відповідають за махаючі рухи «рук» і «ніг» «чоловічка», змінна s за переміщення його вздовж, а змінна т за його „підстрибування”.Процедурами програми є процедури Timer1Timer, FormActivate, SpeedButton1Click, SpeedButton2Click і Titanic.
Основна робота виконується процедурами Timer1Timer, FormActivate та процедурою Titanic. Процедура Titanic виконує малювання зображення, використовуючи графічну підсистему Delphi, Timer1Timer забезпечує рух і зміну зображення, а в процедурі FormActivate встановлюються початкові параметри.
Процедури SpeedButton1Click і SpeedButton2Click зв’язані з двома кнопками і призначені: SpeedButton1Click – для закриття програми, а SpeedButton2Click для зупинки зображення задопомогою зміни властивості interval компонента Timer1.
Література
Культин Н.Б., Основы программирования в Delphi 7. – СПб.:БХВ-Петербург, 2003. – 608 с.:ил.
Додатки
Форми
Головна форма програми
Тексти модулів програми
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Buttons, StdCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
procedure Timer1Timer(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x,y,z,k,s,n,u:integer;
implementation
{$R *.dfm}
procedure titanic(x,y:integer;color:TColor);
const
dx=5;dy=5;
var
buf:TColor;
begin
with form1.Canvas do
begin
buf:=pen.Color;
pen.Color:=color;
moveto(0,161);
lineto(530,161);
ellipse(480,40,600,-80);
moveto(500,30);
if z=1 then
lineto(500-x*2,30+x*2);
moveto(480,10);
if z=1 then
lineto(480-x*2,10+x*2);
moveto(520,40);
if z=1 then
lineto(520-x*2,40+x*2);
ellipse (197+s,150-4*dy+n,202+s,150-3*dy+n);
moveto(200+s,150+n);
lineto(200+s,150-3*dy+n);
moveto(200+s,150+n);
if (z=1) then
lineto(200+x+s,150+y+n);
if (z=0) then
lineto(200-x+s,150+y+n);
moveto(200+s,150+n);
if (z=1) then
lineto(200-x+s,150+y+n);
if (z=0) then
lineto(200+x+s,150+y+n);
moveto(200+s,137+n);
if (z=1) then
lineto(200+x+s,137+y+n);
if (z=0) then
lineto(200-x+s,137+y+n);
moveto(200+s,137+n);
if (z=1) then
lineto(200-x+s,137+y+n);
if (z=0) then
lineto(200+x+s,137+y+n);
pen.Color:=buf;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
titanic(x,y,form1.Color);
if n=-5 then
u:=1;
if n=5 then
u:=0;
if u=1 then
n:=n+1;
if u=0 then
n:=n-1;
if s
s:=s+1
else
s:=0;
if x=0 then
z:=1;
if x=10 then
z:=0;
if y=0 then
k:=1;
if y=10 then
k:=0;
if z=1 then
x:=x+1;
if z=0 then
x:=x-1;
if k=1 then
y:=y+1;
if k=0 then
y:=y-1;
titanic(x,y,clWhite);
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
with form1.Canvas do
begin
pen.Color:=clWhite;
moveto(0,160);
lineto(300,160);
end;
n:=0;
x:=0;
y:=10;
Form1.Color:=clNavy;
Timer1.Interval:=50;
s:=-100;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
form1.Close;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
if timer1.Interval<1000 then
timer1.Interval:=1000000000
else timer1.Interval:=10;
end;
end.