Программа "Вперед, в галактику!"
Появилась задача: создать программу, имитирующую движение вперед, в звездную систему, внутрь галактики. Эту задачу необходимо немного переиначить, чтобы решить: имитировать наше движение вперед будут звезды, которые и будут двигаться. Программу будем создавать в Microsoft Visual C#. Проект - приложение Windows Forms. Итак, ниже код программы, а затем минимально необходимые пояснения к нему.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace stars { public partial class Form1 : Form { Panel panel; Button startBtn; Timer timer; static int n = 80; Rectangle[] rect = new Rectangle[n]; Graphics graphics; int[] x = new int[n]; int[] y = new int[n]; int[] dx = new int[n]; int[] dy = new int[n]; Random rnd=new Random(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ClientSize = new System.Drawing.Size(600, 400); panel = new Panel(); panel.Size = new Size(400, 400); Controls.Add(panel); graphics = panel.CreateGraphics(); startBtn = new Button(); startBtn.AutoSize = true; startBtn.Location = new Point(405, 5); startBtn.Text = "start"; startBtn.Click += startBtn_Click; Controls.Add(startBtn); for (int i = 0; i < n; i++ ) { x[i] = rnd.Next(10, 390); if (x[i] >= 200) dx[i] = 2; else dx[i] = -2; y[i] = rnd.Next(10, 390); if (y[i] >= 200) dy[i] = 2; else dy[i] = -2; rect[i] = new Rectangle(x[i], y[i], 1, 1); } timer = new Timer(); timer.Tick += timer_Tick; } void startBtn_Click(object sender, EventArgs e) { timer.Enabled = !timer.Enabled; if (startBtn.Text=="start") startBtn.Text = "stop"; else startBtn.Text = "start"; } void timer_Tick(object sender, EventArgs e) { graphics.Clear(Color.Black); Move(); for (int i = 0; i < n; i++) { graphics.DrawRectangle(new Pen(Color.White), rect[i]); } } void Move() { for (int i = 0; i < n; i++) { x[i] = x[i] + dx[i]; y[i] = y[i] + dy[i]; if ((x[i] < 400) && (x[i] > 0) && (y[i] < 400) && (y[i] > 0)) { rect[i].Offset(dx[i], dy[i]); } else { if (x[i] <= 0) { rect[i].Offset(200, dy[i]); x[i] = x[i] + 200; } if (y[i] <= 0) { rect[i].Offset(dx[i],200); y[i] = y[i] + 200; } if (x[i] >= 400) { rect[i].Offset(-200, dy[i]); x[i] = x[i] - 200; } if (y[i] >= 400) { y[i] = y[i] - 200; rect[i].Offset(dx[i], -200); } } } } } }Массивы x и y хранят себе начальные координаты звезд; dx и dy - это смещения по осям для каждой звезды. Высчитываются они относительно центра: координата звезды (определяемая случайным образом) больше 200 - тогда +2, меньше - тогда -2. По нажатию кнопки "start" активируем таймер; в этом же методе проверяем текст на кнопке и меняем его - со старт на стоп и наоборот.
Каждая звезда - это на самом деле у нас не звезда, а прямоугольник; рисуется он в строке. За передвижение звезд отвечает метод Move; в нем прямоугольник перерисовывается с помощью Offset. Одновременно в Move мы пересчитываем координаты звезды и, если она вышла за пределы окна, то возвращаем её в центр. Смотрим результат:
Вот так относительно несложно можно сделать имитацию движения вперед в звездном небе. Разумеется, программу можно усовершенствовать и дополнять: делать звезды увеличивающимися, изменять их скорость и так далее - но основа уже заложена. Если вам требуется помощь по C#, необходима программа или что-то еще, то вы можете написать на почту up777up@yandex.ru - я вам помогу за небольшую плату.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.