lameeszam Ответов: 2

Как можно изменить цвет линии при нажатии кнопки


0


i work in visual studio on dots & boxes game, i make an array of dots in 4 rows and 4 column, and i draw lines between each two points, now i want when player1 click on one line, specific line change color to red, player2 click on other line, it change color to black.


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

private void panel1_Paint(object sender, PaintEventArgs e)
{
    Pen mypen = new Pen(Color.Blue, 2);

    e.Graphics.FillRectangle(Brushes.Green, 0, 0, 250, 250);
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            e.Graphics.FillEllipse(Brushes.Black, 32 + 48 * j, 32 + 48 * i, 10, 10);
        }
    }
    for (int i = 0; i <= 3; i++)
    {
        for (int j = 0; j <= 3; j++)
        {

            e.Graphics.DrawLine(mypen, 37 + 48 * j, 37 + 48 * i, 37 + 48 * j, 37 + 48 * (i + 1));
            e.Graphics.DrawLine(mypen, 37 + 48 * j, 37 + 48 * i, 37 + 48 * (j + 1), 37 + 48 * i);

        }
    }
}

2 Ответов

Рейтинг:
2

Richard MacCutchan

Когда происходит щелчок, вам нужно определить, какая линия должна быть перекрашена в другой цвет, и как-то отметить это. Затем вы вызываете Invalidate, чтобы принудительно перекрасить панель (см. Контроль.Метод Обновления (System.Окна.Формы) | Microsoft Docs[^]). Код перекраски должен проверять, какую линию перекрасить в другой цвет.


Рейтинг:
0

OriginalGriff

Прежде всего, вам нужно изменить то, как вы делаете вещи.
Вам нужно сохранить "текущий статус" игры, и перечисление - это хорошее начало:

public enum PlayLineStatus
   {
   Unclicked,
   PlayerOne,
   PlayerTwo,
   }
Затем создайте массив (или другую коллекцию) из них, чтобы представить текущую позицию игры. Каждый раз, когда игрок нажимает на линию, вы находите элемент массива, с которым он связан, и проверяете его статус: если он "не щелкнул", то он получает его, и вы соответствующим образом обновляете массив. Если это не так, он не может щелкнуть там, поэтому игнорируйте его.

В вашем обработчике краски вы проходите по массиву, рисуя каждую линию в соответствующем цвете в соответствии со статусом:
Color toPaint;
switch (statusArrayElement)
   {
   default: thrown new ArgumentException("Unknown play status: " + statusArrayElement.ToString());
   case PlayLineStatus.Unclicked:
      toPaint = Color.Green;
      break;
   case PlayLineStatus.PlayerOne:
      toPaint = Color.Red;
      break;
   case PlayLineStatus.PlayerTwo:
      toPaint = Color.Black;
      break;
   }


phil.o

OriginalGriff писал:

thrown new ArgumentException("Unknown play status: " + statusArrayElement.ToString());
Прогностическое кодирование? :)

OriginalGriff

Обороняться!
Я потерял счет количеству раз, когда опция была добавлена в перечисление, и не каждое использование обновляется... :смеяться:

lameeszam

Я новичок, можно ли уточнить больше?

OriginalGriff

Какой кусочек? :смеяться:

Какую часть(ы) вы понимаете? Я не пытаюсь быть грубым здесь - я получаю только то, что вы печатаете, поэтому я понятия не имею о вашем уровне мастерства или способностях ...