Присвоить имя для Rectangle - C#
Формулировка задачи:
Добрый вечер!
Пожалуйста, подскажите, как мне, одновременно с закраской ректанглов черным цветом, присваивать им что-то, что позволяло бы отличать их впоследствии от незакрашенных. Пытался просто присваивать имя, но такого поля для Rectangle не предусмотрено...
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace stajaPole
{
public partial class Form1 : Form
{
//Переменные для сетки-полигона
int maxWidthHeight = 500;
int numOfJach = 100;
int razmerJach = 50;
int enterJach;
public Rectangle[] rectangle;
int numOfClicks = 0;
//Переменные для координат курсора
int cursorX, cursorY;
//Переменные для рисования лабиринта
Graphics g;
Pen blackPen = new Pen(Color.Black, 1);
SolidBrush blackBrush = new SolidBrush(Color.Black);
//Переменные для метода потенциальных полей
int sharNumber, preSharNumber;
int sharCoordX, sharCoordY;
int totalSharNumber = 6;
public PictureBox[] SharPB;
double sharX, sharY, sharDist;
double mouseX, mouseY, mouseDist;
int sharSpeed = 3;
public Form1()
{
InitializeComponent();
}
//Рисование сетки-полигона
private void Form1_Load(object sender, EventArgs e)
{
g = pictureBox1.CreateGraphics();
int jachNum = 0;
rectangle = new Rectangle[numOfJach];
for (int x = 0; x < maxWidthHeight; x += razmerJach)
{
for (int y = 0; y < maxWidthHeight; y += razmerJach)
{
Rectangle r = new Rectangle(x, y, razmerJach, razmerJach);
rectangle[jachNum] = r;
jachNum++;
}
}
for (int i = 0; i < numOfJach; i++)
{
g.DrawRectangle(blackPen, rectangle[i]);
}
}
//Рисование лабиринта
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
//Положение курсора по X
cursorX = e.X;
//Положение курсора по Y
cursorY = e.Y;
if (e.Button == MouseButtons.Left)
{
for (int i = 0; i < numOfJach; i++)
{
if ((cursorY >= rectangle[i].Location.Y) &&
(cursorY <= rectangle[i].Location.Y + 50) &&
(cursorX >= rectangle[i].Location.X) &&
(cursorX <= rectangle[i].Location.X + 50))
{
g.FillRectangle(blackBrush, rectangle[i]);
numOfClicks++;
if (numOfClicks == 1)
{
enterJach = i;
}
}
}
}
}
//Рисование дронов и запуск движения
private void пускToolStripMenuItem_Click(object sender, EventArgs e)
{
SharPB = new PictureBox[totalSharNumber];
for (sharNumber = 0; sharNumber < totalSharNumber; sharNumber++)
{
sharCoordX = rectangle[enterJach].X + 20;
sharCoordY = rectangle[enterJach].Y + 20;
SharPB[sharNumber] = new PictureBox();
SharPB[sharNumber].Location = new Point(sharCoordX, sharCoordY);
SharPB[sharNumber].Name = "Shar" + sharNumber.ToString();
SharPB[sharNumber].Size = new Size(10, 10);
SharPB[sharNumber].BackColor = Color.Blue;
SharPB[sharNumber].Visible = true;
Controls.Add(SharPB[sharNumber]);
Controls.SetChildIndex(SharPB[sharNumber], 0);
}
Dogon.Start();
}
//Движение дронов с помощью метода потенциальных полей
public void Dogon_Tick(object sender, EventArgs e)
{
for (sharNumber = 0; sharNumber < totalSharNumber; sharNumber++)
{
for (preSharNumber = 0; preSharNumber < totalSharNumber; preSharNumber++)
{
//Если вычли единицу из 0-го шара - перескакиваем на последний шар
if (preSharNumber < 0)
{
preSharNumber = totalSharNumber - 1;
}
//Вычисление катета X между серединами 2-х шаров
sharX = (SharPB[preSharNumber].Location.X + 5) - (SharPB[sharNumber].Location.X + 5);
//Вычисление катета Y между серединами 2-х шаров
sharY = (SharPB[preSharNumber].Location.Y + 5) - (SharPB[sharNumber].Location.Y + 5);
//Вычисление гипотенузы между серединами 2-х шаров
sharDist = Math.Sqrt(Math.Pow(sharX, 2) + Math.Pow(sharY, 2));
//Чтобы шары не пересекались даже в случае контакта диагоналями, расстояние между ними должно быть равно их гипотенузе, т.е. sqrt(100+100)=14
if (sharDist != 0 && sharDist < 15)
{
//Косинус, помноженный на скорость
sharX = sharX / sharDist * sharSpeed;
//Синус, помноженный на скорость
sharY = sharY / sharDist * sharSpeed;
SharPB[sharNumber].Location = new Point(SharPB[sharNumber].Location.X - Convert.ToInt32(sharX),
SharPB[sharNumber].Location.Y - Convert.ToInt32(sharY));
}
}
//Вычисление катета X между курсором и серединой шара
mouseX = cursorX - (SharPB[sharNumber].Location.X + 5);
//Вычисление катета Y между курсором и серединой шара
mouseY = cursorY - (SharPB[sharNumber].Location.Y + 5);
//Вычисление гипотенузы между курсором и серединой шара
mouseDist = Math.Sqrt(Math.Pow(mouseX, 2) + Math.Pow(mouseY, 2));
if (mouseDist > 25)
{
//Косинус, помноженный на скорость
mouseX = mouseX / mouseDist * sharSpeed;
//Синус, помноженный на скорость
mouseY = mouseY / mouseDist * sharSpeed;
SharPB[sharNumber].Location = new Point(SharPB[sharNumber].Location.X + Convert.ToInt32(mouseX),
SharPB[sharNumber].Location.Y + Convert.ToInt32(mouseY));
}
}
}
}
}Решение задачи: «Присвоить имя для Rectangle»
textual
Листинг программы
using System;
using System.Drawing;
using System.Windows.Forms;
namespace stajaPole
{
public partial class Form1 : Form
{
//Переменные для сетки-полигона
int maxWidthHeight = 500;
int numOfJach = 100;
int razmerJach = 50;
int enterJach = 0;
PictureBox[] rectangle;
int numOfClicks = 0;
//Переменные для координат курсора
int cursorX, cursorY;
//Переменные для метода потенциальных полей
int sharNumber, preSharNumber;
int sharCoordX, sharCoordY;
int totalSharNumber = 6;
int sharSpeed = 3;
PictureBox[] SharPB;
public Form1()
{
InitializeComponent();
WindowState = FormWindowState.Maximized;
}
//Рисование сетки-полигона
private void Form1_Load(object sender, EventArgs e)
{
int jachNum = 0;
rectangle = new PictureBox[numOfJach];
for (int x = 0; x < maxWidthHeight; x += razmerJach)
{
for (int y = 0; y < maxWidthHeight; y += razmerJach)
{
rectangle[jachNum] = new PictureBox();
rectangle[jachNum].Location = new Point(x, y);
rectangle[jachNum].Name = "ClozedWay";
rectangle[jachNum].Size = new Size(razmerJach, razmerJach);
rectangle[jachNum].BackColor = Color.White;
rectangle[jachNum].Visible = true;
rectangle[jachNum].MouseMove += new MouseEventHandler(this.Form1_MouseMove);
Controls.Add(rectangle[jachNum]);
Controls.SetChildIndex(rectangle[jachNum], 0);
jachNum++;
}
}
}
//Рисование лабиринта
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
//Положение курсора по X
cursorX = Cursor.Position.X;
//Положение курсора по Y
cursorY = Cursor.Position.Y;
if (e.Button == MouseButtons.Left)
{
for (int i = 0; i < numOfJach; i++)
{
if ((cursorY >= rectangle[i].Location.Y) &&
(cursorY <= rectangle[i].Location.Y + 50) &&
(cursorX >= rectangle[i].Location.X) &&
(cursorX <= rectangle[i].Location.X + 50))
{
rectangle[i].BackColor = Color.Black;
rectangle[i].Name = "OpenedWay";
numOfClicks++;
if (numOfClicks == 1)
{
enterJach = i;
}
}
}
}
}
//Рисование дронов и запуск движения
private void пускToolStripMenuItem_Click(object sender, EventArgs e)
{
SharPB = new PictureBox[totalSharNumber];
for (sharNumber = 0; sharNumber < totalSharNumber; sharNumber++)
{
sharCoordX = rectangle[enterJach].Location.X + 20;
sharCoordY = rectangle[enterJach].Location.Y + 20;
SharPB[sharNumber] = new PictureBox();
SharPB[sharNumber].Location = new Point(sharCoordX, sharCoordY);
SharPB[sharNumber].Name = "Shar" + sharNumber.ToString();
SharPB[sharNumber].Size = new Size(10, 10);
SharPB[sharNumber].BackColor = Color.Blue;
SharPB[sharNumber].Visible = true;
Controls.Add(SharPB[sharNumber]);
Controls.SetChildIndex(SharPB[sharNumber], 1);
}
Dogon.Start();
}
//Движение дронов с помощью метода потенциальных полей
public void Dogon_Tick(object sender, EventArgs e)
{
for (sharNumber = 0; sharNumber < totalSharNumber; sharNumber++)
{
//Избегаем столкновения с другими шарами
for (preSharNumber = 0; preSharNumber < totalSharNumber; preSharNumber++)
{
//Если вычли единицу из 0-го шара - перескакиваем на последний шар
if (preSharNumber < 0)
{
preSharNumber = totalSharNumber - 1;
}
double sharX, sharY, sharDist;
//Вычисление катета X между серединами 2-х шаров
sharX = (SharPB[preSharNumber].Location.X + 5) - (SharPB[sharNumber].Location.X + 5);
//Вычисление катета Y между серединами 2-х шаров
sharY = (SharPB[preSharNumber].Location.Y + 5) - (SharPB[sharNumber].Location.Y + 5);
//Вычисление гипотенузы между серединами 2-х шаров
sharDist = Math.Sqrt(Math.Pow(sharX, 2) + Math.Pow(sharY, 2));
//Чтобы шары не пересекались даже в случае контакта диагоналями, расстояние между ними должно быть равно их гипотенузе, т.е. sqrt(100+100)=14
if (sharDist != 0 && sharDist < 15)
{
//Косинус, помноженный на скорость
sharX = sharX / sharDist * sharSpeed;
//Синус, помноженный на скорость
sharY = sharY / sharDist * sharSpeed;
SharPB[sharNumber].Location = new Point(SharPB[sharNumber].Location.X - Convert.ToInt32(sharX),
SharPB[sharNumber].Location.Y - Convert.ToInt32(sharY));
}
}
double mouseX, mouseY, mouseDist;
//Вычисление катета X между курсором и серединой шара
mouseX = cursorX - (SharPB[sharNumber].Location.X + 5);
//Вычисление катета Y между курсором и серединой шара
mouseY = cursorY - (SharPB[sharNumber].Location.Y + 5);
//Вычисление гипотенузы между курсором и серединой шара
mouseDist = Math.Sqrt(Math.Pow(mouseX, 2) + Math.Pow(mouseY, 2));
if (mouseDist > 25)
{
//Косинус, помноженный на скорость
mouseX = mouseX / mouseDist * sharSpeed;
//Синус, помноженный на скорость
mouseY = mouseY / mouseDist * sharSpeed;
SharPB[sharNumber].Location = new Point(SharPB[sharNumber].Location.X + Convert.ToInt32(mouseX),
SharPB[sharNumber].Location.Y + Convert.ToInt32(mouseY));
}
//Избегаем столкновения со стенами лабиринта
foreach (Control PictureBox in Controls)
{
if (PictureBox.Name == "ClozedWay")
{
double stenaX, stenaY, stenaDist;
//Вычисление катета X между серединой шара и стены
stenaX = (PictureBox.Location.X + 25) - (SharPB[sharNumber].Location.X + 5);
//Вычисление катета Y между серединой шара и стены
stenaY = (PictureBox.Location.Y + 25) - (SharPB[sharNumber].Location.Y + 5);
//Вычисление гипотенузы между серединой шара и стены
stenaDist = Math.Sqrt(Math.Pow(stenaX, 2) + Math.Pow(stenaY, 2));
//Чтобы шары не пересекались со стеной даже в случае контакта диагоналями, расстояние между ними должно быть равно их гипотенузе, т.е. sqrt(625+625)=35
if (stenaDist != 0 && stenaDist < 60)
{
//Косинус, помноженный на скорость
stenaX = stenaX / stenaDist * sharSpeed;
//Синус, помноженный на скорость
stenaY = stenaY / stenaDist * sharSpeed;
SharPB[sharNumber].Location = new Point(SharPB[sharNumber].Location.X - Convert.ToInt32(stenaX),
SharPB[sharNumber].Location.Y - Convert.ToInt32(stenaY));
}
}
}
}
}
}
}