Сквозь вселенную

Сквозь вселенную

Программа строит изображение звездного неба, сквозь которое мчится звездолет.

Расположите на форме два компонента Timer1: TTimer и PaintBox1: TPaintBox с вкладки System. Выставьте начальные значения в инспекторе объектов (Object inspector)

Form1
 Color: clBlack;
 
PaintBox1
 Align: alClient
 
Timer1
 Enabled: false
 Interval: 30

Перейдите в инспекторе объектов на вкладку событий (events) и для формы на событие создания формы (OnCreate) задайте название процедуры. Лучше это сделать двойныым щелчком. Автоматически будет создана процедура procedure TForm1.FormCreate(Sender: TObject). Впишите в нее следующий код:

procedure TForm1.FormCreate(Sender: TObject);
Var
  i: Integer;
begin
  NumStars := 100; //   Количество звезд, не больше 1000
  // Начальные координаты звезд, инициализация
  for i:=1 to NumStars  do begin
    Star[i].X :=  Form1.ClientWidth div 2 + Random(20) - 10;
    Star[i].Y :=  Form1.ClientHeight div 2 + Random(20) - 10;
    SizeStar[i] := Random(3);
    D[i].X := Random(10)-5;
    D[i].Y := Random(10)-5;
  end;
  Timer1.Enabled := true; // Включение таймера
end;

Так как в программе используется массивы координат, смещений, размеров и количество звезд в отдельных переменных, то необходимо их объявить в разделе программы var.

var
  Form1: TForm1;
  NumStars: Integer;  // Количество звезд, не больше 1000
  Star: Array [1..1000] of TPoint;  // Координаты снежинок
  D   : Array [1..1000] of TPoint;  // Смещение звезд по X и Y
  SizeStar : Array [1..1000] of Byte; // Рахмер звезд

Теперь для компонента Timer1 на событие OnTimer создайте следующую процедуру

procedure TForm1.Timer1Timer(Sender: TObject);
Var
  i, j: Integer;
begin
 // Выполняем изиенение для 50 звезд одновременно
 for j:=1 to 50 do begin
  i := Random(NumStars) + 1; // Выбираем одну любую звезду
  // Стираем ее цветом фона
  PaintBox1.Canvas.Brush.Color := clBlack;
  PaintBox1.Canvas.Pen.Color := clBlack;
  PaintBox1.Canvas.Rectangle(Star[i].X-1, Star[i].Y-1,
                             Star[i].X+2, Star[i].Y+2);
  // Задаем ее новое положение
  Star[i].X := Star[i].X + D[i].X;
  Star[i].Y := Star[i].Y + D[i].Y;
  // Если достинут конец формы, то начинаем из центра формы
  if (Star[i].Y >= Form1.ClientHeight) or (Star[i].Y <=0) or
     (Star[i].X >= Form1.ClientWidth) or (Star[i].X <=0) then
   begin
    Star[i].X :=  Form1.ClientWidth div 2 + Random(20) - 10;
    Star[i].Y :=  Form1.ClientHeight div 2 + Random(20) - 10;
   end;
  // Рисуем звезду
  PaintBox1.Canvas.Brush.Color := clYellow;
  PaintBox1.Canvas.Pen.Color := clYellow;
  PaintBox1.Canvas.Ellipse(Star[i].X-1, Star[i].Y-1, 
       Star[i].X+SizeStar[i], Star[i].Y+SizeStar[i]);
 end;
end;

Запустите программу. Run.

Примечание: Эффект хорошо смотрится при раскрытии окна на весь экран.

СКАЧАТЬ ПРОГРАММУРазмер
Демо-урок сквозь вселенную (413)387 кб

Последние комментарии

  • Sorry, if not around the topic. I had a bit embarrassment. I randomly lost my essay and I urgently have to have to write a new one. I can not write with my own strength, so I wanted to apply for the essay writing service for revenuel. Located a few web content about this, but I don't know if you...
  • uknk chaturbate http://cumpee.win/post/lostinside-chaturbate-record Let's see what I can find in my nose. I put my pinkie in and I start digging as far as I can.Video is HD 1080pVideo contains: NOSE FETISH leraimholly webcam http://www.litecum.win/post/nikkicarr72-chaturbate-record-mp4 An...
  • pharmacy without dr prescriptions canadian pharmacy online pharmacy without a prescription generic viagra most reliable canadian pharmacies what is metoprolol used for

Счетчики