private string CastlingFen(King king, List <Rook> rooks) { string canCstling = ""; if (king != null) { List <int> kingPos = CoordToIj(king.GetPos()); if (!king.HasBeenMoved()) { foreach (Rook rook in rooks) { if (!rook.HasBeenMoved()) { List <int> rookPos = CoordToIj(rook.GetPos()); if (rookPos[1] > kingPos[1]) { if (king.GetColor()) { canCstling += "K"; } else { canCstling += "k"; } } else { if (king.GetColor()) { canCstling += "Q"; } else { canCstling += "q"; } } } } } } char[] charArray = canCstling.ToCharArray(); Array.Reverse(charArray); return(new string(charArray)); }
public List <string> ChecksCastling(bool color) { List <string> castlingMoves = new List <string>(); King kingPiece = null; List <Rook> rookPieces = new List <Rook>(); foreach (Piece piece in piecesList) { if (piece.GetColor() == color) { if (piece.GetType() == typeof(King)) { kingPiece = (King)piece; } else if (piece.GetType() == typeof(Rook)) { rookPieces.Add((Rook)piece); } } } if (!IsChecked(color) && !kingPiece.HasBeenMoved()) { List <int> kingPos = CoordToIj(kingPiece.GetPos()); Dictionary <string, List <string> > ennemyMoves = GetAllMove(!color); bool queenSide = false; foreach (Rook rook in rookPieces) { bool canCastling = true; if (!(rook.HasBeenMoved())) { int i = 0; if (color) { i = GetBoardEdgeLen() - 1; } List <int> rookPos = CoordToIj(rook.GetPos()); int minj, maxj; if (rookPos[1] < kingPos[1]) { minj = rookPos[1] + 1; maxj = kingPos[1] - 1; queenSide = true; } else { minj = kingPos[1] + 1; maxj = rookPos[1] - 1; queenSide = false; } for (int j = minj; j <= maxj; j++) { if (boardTab[i, j] == ' ') { if ((queenSide && j >= kingPos[1] - 2) || (!queenSide)) { foreach (KeyValuePair <string, List <string> > pieceMoves in ennemyMoves) { foreach (string move in pieceMoves.Value) { if (move == IjToCoord(i, j)) { canCastling = false; break; } } if (!canCastling) { break; } } } } else { canCastling = false; break; } if (!canCastling) { break; } } } else { canCastling = false; } if (canCastling) { char[] kingPosStr = kingPiece.GetPos().ToCharArray(); if (queenSide) { kingPosStr[0] -= (char)2; } else { kingPosStr[0] += (char)2; } castlingMoves.Add(new string(kingPosStr)); } } } return(castlingMoves); }