Сквозь вселенную
Программа строит изображение звездного неба, сквозь которое мчится звездолет.
Расположите на форме два компонента 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.
Примечание: Эффект хорошо смотрится при раскрытии окна на весь экран.
СКАЧАТЬ ПРОГРАММУ | Размер |
---|---|
Демо-урок сквозь вселенную (452) | 387 кб |