Программа "Вперед, в галактику!"
Появилась задача: создать программу, имитирующую движение вперед, в звездную систему, внутрь галактики. Эту задачу необходимо немного переиначить, чтобы решить: имитировать наше движение вперед будут звезды, которые и будут двигаться. Программу будем создавать в 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Программы на заказ
Отзывы
Контакты