/* possible moves = true * @return bool[,] */ public override bool[,] GetPossibleMoves() { bool[,] m = new bool[this.Board.Rows, this.Board.Columns]; Position pos; //n pos = new Position(this.Position.Row - 1, this.Position.Column); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } //ne pos.NewValues(this.Position.Row - 1, this.Position.Column + 1); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } //e pos.NewValues(this.Position.Row, this.Position.Column + 1); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } //se pos.NewValues(this.Position.Row + 1, this.Position.Column + 1); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } //s pos.NewValues(this.Position.Row + 1, this.Position.Column); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } //sw pos.NewValues(this.Position.Row + 1, this.Position.Column - 1); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } //w pos.NewValues(this.Position.Row, this.Position.Column - 1); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } //nw pos.NewValues(this.Position.Row - 1, this.Position.Column - 1); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } if (this.MoveCounter == 0 && !_match.Check) { /*** King-side castling ***/ Position PosR1 = new Position(Position.Row, Position.Column + 3); if (TestRookCastling(PosR1)) { Position p1 = new Position(Position.Row, Position.Column + 1); Position p2 = new Position(Position.Row, Position.Column + 2); if (this.Board.GetPiece(p1) == null && this.Board.GetPiece(p2) == null) { m[this.Position.Row, this.Position.Column + 2] = true; } } /*** Queen-side castling ***/ Position PosR2 = new Position(Position.Row, Position.Column - 4); if (TestRookCastling(PosR1)) { Position p1 = new Position(Position.Row, Position.Column - 1); Position p2 = new Position(Position.Row, Position.Column - 2); Position p3 = new Position(Position.Row, Position.Column - 3); if (this.Board.GetPiece(p1) == null && this.Board.GetPiece(p2) == null && this.Board.GetPiece(p3) == null) { m[this.Position.Row, this.Position.Column - 2] = true; } } } return(m); }
/* possible moves = true * @return bool[,] */ public override bool[,] GetPossibleMoves() { bool[,] m = new bool[this.Board.Rows, this.Board.Columns]; Position pos; //n pos = new Position(this.Position.Row - 1, this.Position.Column); while (this.Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; if (this.Board.GetPiece(pos) != null && this.Board.GetPiece(pos).Color != this.Color) { break; } pos.Row = pos.Row - 1; } //s pos.NewValues(this.Position.Row + 1, this.Position.Column); while (this.Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; if (this.Board.GetPiece(pos) != null && this.Board.GetPiece(pos).Color != this.Color) { break; } pos.Row = pos.Row + 1; } //e pos.NewValues(this.Position.Row, this.Position.Column + 1); while (this.Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; if (this.Board.GetPiece(pos) != null && this.Board.GetPiece(pos).Color != this.Color) { break; } pos.Column = pos.Column + 1; } //w pos.NewValues(this.Position.Row, this.Position.Column - 1); while (this.Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; if (this.Board.GetPiece(pos) != null && this.Board.GetPiece(pos).Color != this.Color) { break; } pos.Column = pos.Column - 1; } return(m); }
/* possible moves = true * @return bool[,] */ public override bool[,] GetPossibleMoves() { bool[,] m = new bool[this.Board.Rows, this.Board.Columns]; Position pos; if (this.Color == Color.White) { pos = new Position(this.Position.Row - 1, this.Position.Column); if (this.Board.IsValid(pos) && EmptyPos(pos)) { m[pos.Row, pos.Column] = true; } pos.NewValues(this.Position.Row - 2, this.Position.Column); if (this.Board.IsValid(pos) && EmptyPos(pos) && this.MoveCounter == 0) { m[pos.Row, pos.Column] = true; } pos = new Position(this.Position.Row - 1, this.Position.Column - 1); if (this.Board.IsValid(pos) && HasOpponent(pos)) { m[pos.Row, pos.Column] = true; } pos = new Position(this.Position.Row - 1, this.Position.Column + 1); if (this.Board.IsValid(pos) && HasOpponent(pos)) { m[pos.Row, pos.Column] = true; } //*** En Passant ***// if (this.Position.Row == 3) { Position left = new Position(this.Position.Row, this.Position.Column - 1); if (this.Board.IsValid(left) && HasOpponent(left) && this.Board.GetPiece(left) == _chessMatch.EnPassant) { m[left.Row - 1, left.Column] = true; } Position right = new Position(this.Position.Row, this.Position.Column + 1); if (this.Board.IsValid(left) && HasOpponent(right) && this.Board.GetPiece(left) == _chessMatch.EnPassant) { m[right.Row - 1, right.Column] = true; } } } else { pos = new Position(this.Position.Row + 1, this.Position.Column); if (this.Board.IsValid(pos) && EmptyPos(pos)) { m[pos.Row, pos.Column] = true; } pos.NewValues(this.Position.Row + 2, this.Position.Column); if (this.Board.IsValid(pos) && EmptyPos(pos) && this.MoveCounter == 0) { m[pos.Row, pos.Column] = true; } pos = new Position(this.Position.Row + 1, this.Position.Column - 1); if (this.Board.IsValid(pos) && HasOpponent(pos)) { m[pos.Row, pos.Column] = true; } pos = new Position(this.Position.Row + 1, this.Position.Column + 1); if (this.Board.IsValid(pos) && HasOpponent(pos)) { m[pos.Row, pos.Column] = true; } //*** En Passant ***// if (this.Position.Row == 4) { Position left = new Position(this.Position.Row, this.Position.Column - 1); if (this.Board.IsValid(left) && HasOpponent(left) && this.Board.GetPiece(left) == _chessMatch.EnPassant) { m[left.Row + 1, left.Column] = true; } Position right = new Position(this.Position.Row, this.Position.Column + 1); if (this.Board.IsValid(right) && HasOpponent(right) && this.Board.GetPiece(right) == _chessMatch.EnPassant) { m[right.Row + 1, right.Column] = true; } } } return(m); }
/* possible moves = true * @return bool[,] */ public override bool[,] GetPossibleMoves() { bool[,] m = new bool[this.Board.Rows, this.Board.Columns]; Position pos; pos = new Position(this.Position.Row - 1, this.Position.Column - 2); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } pos.NewValues(this.Position.Row - 2, this.Position.Column - 1); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } pos.NewValues(this.Position.Row - 2, this.Position.Column + 1); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } pos.NewValues(this.Position.Row - 1, this.Position.Column + 2); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } pos.NewValues(this.Position.Row + 1, this.Position.Column + 2); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } pos.NewValues(this.Position.Row + 2, this.Position.Column + 1); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } pos.NewValues(this.Position.Row + 2, this.Position.Column - 1); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } pos.NewValues(this.Position.Row + 1, this.Position.Column - 2); if (Board.IsValid(pos) && PossibleMove(pos)) { m[pos.Row, pos.Column] = true; } return(m); }