Присвоить имя для 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));
                        }
                    }
                }
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.556 из 5
Похожие ответы