public override bool[,] PossibleMoves() { bool[,] mat = new bool[Board.Lines, Board.Colunms]; Position pos = new Position(0, 0); if (Color == Color.White) { pos.DefineValues(Position.Line - 2, Position.Colunm); if (Board.ValidPosition(pos) && MoveCounter == 0 && freeCell(pos)) { mat[pos.Line, pos.Colunm] = true; } pos.DefineValues(Position.Line - 1, Position.Colunm); if (Board.ValidPosition(pos) && freeCell(pos)) { mat[pos.Line, pos.Colunm] = true; } pos.DefineValues(Position.Line - 1, Position.Colunm - 1); if (Board.ValidPosition(pos) && hasRival(pos)) { mat[pos.Line, pos.Colunm] = true; } } return(mat); }
public override bool[,] PossibleMoviments() { bool[,] mat = new bool[Board.Lines, Board.Columns]; Position pos = new Position(0, 0); // Up pos.DefineValues(Position.Line - 1, Position.Column); while (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; if (Board.UniquePiece(pos) != null && Board.UniquePiece(pos).Color != Color) { break; } pos.Line -= 1; } // Down pos.DefineValues(Position.Line + 1, Position.Column); while (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; if (Board.UniquePiece(pos) != null && Board.UniquePiece(pos).Color != Color) { break; } pos.Line += 1; } // Right pos.DefineValues(Position.Line, Position.Column + 1); while (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; if (Board.UniquePiece(pos) != null && Board.UniquePiece(pos).Color != Color) { break; } pos.Column += 1; } // Left pos.DefineValues(Position.Line, Position.Column - 1); while (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; if (Board.UniquePiece(pos) != null && Board.UniquePiece(pos).Color != Color) { break; } pos.Column -= 1; } return(mat); }
public override bool[,] PossibleMoves() { bool[,] mat = new bool[Board.Lines, Board.Colunms]; Position pos = new Position(0, 0); //north pos.DefineValues(Position.Line - 1, Position.Colunm); while (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; if (Board.Piece(pos) != null && Board.Piece(pos).Color != Color) { break; } pos.Line = pos.Line - 1; } //south pos.DefineValues(Position.Line + 1, Position.Colunm); while (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; if (Board.Piece(pos) != null && Board.Piece(pos).Color != Color) { break; } pos.Line = pos.Line + 1; } //east pos.DefineValues(Position.Line, Position.Colunm + 1); while (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; if (Board.Piece(pos) != null && Board.Piece(pos).Color != Color) { break; } pos.Colunm = pos.Colunm + 1; } //west pos.DefineValues(Position.Line, Position.Colunm - 1); while (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; if (Board.Piece(pos) != null && Board.Piece(pos).Color != Color) { break; } pos.Colunm = pos.Colunm - 1; } return(mat); }
public override bool[,] PossibleMoves() { bool[,] mat = new bool[Board.Lines, Board.Colunms]; Position pos = new Position(0, 0); pos.DefineValues(Position.Line - 1, Position.Colunm - 2); if (Board.ValidPosition(pos) && CanMove(pos)) { mat[pos.Line, pos.Colunm] = true; } pos.DefineValues(Position.Line - 1, Position.Colunm + 2); if (Board.ValidPosition(pos) && CanMove(pos)) { mat[pos.Line, pos.Colunm] = true; } pos.DefineValues(Position.Line + 1, Position.Colunm - 2); if (Board.ValidPosition(pos) && CanMove(pos)) { mat[pos.Line, pos.Colunm] = true; } pos.DefineValues(Position.Line + 1, Position.Colunm + 2); if (Board.ValidPosition(pos) && CanMove(pos)) { mat[pos.Line, pos.Colunm] = true; } pos.DefineValues(Position.Line + 2, Position.Colunm + 1); if (Board.ValidPosition(pos) && CanMove(pos)) { mat[pos.Line, pos.Colunm] = true; } pos.DefineValues(Position.Line + 2, Position.Colunm - 1); if (Board.ValidPosition(pos) && CanMove(pos)) { mat[pos.Line, pos.Colunm] = true; } pos.DefineValues(Position.Line - 2, Position.Colunm + 1); if (Board.ValidPosition(pos) && CanMove(pos)) { mat[pos.Line, pos.Colunm] = true; } pos.DefineValues(Position.Line - 2, Position.Colunm - 1); if (Board.ValidPosition(pos) && CanMove(pos)) { mat[pos.Line, pos.Colunm] = true; } return(mat); }
public override bool[,] PossibleMoviments() { bool[,] mat = new bool[Board.Lines, Board.Columns]; Position pos = new Position(0, 0); pos.DefineValues(Position.Line - 1, Position.Column - 2); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line - 2, Position.Column - 1); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line - 2, Position.Column + 1); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line - 1, Position.Column + 2); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line + 1, Position.Column + 2); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line + 2, Position.Column + 1); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line + 2, Position.Column - 1); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line + 1, Position.Column - 2); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } return(mat); }
public override bool[,] PossibleMoviments() { bool[,] mat = new bool[Board.Lines, Board.Columns]; Position pos = new Position(0, 0); if (Color == Color.White) { pos.DefineValues(Position.Line - 1, Position.Column); if (Board.IsPositionValid(pos) && Free(pos)) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line - 2, Position.Column); Position p2 = new Position(Position.Line - 1, Position.Column); if (Board.IsPositionValid(p2) && Free(p2) && Board.IsPositionValid(pos) && Free(pos) && ManyMoves == 0) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line - 1, Position.Column - 1); if (Board.IsPositionValid(pos) && IsThereEnemy(pos)) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line - 1, Position.Column + 1); if (Board.IsPositionValid(pos) && IsThereEnemy(pos)) { mat[pos.Line, pos.Column] = true; } // #SpecialPlay // EnPassant if (Position.Line == 3) { Position left = new Position(Position.Line, Position.Column - 1); if (Board.IsPositionValid(left) && IsThereEnemy(left) && Board.UniquePiece(left) == Match.VulnerableEnPassant) { mat[left.Line - 1, left.Column] = true; } Position right = new Position(Position.Line, Position.Column + 1); if (Board.IsPositionValid(right) && IsThereEnemy(right) && Board.UniquePiece(right) == Match.VulnerableEnPassant) { mat[right.Line - 1, right.Column] = true; } } } else { pos.DefineValues(Position.Line + 1, Position.Column); if (Board.IsPositionValid(pos) && Free(pos)) { mat[pos.Line, pos.Column] = true; } Position p2 = new Position(Position.Line + 1, Position.Column); pos.DefineValues(Position.Line + 2, Position.Column); if (Board.IsPositionValid(p2) && Free(p2) && Board.IsPositionValid(pos) && Free(pos) && ManyMoves == 0) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line + 1, Position.Column + 1); if (Board.IsPositionValid(pos) && IsThereEnemy(pos)) { mat[pos.Line, pos.Column] = true; } pos.DefineValues(Position.Line + 1, Position.Column - 1); if (Board.IsPositionValid(pos) && IsThereEnemy(pos)) { mat[pos.Line, pos.Column] = true; } // #SpecialPlay // EnPassant if (Position.Line == 4) { Position left = new Position(Position.Line, Position.Column - 1); if (Board.IsPositionValid(left) && IsThereEnemy(left) && Board.UniquePiece(left) == Match.VulnerableEnPassant) { mat[left.Line + 1, left.Column] = true; } Position right = new Position(Position.Line, Position.Column + 1); if (Board.IsPositionValid(right) && IsThereEnemy(right) && Board.UniquePiece(right) == Match.VulnerableEnPassant) { mat[right.Line + 1, right.Column] = true; } } } return(mat); }
public override bool[,] PossibleMoves() { bool[,] mat = new bool[Board.Lines, Board.Colunms]; Position pos = new Position(0, 0); //north pos.DefineValues(Position.Line - 1, Position.Colunm); if (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; } //northeast pos.DefineValues(Position.Line - 1, Position.Colunm + 1); if (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; } //east pos.DefineValues(Position.Line, Position.Colunm + 1); if (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; } //southeast pos.DefineValues(Position.Line + 1, Position.Colunm + 1); if (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; } //south pos.DefineValues(Position.Line + 1, Position.Colunm); if (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; } //southwest pos.DefineValues(Position.Line + 1, Position.Colunm - 1); if (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; } //west pos.DefineValues(Position.Line, Position.Colunm - 1); if (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; } //northwest pos.DefineValues(Position.Line - 1, Position.Colunm - 1); if (Board.ValidPosition(pos) && canMove(pos)) { mat[pos.Line, pos.Colunm] = true; } return(mat); }
public override bool[,] PossibleMoviments() { bool[,] mat = new bool[Board.Lines, Board.Columns]; Position pos = new Position(0, 0); // Up pos.DefineValues(Position.Line - 1, Position.Column); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } // Up + Right pos.DefineValues(Position.Line - 1, Position.Column + 1); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } // Right pos.DefineValues(Position.Line, Position.Column + 1); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } // Right + Down pos.DefineValues(Position.Line + 1, Position.Column + 1); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } // Down pos.DefineValues(Position.Line + 1, Position.Column); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } // Down + Left pos.DefineValues(Position.Line + 1, Position.Column - 1); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } // Left pos.DefineValues(Position.Line, Position.Column - 1); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } // Left + Up pos.DefineValues(Position.Line - 1, Position.Column - 1); if (Board.IsPositionValid(pos) && CanMove(pos)) { mat[pos.Line, pos.Column] = true; } // #SpecialPlay if (ManyMoves == 0 && !Match.Check) { // Castle Kingside - roque pequeno Position positionOfRook = new Position(Position.Line, Position.Column + 3); if (testRookToCastle(positionOfRook)) { Position p1 = new Position(Position.Line, Position.Column + 1); Position p2 = new Position(Position.Line, Position.Column + 2); if (Board.UniquePiece(p1) == null && Board.UniquePiece(p2) == null) { mat[Position.Line, Position.Column + 2] = true; } { } } // Castle Queenside - roque grande Position positionOfRookQueenSide = new Position(Position.Line, Position.Column - 4); if (testRookToCastle(positionOfRookQueenSide)) { 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.UniquePiece(p1) == null && Board.UniquePiece(p2) == null && Board.UniquePiece(p3) == null) { mat[Position.Line, Position.Column - 2] = true; } { } } } return(mat); }