Как проверить, свободен ли путь для фигуры, чтобы двигаться в шахматах - PullRequest
0 голосов
/ 04 мая 2020

Я знаю, что это, вероятно, действительно неэффективно, но я использую C# уже несколько месяцев, поэтому, пожалуйста, не судите. Я делал текстовую игру в шахматы и понял, что после проверки того, разрешено ли фигуре перемещаться в пространство, игрок выбирает, что он не проверяет, свободен ли путь между пробелами. Если кто-то может помочь, я приложил немного своего кода, чтобы показать, как я заставляю его делать проверки. Я несколько раз пытался заставить его проверить путь, но это не удалось, поэтому я очистил этот раздел, поскольку он не помог. Любые идеи приветствуются, потому что я абсолютно не знаю, как правильно их реализовать

public bool CheckMove(string piece, int row, int col)
        {

            int origrow = 0;
            int origcol = 0;
            int w = gameBoard.GetLength(0);
            int h = gameBoard.GetLength(1);
            /// find the piece
            for (int x = 0; x < w; x++)
            {
                for (int y = 0; y < w; y++)
                {
                    string location = gameBoard[x, y];
                    if (location == piece)
                    {
                        origrow = x;
                        origcol = y;
                        break;
                    }
                }
            }

            /// rook check
            if (piece.Contains("WR") || piece.Contains("BR"))
            {
                int i = 0;
                /// doesn't really matter which is referred to as long as its ++ or --
                /// moving down, up, left or right
                while (i < 8)
                {
                    if (((row - i == origrow && col == origcol) || (row + i == origrow && col == origcol) || (col - i == origcol && row == origrow) || (col + i == origcol && row == origrow))&& gameBoard[row,col] == "   ")
                    {
                        /// location is empty
                        if (gameBoard[row, col] == "   ")
                        {
                            gameBoard[origrow, origcol] = "   ";
                            gameBoard[row, col] = piece;
                            return true;
                        }
                        ///takes a piece
                        else
                        {
                            /// adds the piece in the location to the appropriate pile
                            if (piece.Contains("W") && gameBoard[row, col].Contains("B"))
                            {
                                taken.Add(gameBoard[row, col]);
                            }
                            if (piece.Contains("B") && gameBoard[row, col].Contains("W"))
                            {
                                lost.Add(gameBoard[row, col]);
                            }
                            gameBoard[origrow, origcol] = "   ";
                            gameBoard[row, col] = piece;
                            return true;
                        }
                        break;
                    }
                    i++;
                }
                return false;
            }
            /// bishop check
            if (piece.Contains("WB") || piece.Contains("BB"))
            {
                int i = 0;
                while (i < 8)
                {
                    if (((/*SE*/(row - i == origrow) && (col - i == origcol)) || (/*SW*/(row + i == origrow) && (col - i == origcol)) || (/*NE*/(row - i == origrow) && (col + i == origcol)) || (/*NW*/(row + i == origrow) && (col + i == origcol))))
                    {

                        /// location is empty
                        if (gameBoard[row, col] == "   ")
                        {
                            gameBoard[origrow, origcol] = "   ";
                            gameBoard[row, col] = piece;
                            return true;
                        }
                        ///takes a piece
                        else
                        {
                            /// adds the piece in the location to the appropriate pile
                            if (piece.Contains("W") && gameBoard[row, col].Contains("B"))
                            {
                                taken.Add(gameBoard[row, col]);
                            }
                            if (piece.Contains("B") && gameBoard[row, col].Contains("W"))
                            {
                                lost.Add(gameBoard[row, col]);
                            }
                            gameBoard[origrow, origcol] = "   ";
                            gameBoard[row, col] = piece;
                            return true;
                        }

                    }
                    i++;
                }
                return false;
            }
...