Присвоить имя для 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)); } } } } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д