public override bool[,] PossibleMovements() { bool[,] vs = new bool[Board.Lines, Board.Columns]; Position position = new Position(0, 0); //n position.DefinePosition(Position.Line - 1, Position.Column); if (Board.ValidPosition(position) && CanMove(position)) { vs[position.Line, position.Column] = true; } //ne position.DefinePosition(Position.Line - 1, Position.Column + 1); if (Board.ValidPosition(position) && CanMove(position)) { vs[position.Line, position.Column] = true; } //e position.DefinePosition(Position.Line, Position.Column + 1); if (Board.ValidPosition(position) && CanMove(position)) { vs[position.Line, position.Column] = true; } //se position.DefinePosition(Position.Line + 1, Position.Column + 1); if (Board.ValidPosition(position) && CanMove(position)) { vs[position.Line, position.Column] = true; } //s position.DefinePosition(Position.Line + 1, Position.Column); if (Board.ValidPosition(position) && CanMove(position)) { vs[position.Line, position.Column] = true; } //sw position.DefinePosition(Position.Line + 1, Position.Column - 1); if (Board.ValidPosition(position) && CanMove(position)) { vs[position.Line, position.Column] = true; } //w position.DefinePosition(Position.Line, Position.Column - 1); if (Board.ValidPosition(position) && CanMove(position)) { vs[position.Line, position.Column] = true; } //nw position.DefinePosition(Position.Line - 1, Position.Column - 1); if (Board.ValidPosition(position) && CanMove(position)) { vs[position.Line, position.Column] = true; } //#special movement Short Castling if (MovesAmount == 0 && !Match.Check) { Position RookPosition = new Position(Position.Line, Position.Column + 3); if (IsCastlingRook(RookPosition)) { Position p1 = new Position(Position.Line, Position.Column + 1); Position p2 = new Position(Position.Line, Position.Column + 2); if (Board.Piece(p1) == null && Board.Piece(p2) == null) { vs[Position.Line, Position.Column + 2] = true; } } } //#special movement Long Castling if (MovesAmount == 0 && !Match.Check) { Position RookPosition = new Position(Position.Line, Position.Column - 4); if (IsCastlingRook(RookPosition)) { Position p1 = new Position(Position.Line, Position.Column - 1); Position p2 = new Position(Position.Line, Position.Column - 2); Position p3 = new Position(Position.Line, Position.Column - 3); if (Board.Piece(p1) == null && Board.Piece(p2) == null && Board.Piece(p3) == null) { vs[Position.Line, Position.Column - 2] = true; } } } return(vs); }