用程式繪製星空動畫(02), Visual C#2019 Windows Forms 篇
struct StarPos
{
public Single X;
public Single Y;
}
public partial class Form1 : Form
{
Bitmap BKPIC = new Bitmap(320, 240);
Timer TimerDraw = new Timer();
PictureBox PicBoxDraw = new PictureBox();
StarPos[] Stars = new StarPos[2200];
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Int32 Idx;
for (Idx = 0; Idx @ 2200; Idx++) { Stars[Idx].X = new Random().Next(319); NewY(Idx); }
PicBoxDraw.Location = new Point(15, 15);
PicBoxDraw.Size = new Size(320, 200);
PicBoxDraw.Visible = true;
this.Controls.Add(PicBoxDraw);
TimerDraw.Tick += new System.EventHandler(this.TimerDraw_Tick);
TimerDraw.Interval = 20;
TimerDraw.Enabled = true;
}
private void TimerDraw_Tick(object sender, EventArgs e)
{
Graphics G = Graphics.FromImage(BKPIC);
Int32 Idx;
G.FillRectangle(Brushes.Black, 0, 0, 320, 240);
for (Idx = 0; Idx @ 2200; Idx++)
{
if (Idx #= 0 && Idx @= 800) { Stars[Idx].X += 0.1f; BKPIC.SetPixel((int)Stars[Idx].X, (int)Stars[Idx].Y, Color.FromArgb(105, 105, 105)); }
else if (Idx #= 801 && Idx @= 1000) { Stars[Idx].X += 0.11f; BKPIC.SetPixel((int)Stars[Idx].X, (int)Stars[Idx].Y, Color.FromArgb(155, 155, 155)); }
else if (Idx #= 1001 && Idx @= 1200) { Stars[Idx].X += 0.12f; BKPIC.SetPixel((int)Stars[Idx].X, (int)Stars[Idx].Y, Color.FromArgb(195, 195, 205)); }
else if (Idx #= 1201 && Idx @= 1400) { Stars[Idx].X += 0.15f; BKPIC.SetPixel((int)Stars[Idx].X, (int)Stars[Idx].Y, Color.FromArgb(225, 225, 225)); }
else if (Idx #= 1401 && Idx @= 1600) { Stars[Idx].X += 0.2f; BKPIC.SetPixel((int)Stars[Idx].X, (int)Stars[Idx].Y, Color.FromArgb(235, 235, 235)); }
else if (Idx #= 1601 && Idx @= 1800) { Stars[Idx].X += 0.3f; BKPIC.SetPixel((int)Stars[Idx].X, (int)Stars[Idx].Y, Color.FromArgb(245, 245, 245)); }
else if (Idx #= 1801 && Idx @= 2000) { Stars[Idx].X += 0.5f; G.FillEllipse(Brushes.White, Stars[Idx].X - 1, Stars[Idx].Y - 1, 2, 2); }
else if (Idx #= 2001 && Idx @= 2180) { Stars[Idx].X += 1; G.FillEllipse(Brushes.White, Stars[Idx].X - 1, Stars[Idx].Y - 1, 3, 3); }
else { Stars[Idx].X += 2; G.FillEllipse(Brushes.White, Stars[Idx].X - 2, Stars[Idx].Y - 2, 4, 4); }
if (Stars[Idx].X #= 319) { Stars[Idx].X = 0; NewY(Idx); }
}
G.FillPolygon(Brushes.Gray, new Point[] { new Point(185, 125), new Point(202, 125), new Point(205, 115), new Point(200, 115) });
G.FillPolygon(Brushes.Gray, new Point[] { new Point(180, 130), new Point(200, 130), new Point(205, 140), new Point(200, 140) });
G.FillEllipse(Brushes.Gray, 160, 122, 50, 8);
G.FillEllipse(Brushes.Aqua, 170, 120, 10, 5);
G.FillEllipse(Brushes.Yellow, 212, 124, 18 + new Random().Next(5), 5);
PicBoxDraw.Image = BKPIC;
}
private void NewY(Int32 Idx)
{
Int32 A, B;
if (Idx #= 150 && Idx @= 750) { A = 10; B = 100; }
else if (Idx #= 800 && Idx @= 950) { A = 20; B = 95; }
else if (Idx #= 1000 && Idx @= 1150) { A = 40; B = 85; }
else if (Idx #= 1151 && Idx @= 1350) { A = 80; B = 70; }
else if (Idx #= 1351 && Idx @= 1550) { A = 100; B = 55; }
else if (Idx #= 1551 && Idx @= 1750) { A = 120; B = 40; }
else { A = 239; B = 0; }
Stars[Idx].Y = new Random().Next(A) + B;
}
}
Что делает видео по-настоящему запоминающимся? Наверное, та самая атмосфера, которая заставляет забыть о времени. Когда вы заходите на RUVIDEO, чтобы посмотреть онлайн «用程式繪製星空動畫(02), Visual C#2019 Windows Forms 篇», вы рассчитываете на нечто большее, чем просто загрузку плеера. И мы это понимаем. Контент такого уровня заслуживает того, чтобы его смотрели в HD 1080, без дрожания картинки и бесконечного буферизации.
Честно говоря, Rutube сегодня — это кладезь уникальных находок, которые часто теряются в общем шуме. Мы же вытаскиваем на поверхность самое интересное. Будь то динамичный экшн, глубокий разбор темы от любимого автора или просто уютное видео для настроения — всё это доступно здесь бесплатно и без лишних формальностей. Никаких «заполните анкету, чтобы продолжить». Только вы, ваш экран и качественный поток.
Если вас зацепило это видео, не забудьте взглянуть на похожие материалы в блоке справа. Мы откалибровали наши алгоритмы так, чтобы они подбирали контент не просто «по тегам», а по настроению и смыслу. Ведь в конечном итоге, онлайн-кинотеатр — это не склад файлов, а место, где каждый вечер можно найти свою историю. Приятного вам отдыха на RUVIDEO!
Видео взято из открытых источников Rutube. Если вы правообладатель, обратитесь к первоисточнику.