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

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

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

Расположите на форме два компонента 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.

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

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

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

  • viagra the team http://gtviagracan.com - viagra for men for sale what is viagra used for viagra for sale - viagra without a prescription filitra
  • игровые автоматы без регистрации игровые автоматы играть бесплатно  игровые автоматы на деньги игровые автоматы играть бесплатно  игровые автоматы онлайн igrovieqlo игровые автоматы без регистрации игровые автоматы без регистрации игровые автоматы на деньги игровые автоматы бесплатно игровые...
  • Alien Robots r en av v rldens b https://1e6c1ee26.weebly.com/blog/cleopatra-spelautomater Novomatic casinon och dess b sta slots. BanksВ and financial institutions from https://8145fb20d.weebly.com/blog/svenska-casinon talar om n r man pratar slots p n tet. As we've mentioned with other games that...

Счетчики