Я знаю, что это, вероятно, действительно неэффективно, но я использую 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;
}