Почему этот случай активизируется, когда он не должен этого делать?
Привет, я очень запутался в этом вопросе. ниже приведен мой код, есть два оператора switch, которые активируются в зависимости от установленных тегов для кнопок. Однако при нажатии кнопки, имеющей метки "белый" и "пешка", корпус для "черного" и "пешка" также активируется поверх предполагаемого корпуса по какой-то неизвестной причине. Но при нажатии на кнопку Черной пешки обратного хода не происходит. Я что-то упустил?
Для контекста: шахматная партия. 64 кнопки в шахматной сетке, считая слева направо, снизу вверх, например) нижний левый угол-Блок1, нижний правый - Блок8, верхний левый блок 57. IsEnable имеет значение false, чтобы указать мне, куда части могут пойти в данный момент. при нажатии на белую пешку плитки выше и ниже становятся отключенными. при нажатии на Черную пешку отключается только нижняя плитка
Что я уже пробовал:
private enum ChessPiece { Pawn = 1, Rook = 2, Knight = 3, Bishop = 4, Queen = 5, King = 6, Black = 16, White = 0, } public void Setpieces() { Block16.Tag = ChessPiece.White | ChessPiece.Pawn; Block15.Tag = ChessPiece.White | ChessPiece.Pawn; Block14.Tag = ChessPiece.White | ChessPiece.Pawn; Block13.Tag = ChessPiece.White | ChessPiece.Pawn; Block12.Tag = ChessPiece.White | ChessPiece.Pawn; Block11.Tag = ChessPiece.White | ChessPiece.Pawn; Block10.Tag = ChessPiece.White | ChessPiece.Pawn; Block9.Tag = ChessPiece.White | ChessPiece.Pawn; Block1.Tag = ChessPiece.White | ChessPiece.Rook; Block2.Tag = ChessPiece.White | ChessPiece.Knight; Block3.Tag = ChessPiece.White | ChessPiece.Bishop; Block4.Tag = ChessPiece.White | ChessPiece.Queen; Block5.Tag = ChessPiece.White | ChessPiece.King; Block6.Tag = ChessPiece.White | ChessPiece.Bishop; Block7.Tag = ChessPiece.White | ChessPiece.Knight; Block8.Tag = ChessPiece.White | ChessPiece.Rook; Block49.Tag = ChessPiece.Black | ChessPiece.Pawn; Block50.Tag = ChessPiece.Black | ChessPiece.Pawn; Block51.Tag = ChessPiece.Black | ChessPiece.Pawn; Block52.Tag = ChessPiece.Black | ChessPiece.Pawn; Block53.Tag = ChessPiece.Black | ChessPiece.Pawn; Block54.Tag = ChessPiece.Black | ChessPiece.Pawn; Block55.Tag = ChessPiece.Black | ChessPiece.Pawn; Block56.Tag = ChessPiece.Black | ChessPiece.Pawn; Block57.Tag = ChessPiece.Black | ChessPiece.Rook; Block58.Tag = ChessPiece.Black | ChessPiece.Knight; Block59.Tag = ChessPiece.Black | ChessPiece.Bishop; Block60.Tag = ChessPiece.Black | ChessPiece.Queen; Block61.Tag = ChessPiece.Black | ChessPiece.King; Block62.Tag = ChessPiece.Black | ChessPiece.Bishop; Block63.Tag = ChessPiece.Black | ChessPiece.Knight; Block64.Tag = ChessPiece.Black | ChessPiece.Rook; } private void ChessBlock_clicked(object sender, RoutedEventArgs e) { List<Button> buttons = new List<Button> { Block1, Block2, Block3, Block4, Block5, Block6, Block7, Block8, Block9, Block10, Block11, Block12, Block13, Block14, Block15, Block16, Block17, Block18, Block19, Block20, Block21, Block22, Block23, Block24, Block25, Block26, Block27, Block28, Block29, Block30, Block31, Block32, Block33, Block34, Block35, Block36, Block37, Block38, Block39, Block40, Block41, Block42, Block43, Block44, Block45, Block46, Block47, Block48, Block49, Block50, Block51, Block52, Block53, Block54, Block55, Block56, Block57, Block58, Block59, Block60, Block61, Block62, Block63, Block64 }; if (sender is Button btn) { ChessPiece piece = (ChessPiece)btn.Tag; switch (piece & ~ChessPiece.White) { case ChessPiece.Pawn: textBox3.Text = "W pawn"; int index = buttons.IndexOf(btn); Button destination = buttons[(index + 8) % buttons.Count]; destination.Tag += "active"; destination.IsEnabled = false; break; // cases for other white pieces } switch (piece & ~ChessPiece.Black) { case ChessPiece.Pawn: textBox3.Text = "B Pawn"; int index = buttons.IndexOf(btn); Button destination = buttons[(index - 8) % buttons.Count]; destination.Tag += "active"; destination.IsEnabled = false; break; // cases for other black pieces } } }
Richard MacCutchan
Вы можете избавиться от всех этих фиксированных меток, используя 2D-массив для платы.