Міністерство освіти та науки України
НУ «Львівська політехніка»
Кафедра АСУ
Графіко - розрахункова робота
по курсу Об’єктно орієнтоване програмування
на тему: "Створення проекту з елементами графіки"
Варіант № 18 «Зірки мерехтять, місяць пливе.»
Виконав: ст.гр. КН-312
Прийняла: доц.
Дронюк І.М.
м. Львів – 2007р.
Створення проекту з елементами графіки
Варіант № 18 «Зірки мерехтять, місяць пливе.»
ЗАВДАННЯ:
Створити проект Delphi для побудови рухомих графічних зображень. Основні елементи зображення розглядати як об'єкти класів, які необхідно ввести та описати. Рух або зміну об'єктів реалізувати за допомогою відповідних методів класів.
Рух більшості об'єктів здійснюється зліва направо, а тоді повторюється або змінює напрямок. Програма має реагувати на керуючі клавіші:
1) для видачі підказки; [F1]
2) для зупинки (паузи) та продовження руху; [Space]
3) старт із початкового стану; [Home]
4) збільшення-зменшення об'єкта; [Arrow Up/Down]
5) уповільнення-прискорення руху; [Arrow left/Right]
6) завершення програми. [Escape]
Варіанти
18. Зірки мерехтять, місяць пливе.
Текст програми:
moon_and_stars.pas
unit moon_and_stars;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses ClassMoon_Stars;
var
TMS: TMoonAndStars;
x1,x2,y1,y2:integer;
msh:double;
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Brush.Color:=clWhite;
Canvas.Pen.Color:=clWhite;
TMS.PolyStar(1000,true);end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Color:=clBlack;
y2:=Form1.ClientHeight div 2 + 40;
y1:=Form1.ClientHeight div 2 - 40;
x1:=0;
x2:=60;
Timer1.Interval:=50;
msh:=0.5;end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
TMS.Moon(x1,x2,y1,y2,false,msh);
TMS.PolyStar(1500,false);
if x2<Form1.ClientWidth then
begin
x1:=x1+1;
x2:=x2+1; end;
if x2>=Form1.ClientWidth then
begin
x1:=0;
x2:=60;
end;
TMS.Moon(x1,x2,y1,y2,true,msh);
TMS.PolyStar(10,true);end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key=VK_Right) and (Timer1.Interval>10) then
Timer1.Interval:=Timer1.Interval-2;
if (Key=VK_Left) and (Timer1.Interval<600) then
Timer1.Interval:=Timer1.Interval+2;
if (Key=VK_Up) and (msh<7.0) then
begin
msh:=msh+0.5*msh; end;
if (Key=VK_Down) and (msh>0.5) then
begin
TMS.Moon(x1,x2,y1,y2,false,msh);
msh:=msh-0.5*msh; end;
if (Key=VK_ESCAPE) then Application.Terminate;
if (Key=VK_SPACE) then Timer1.Interval:=not Timer1.Interval;
if (Key=VK_HOME) then
begin
Form1.Refresh;
x1:=0;
x2:=60;
Timer1.Interval:=50;
msh:=0.5; end;
if (Key=VK_F1) then
MessageDlg('[Стрілка вліво] -> сповільнення руху місяця'+#13+
'[Стрілка вправо] -> пришвидшення руху місяця'+#13+
'[Стрілка вгору] -> збільшення місяця'+#13+
'[Стрілка вниз] -> зменшення місяця'+#13+
'[Space] -> зупинка/продовження руху'+#13+
'[Home] -> повернення на початок'+#13+
'[Escape] -> вихід',mtInformation,[mbOk],1);
end;
end.
ClassMoon_Stars.pas
aunit ClassMoon_Stars;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Math, moon_and_stars;
type
TMoonAndStars = class
constructor Create;
procedure PolyStar(kil:integer;trying:boolean);
procedure Moon(x1,x2,y1,y2:integer;rezhym:boolean;msh:real);end;
implementation
constructor TMoonAndStars.Create;
beginend;
procedure TMoonAndStars.PolyStar(kil:integer;trying:boolean);
var i,x0,y0:integer;
begin
randomize;
for i:=0 to kil do
begin
x0:=random(Form1.ClientWidth);
y0:=random(Form1.ClientHeight);
if not trying then
Form1.Canvas.Pixels[x0,y0]:=clBlack
else
Form1.Canvas.Pixels[x0,y0]:=clWhite;end;end;
procedure TMoonAndStars.Moon(x1,x2,y1,y2:integer;rezhym:boolean;msh:real);
var
x_ser,y_ser:integer;
x_vidst,y_vidst:real;
begin
x_vidst:=x2-x1;
x_ser:=round(x_vidst/2)+x1;
y_vidst:=y1-y2;
y_ser:=round(y_vidst/2)+y2;
x_vidst:=msh*x_vidst;
x1:=x_ser-round(x_vidst/2);
x2:=x_ser+round(x_vidst/2);
y_vidst:=msh*y_vidst;
y1:=y_ser+round(y_vidst/2);
y2:=y_ser-round(y_vidst/2);
if not rezhym then
with Form1.Canvas do
begin
Brush.Color:=clBlack;
Pen.Color:=clBlack;
Ellipse(x1-20,y1,x2,y2);
Ellipse(x1,y1,x2,y2); end
else
with Form1.Canvas do
begin
Brush.Color:=clWhite;
Ellipse(x1-15,y1,x2,y2);
Brush.Color:=clBlack;
Ellipse(x1,y1,x2,y2);
end;end;end.
Висновок:
Виконуючи дану графімо-розрахункову роботу я навчився працювати в середовищі Delphi7. А також засвоїв основні принципи графіки у ньому. Навчився створювати елементарні проекти з використанням графіки. Створення малюнків, їх збільшення/зменшення. Рух об’єктів, прискорення та сповільнення руху і т.п.