Suren97 Ответов: 2

C# как проверить, являются ли шахматные фигуры контактными?


например,у меня есть только две фигуры ' Paw и слон,мне нужно проверить, что две фигуры расположены на одной линии, это означает, что слон может ударить пешку, а затем, когда я нажимаю на кнопку Check, мне нужно, чтобы все диагональные ящики, доступные для слона, были окрашены в красный цвет.

Что я уже пробовал:

private void Form1_Paint(object sender, PaintEventArgs e)
        {
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    if((i+j) % 2 != 0)
                    gf.FillRectangle(Brushes.Black, (j + 1) * 50, (i+1)*50, 50, 50);
                }
                Label lb = new Label();
                lb.Text = Convert.ToChar('A' + i).ToString();
                lb.Font = new Font("Tahoma", 18);
                lb.Location = new Point(50 * (i + 1), 450);
                lb.Width = 50;
                lb.Height = 26;
                this.Controls.Add(lb);
            }
            for (int i = 8; i > 0; i--)
            {
                Label lab = new Label();
                lab.Text = i.ToString();
                lab.Font = new Font("Tahoma", 18);
                lab.Location = new Point(0, 50 *(9- i));
                lab.Width = 50;
                lab.Height = 26;
                this.Controls.Add(lab);
            }
        }


 private void Create_Click_1(object sender, EventArgs e)
        {
           
            if (comboBox1.SelectedItem == "bishop")
            {
                string position = textBox1.Text;
                string first_letter = position[0].ToString().ToUpper();
                int x = (int)(first_letter[0] - 64);
                int y = int.Parse(position[1].ToString());
                gf.DrawImage(Properties.Resources.bishop, x * 50, (8 - y + 1) * 50, 50, 50);
            }
            else if(comboBox1.SelectedItem == "pawn")
            {
                string position = textBox1.Text;
                string first_letter = position[0].ToString().ToUpper();
                int x = (int)(first_letter[0] - 64);
                int y = int.Parse(position[1].ToString());
                gf.DrawImage(Properties.Resources.pawn, x * 50, (8 - y + 1) * 50, 40, 50);
            }
        }


 private void button2_Click(object sender, EventArgs e)
        {
           //This is my Check button,How can i check it? what should i write here?
        }

Richard MacCutchan

Вы все еще делаете это неправильно. Узнайте, как создавать правильные классы и использовать наследование и общие методы. Пока вы не научитесь писать правильный код C#, вы не добьетесь никакого прогресса в этом.

2 Ответов

Рейтинг:
2

Maciej Los

Все неправильно! Ты говорил об этом со мной. Ричард Маккатчан[^], особенно здесь: C# простая шахматная ошибка[^].

Вывод из приведенного выше обсуждения таков: вы должны работать с данными, а не с их строковым представлением!

Я бы настоятельно рекомендовал взглянуть на "рабочий пример": Шахматная программа на языке Си#[^Вот как вы должны это сделать.

Другие примеры вы найдете на сайте: База знаний CodeProject[^]


Рейтинг:
0

OriginalGriff

Мы не можем просто решить все проблемы за вас!
Вы еще не появились, чтобы реализовать доску, которую вам нужно сделать для того, чтобы выполнить эту задачу, а также последнюю: C# простая шахматная ошибка[^]

Я настоятельно рекомендую вам подойти к этому, создав абстрактный класс Piece, который имеет местоположение, а также "боковую" (черную или белую) и класс Board, который инкапсулирует 2D-массив экземпляров Piece.
Затем объявите свой класс пешек как фигуру, ладью как фигуру и так далее.
Затем вы можете начать делегировать задачи классам.
Добавив абстрактный метод ShowMoves в класс Piece и передав ему доску, вы можете получить фактическую фигуру для генерации законных ходов из ее текущей позиции - и использовать ее для создания "карты" того, где рисовать красные квадраты.
Аналогично, вы делегируете задачу рисования на доску - передавая ей графический контекст - и она делегирует фактическое рисование фрагмента классу Piece с помощью другого абстрактного метода.

То, что вы, по - видимому, делаете в данный момент,-это прыгаете в код, фактически не планируя то, что вам нужно, и это не создает хорошего, надежного приложения в конце концов, это создает трудный для поддержания беспорядок, который пронизан ошибками.


Maciej Los

5ed!