Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, jpeg, ExtCtrls, StdCtrls, Buttons, Xpman;
- type
- TForm1 = class(TForm)
- img2: TImage;
- img3: TImage;
- img4: TImage;
- img5: TImage;
- img6: TImage;
- btn1: TButton;
- btn2: TButton;
- tmr1: TTimer;
- img1: TImage;
- img8: TImage;
- img9: TImage;
- tmr2: TTimer;
- btn3: TButton;
- btn4: TButton;
- procedure tmr1Timer(Sender: TObject);
- procedure btn1Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure btn2Click(Sender: TObject);
- procedure FormPaint(Sender: TObject);
- procedure tmr2Timer(Sender: TObject);
- procedure btn3Click(Sender: TObject);
- procedure btn4Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- R2,R3,R4,R5,R6: Integer; //Целочисленные переменные.
- alfa5,alfa3,alfa4,alfa6,alfa2: Real; //Вещественные переменные.
- PUSK,Showorb,Zvezdi: Boolean; //Переменные с true и false.
- ArX:array [1..250] of Byte; ArY:array [1..250] of Byte;
- implementation
- {$R *.dfm}
- procedure TForm1.tmr1Timer(Sender: TObject);
- begin // Таймер с расчетом и последующем передвижением планет по орбите (4ms).
- if PUSK then
- begin
- img5.Left:=img1.Left+389 + Trunc (Cos(alfa5*pi/180)*R5); //Расчет следующего шага для планеты.
- img5.top:=img1.Top+395 - Trunc (Sin(alfa5*pi/180)*R5);
- alfa5:=alfa5+0.7; //Скорость(расстояние шага) перемещения планет.
- img6.Left:=img1.Left+389 + Trunc (Cos(alfa6*pi/180)*R6);
- img6.top:=img1.Top+395 - Trunc (Sin(alfa6*pi/180)*R6);
- alfa6:=alfa6+1;
- img4.Left:=img1.Left+389 + Trunc (Cos(alfa4*pi/180)*R4);
- img4.top:=img1.Top+395 - Trunc (Sin(alfa4*pi/180)*R4);
- alfa4:=alfa4+0.4;
- img2.Left:=img1.Left+389 + Trunc (Cos(alfa2*pi/180)*R2);
- img2.top:=img1.Top+395 - Trunc (Sin(alfa2*pi/180)*R2);
- alfa2:=alfa2+0.2;
- img3.Left:=img4.Left+8 + Trunc (Cos(alfa3*pi/180)*R3);
- img3.top:=img4.Top+8 + Trunc (Sin(alfa3*pi/180)*R3);
- alfa3:=alfa3+2;
- img8.Left:=img4.Left-24; //Привязка орбиты к Земле (основываясь на текущих координатах земли).
- img8.top:=img4.Top-24;
- end;
- end;
- procedure TForm1.btn1Click(Sender: TObject);
- begin //Включение и отключение запуска таймера №1. Изменение надписи на кнопке.
- if PUSK=False then PUSK:=True else PUSK:=False;
- if PUSK=True then btn1.Caption:='Стоп' else btn1.Caption:='Старт';
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin //Задание позиций планет при создании формы (при запуске приложения). Присвоение надписей кнопкам.
- img5.Left:=459;
- img5.Top:=395;
- img6.Left:=539;
- img6.Top:=395;
- img4.Left:=649;
- img4.Top:=395;
- img2.Left:=769;
- img2.Top:=395;
- img3.Left:=img4.left+48;
- img3.top:=395+8;
- img8.Left:=img4.Left-24;
- img8.top:=img4.Top-24;
- if Showorb=True then btn2.Caption:='Скрыть орбиту'
- else btn2.caption:='Показать орбиту';
- if Zvezdi=True then btn3.Caption:='Скрыть звёзды'
- else btn3.caption:='Показать звёзды';
- end;
- {СОЗДАНИЕ МАССИВОВ С КООРДИНАТАМИ X и Y}
- Procedure CreateStars();
- var i:integer;
- Begin
- Randomize; //Модуль random (для генерирование случайных чисел).
- For i:=1 to 250 do begin
- ArX[i]:=Random(Form1.ClientWidth); //Генерация случайных точек для X and Y
- ArY[i]:=Random(Form1.ClientHeight);//Генерация случайных точек для X and Y
- end;
- end;
- procedure TForm1.FormPaint(Sender: TObject);
- var x,y:Integer;
- i,j: Byte;
- begin //Рисование звезд и орбит.
- with Form1.Canvas do
- begin
- if Zvezdi=True then //Звезды (Проверка и включение/отключение). Случайное расположение звёзд.
- begin
- for i:=1 to 250 do
- Pixels[ArX[i],ArY[i]]:=clWhite; //Рисование звезд (белой точки) по координатам x,y.
- end
- else
- begin
- Canvas.Brush.Color := clBlack;
- Canvas.FillRect(Canvas.ClipRect); //Заливка канвы чёрным цветом.
- end;
- if Showorb then //Орбиты (Проверка и включение/отключение).
- begin
- Pen.Color:=clRed; //Выбор цвета.
- Brush.style:=bsClear; //Выбор заливки эллипса.
- Ellipse(21,29,786,788);
- Ellipse(144,150,667,669);
- Ellipse(254,260,557,559); //Рисование эллипса (x,y,z,j); x,y - левый верхний угол; z,j - правый нижний угол.
- Ellipse(334,340,477,480);
- img8.Visible:=true; //Включение видимости орбиты земли (.ico с альфа каналом).
- end
- else
- img8.Visible:=false; //Отключени видимости орбиты земли.
- end;
- end;
- procedure TForm1.btn2Click(Sender: TObject);
- begin
- if Showorb=False then Showorb:=True else Showorb:=False; //Для работоспособности показа/скрытия орбит.
- if Showorb then // Включение таймера №2. Изменение надписи на кнопке при показе/скрытии орбит.
- begin
- tmr2.Enabled:=true;
- btn2.Caption:='Скрыть орбиту';
- end
- else
- begin
- tmr2.Enabled:=True;
- btn2.caption:='Показать орбиту';
- end;
- end;
- procedure TForm1.tmr2Timer(Sender: TObject); //Таймер для мнгновенного обновления канвы и последующего отключения таймера (5ms).
- begin
- img1.Visible:=True;
- img1.Visible:=False;
- tmr2.Enabled:=false;
- end;
- procedure TForm1.btn3Click(Sender: TObject); //Изменение надписи на кнопке при показе/скрытии звёзд. Включение таймера №2.
- begin
- if Zvezdi=False then
- begin
- Zvezdi:=True;
- btn3.Caption:='Скрыть звёзды';
- end
- else
- begin
- Zvezdi:=False;
- btn3.Caption:='Показать звёзды';
- end;
- tmr2.Enabled:=True;
- end;
- procedure TForm1.btn4Click(Sender: TObject);
- begin
- Close;
- end;
- begin //Блок инициализации.
- CreateStars();
- Zvezdi:=False;
- Showorb:=false;
- PUSK:=False;
- alfa5:=0;
- alfa6:=0;
- alfa4:=0;
- alfa3:=0;
- alfa2:=0;
- R5:=70;
- R2:=380;
- R3:=40;
- R4:=260;
- R6:=150;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement