public ReturnPosition ( |
||
figure | ||
return | int>.Tuple |
private void PassedPawn(IReadOnlyList<Move> moves, Board board, Figure pawn) { int rowFrom; int rowTo; int rows; var pawnX = board.ReturnPosition(pawn).Item1; var pawnY = board.ReturnPosition(pawn).Item2; switch (pawn.Side) { case Side.BLACK: rows = 4; rowFrom = rows - 2; rowTo = rows - 1; break; case Side.WHITE: rows = 5; rowFrom = rows + 2; rowTo = rows + 1; break; default: return; } var cell = new List<string>(); if (pawnX != 'a') cell.Add(((char)(pawnX - 1)).ToString(CultureInfo.InvariantCulture) + rows); if (pawnX != 'h') cell.Add(((char)(pawnX + 1)).ToString(CultureInfo.InvariantCulture) + rows); foreach (var c in cell) { if (board[c].GetType() == typeof(FigurePawn) && board[c].Side != pawn.Side && moves[moves.Count - 1].To == c && moves[moves.Count - 1].From == c[0].ToString(CultureInfo.InvariantCulture) + rowFrom && pawnY == rows) Attackers[c[0] - 'a', rowTo - 1].Add(pawn); } }
private void Castling(List<Move> moves, Board board, Figure king, Figure rook) { int rows = 0; if (king.Side == Side.WHITE) rows = 1; else if (king.Side == Side.BLACK) rows = 8; char rookX = board.ReturnPosition(rook).Item1; int rookY = board.ReturnPosition(rook).Item2; char kingX = board.ReturnPosition(king).Item1; int kingY = board.ReturnPosition(king).Item2; if (moves.Count != 0) foreach (Move move in moves) { if (!move.From.Contains(rookX + rookY.ToString(CultureInfo.InvariantCulture))) { foreach (Move move2 in moves) if (!move2.From.Contains(kingX + kingY.ToString(CultureInfo.InvariantCulture))) { CastlingFunc(board, king, rook, rows, rookX); } else return; } else return; } else { CastlingFunc(board, king, rook, rows, rookX); } }