public void ShouldGetSixPossibilitiesWhenKnightOnB4() { var knight = Figure.Knight; var result = knight.Move.GetPossibilities(FigurePosition.From(2, 4)); Assert.Equal(6, result.Count()); }
public void ShouldGetNinePossibilitiesWhenBishopOnB4() { var bishop = Figure.Bishop; var result = bishop.Move.GetPossibilities(FigurePosition.From(2, 4)); Assert.Equal(9, result.Count()); }
public void ShouldGetTwentyThreePossibilitiesWhenQueenOnB4() { var queen = Figure.Queen; var result = queen.Move.GetPossibilities(FigurePosition.From(2, 4)); Assert.Equal(23, result.Count()); }
public void ShouldGetOnePossibilitiesWhenPawnOnB4() { var pawn = Figure.Pawn; var result = pawn.Move.GetPossibilities(FigurePosition.From(2, 4)); Assert.Single(result); }
public void ShouldReturnFalseWhenExecuteInvalidMove() { var bishop = Figure.Bishop.WithPosition(FigurePosition.From(1, 2)); var result = bishop.Move.Execute(bishop, FigurePosition.From(1, 1)); Assert.False(result); }
public void ShouldGetEightPossibilitiesWhenKingOnB4() { var king = Figure.King; var result = king.Move.GetPossibilities(FigurePosition.From(2, 4)); Assert.Equal(8, result.Count()); }
public void ShouldGetFourteenPossibilitiesWhenRookOnB4() { var rook = Figure.Rook; var result = rook.Move.GetPossibilities(FigurePosition.From(2, 4)); Assert.Equal(14, result.Count()); }
public void GivenPositionShouldAlwaysBeSetWhenFigurePositionIsNull() { var bishop = Figure.Bishop; var position = FigurePosition.From(1, 2); bishop.Move.Execute(bishop, position); Assert.Equal(position, bishop.Position); }
private void set(EFigures FigureType, int Color, GameBoard Board, FigurePosition Position) { this.color = Color; this.figuretype = FigureType; this.gameBoard = Board; this.position = Position; configure(); }
public ActionResult <IEnumerable <FigurePositionDto> > GetPossibleMoves( [FromRoute] int id, [FromBody] FigurePositionDto figurePosition) { var position = FigurePosition.From(figurePosition.X, figurePosition.Y); var posibilities = Figure.From(id) .WithPosition(position) .Move.GetPossibilities(position); return(Ok(_mapper.Map <IEnumerable <FigurePositionDto> >(posibilities))); }
public override bool CanMove(FigurePosition to, BoardState boardState, bool afterMove = false) { if (to.X - Position.X == to.Y - Position.Y) { if (to.Y - Position.Y > 0) /* Right-up */ { for (var i = 1; i < to.Y - Position.Y; i++) { if (boardState.IsPositionOccupied(Position + new Vector(i, i), afterMove)) { return(false); } } return(true); } else /* Left-down */ { for (var i = -1; i > to.Y - Position.Y; i--) { if (boardState.IsPositionOccupied(Position + new Vector(i, i), afterMove)) { return(false); } } return(true); } } if (to.X - Position.X == -(to.Y - Position.Y)) { if (to.Y - Position.Y > 0) /* Left-up */ { for (var i = 1; i < to.Y - Position.Y; i++) { if (boardState.IsPositionOccupied(Position + new Vector(-i, i), afterMove)) { return(false); } } return(true); } else /* Right-down */ { for (var i = -1; i > to.Y - Position.Y; i--) { if (boardState.IsPositionOccupied(Position + new Vector(-i, i), afterMove)) { return(false); } } return(true); } } return(false); }
public override bool CanMove(FigurePosition to, BoardState boardState, bool afterMove = false) { if (to.Y == Position.Y) { if (to.X > Position.X) /* Right */ { for (var i = 1; i < to.X - Position.X; i++) { if (boardState.FindFigureNumber(Position + new Vector(i, 0), false).HasValue) { return(false); } } return(true); } else /* Left */ { for (var i = -1; i > to.X - Position.X; i--) { if (boardState.FindFigureNumber(Position + new Vector(i, 0), false).HasValue) { return(false); } } return(true); } } if (to.X == Position.X) { if (to.Y > Position.Y) /* Up */ { for (var i = 1; i < to.Y - Position.Y; i++) { if (boardState.FindFigureNumber(Position + new Vector(0, i), false).HasValue) { return(false); } } return(true); } else /* Down */ { for (var i = -1; i > to.Y - Position.Y; i--) { if (boardState.FindFigureNumber(Position + new Vector(0, i), false).HasValue) { return(false); } } return(true); } } return(false); }
public override bool CanMove(FigurePosition to, BoardState boardState, bool afterMove = false) { if (Math.Abs(to.X - Position.X) == 2) { return(Math.Abs(to.Y - Position.Y) == 1); } if (Math.Abs(to.X - Position.X) == 1) { return(Math.Abs(to.Y - Position.Y) == 2); } return(false); }
public override IEnumerable <FigurePosition> GetPossibilities( FigurePosition actualPosition) { var result = new List <FigurePosition>(); if (actualPosition.Y < 8) { result.Add(FigurePosition.From(actualPosition.X, actualPosition.Y + 1)); } return(result); }
public override bool CanMove(FigurePosition to, BoardState boardState, bool afterMove = false) { if (Math.Abs(to.Y - Position.Y) > 1) { return(false); } if (Math.Abs(to.X - Position.X) > 2) { return(false); } if (Math.Abs(to.X - Position.X) == 2) //castleing?? { var vectorsToCheck = new List <Vector>(); if (to.X > Position.X) { if (!boardState.GetCastling(Color, CastlingTypes.Kingside)) { return(false); } vectorsToCheck.Add(new Vector(1, 0)); } else { if (!boardState.GetCastling(Color, CastlingTypes.Queenside)) { return(false); } vectorsToCheck.Add(new Vector(-1, 0)); vectorsToCheck.Add(new Vector(-2, 0)); } foreach (var vector in vectorsToCheck) { if (boardState.IsPositionOccupied(Position + vector, afterMove)) { return(false); } /* Cell is attacked? */ if (boardState.CanAttackOnCopyBoard(Position + vector)) //king can be attacked at move? { return(false); } } if (boardState.IsPositionOccupied(to, afterMove)) { return(false); } } return(true); }
public IActionResult PostMove( [FromRoute] int id, [FromBody] PostMoveApiRequest request) { var actualPosition = FigurePosition.From(request.From.X, request.From.Y); var desiredPosition = FigurePosition.From(request.To.X, request.To.Y); var figure = Figure.From(id).WithPosition(actualPosition); var result = figure.Move.Execute(figure, desiredPosition); if (result) { return(Ok()); } return(BadRequest()); }
public bool Execute(Figure target, FigurePosition destination) { if (target.Position == null) { target.Position = destination; return(true); } if (GetPossibilities(target.Position).Contains(destination)) { target.Position = FigurePosition.From(destination.X, destination.Y); return(true); } else { return(false); } }
public void NextPosition(FigurePosition position) { if (currentPosition == FigurePosition.position1) { nextPosition = FigurePosition.position2; } else if (currentPosition == FigurePosition.position2) { nextPosition = FigurePosition.position3; } else if (currentPosition == FigurePosition.position3) { nextPosition = FigurePosition.position4; } else if (currentPosition == FigurePosition.position4) { nextPosition = FigurePosition.position1; } }
public override IEnumerable <FigurePosition> GetPossibilities( FigurePosition actualPosition) { var result = new List <FigurePosition>(); if (actualPosition.X < 8 && actualPosition.Y < 7) { result.Add(FigurePosition.From(actualPosition.X + 1, actualPosition.Y + 2)); } if (actualPosition.X > 1 && actualPosition.Y > 2) { result.Add(FigurePosition.From(actualPosition.X - 1, actualPosition.Y - 2)); } if (actualPosition.X < 7 && actualPosition.Y < 8) { result.Add(FigurePosition.From(actualPosition.X + 2, actualPosition.Y + 1)); } if (actualPosition.X > 2 && actualPosition.Y > 1) { result.Add(FigurePosition.From(actualPosition.X - 2, actualPosition.Y - 1)); } if (actualPosition.X < 8 && actualPosition.Y > 2) { result.Add(FigurePosition.From(actualPosition.X + 1, actualPosition.Y - 2)); } if (actualPosition.X > 1 && actualPosition.Y < 7) { result.Add(FigurePosition.From(actualPosition.X - 1, actualPosition.Y + 2)); } if (actualPosition.X > 2 && actualPosition.Y < 8) { result.Add(FigurePosition.From(actualPosition.X - 2, actualPosition.Y + 1)); } if (actualPosition.X < 7 && actualPosition.Y > 1) { result.Add(FigurePosition.From(actualPosition.X + 2, actualPosition.Y - 1)); } return(result); }
public override IEnumerable <FigurePosition> GetPossibilities( FigurePosition actualPosition) { var result = new List <FigurePosition>(); for (var i = (actualPosition.X + 1); i < 9; i++) { result.Add(FigurePosition.From(i, actualPosition.Y)); } for (var i = (actualPosition.X - 1); i > 0; i--) { result.Add(FigurePosition.From(i, actualPosition.Y)); } for (var j = (actualPosition.Y + 1); j < 9; j++) { result.Add(FigurePosition.From(actualPosition.X, j)); } for (var j = (actualPosition.Y - 1); j > 0; j--) { result.Add(FigurePosition.From(actualPosition.X, j)); } for (var(i, j) = (actualPosition.X + 1, actualPosition.Y + 1); i < 9 && j < 9; i++, j++) { result.Add(FigurePosition.From(i, j)); } for (var(i, j) = (actualPosition.X - 1, actualPosition.Y - 1); i > 0 && j > 0; i--, j--) { result.Add(FigurePosition.From(i, j)); } for (var(i, j) = (actualPosition.X - 1, actualPosition.Y + 1); i > 0 && j < 9; i--, j++) { result.Add(FigurePosition.From(i, j)); } for (var(i, j) = (actualPosition.X + 1, actualPosition.Y - 1); i < 9 && j > 0; i++, j--) { result.Add(FigurePosition.From(i, j)); } return(result); }
public override bool CanMove(FigurePosition to, BoardState boardState, bool afterMove = false) { if ((to.X == Position.X) && (to.Y - Position.Y == 1 * MoveVector())) { return(!boardState.IsPositionOccupied(to, false)); } if ((to.X == Position.X) && (to.Y - Position.Y == 2 * MoveVector())) { if (Moved()) { return(false); } if (boardState.IsPositionOccupied(Position + new Vector(0, MoveVector()), false)) { return(false); } if (boardState.IsPositionOccupied(to, false)) { return(false); } return(true); } if ((Math.Abs(to.X - Position.X) == 1) && (to.Y - Position.Y == 1 * MoveVector())) { if (boardState.IsPositionOccupied(to, false)) { return(true); } if (boardState.EnPassant == to) { return(true); } return(false); } return(false); }
public abstract bool CanAttack(FigurePosition to, BoardState boardState, bool afterMove = true);
public abstract bool CanMove(FigurePosition to, BoardState boardState, bool afterMove = false);
protected Figure(FigurePosition position, FigureColors color) { Position = position; Color = color; }
public override bool CanMove(FigurePosition to, BoardState boardState, bool afterMove = false) { return (new Bishop(Position, Color).CanMove(to, boardState, afterMove) || new Rook(Position, Color).CanMove(to, boardState, afterMove)); }
public Queen(FigurePosition position, FigureColors color) : base(position, color) { }
private void configure() { //Set default pos if pos is null //Set value for figure switch (this.figuretype) { case EFigures.King: { this.value = 10; if (position == null) { if (this.color == Figure.WHITE) { this.position = new FigurePosition('e', 1); } else { this.position = new FigurePosition('e', 8); } } } break; case EFigures.Queen: { this.value = 9; if (position == null) { if (this.color == Figure.WHITE) { this.position = new FigurePosition('d', 1); } else { this.position = new FigurePosition('d', 8); } } } break; case EFigures.Rook: { this.value = 5; if (position == null) { if (this.color == Figure.WHITE) { if (this.gameBoard.Figures.Find(k => k.Figuretype == EFigures.Rook && k.Color == Figure.WHITE) != null) { //Add second Rook for color this.position = new FigurePosition('h', 1); } else { //Add first Rook for color this.position = new FigurePosition('a', 1); } } else { if (this.gameBoard.Figures.Find(k => k.Figuretype == EFigures.Rook && k.Color == Figure.BLACK) != null) { //Add second Rook for color this.position = new FigurePosition('h', 8); } else { //Add first Rook for color this.position = new FigurePosition('a', 8); } } } } break; case EFigures.Bishop: { this.value = 3; if (position == null) { if (this.color == Figure.WHITE) { if (this.gameBoard.Figures.Find(k => k.Figuretype == EFigures.Bishop && k.Color == Figure.WHITE) != null) { //Add second Rook for color this.position = new FigurePosition('c', 1); } else { //Add first Rook for color this.position = new FigurePosition('f', 1); } } else { if (this.gameBoard.Figures.Find(k => k.Figuretype == EFigures.Bishop && k.Color == Figure.BLACK) != null) { //Add second Rook for color this.position = new FigurePosition('c', 8); } else { //Add first Rook for color this.position = new FigurePosition('f', 8); } } } } break; case EFigures.Knight: { this.value = 3; if (position == null) { if (this.color == Figure.WHITE) { if (this.gameBoard.Figures.Find(k => k.Figuretype == EFigures.Knight && k.Color == Figure.WHITE) != null) { //Add second Rook for color this.position = new FigurePosition('b', 1); } else { //Add first Rook for color this.position = new FigurePosition('g', 1); } } else { if (this.gameBoard.Figures.Find(k => k.Figuretype == EFigures.Knight && k.Color == Figure.BLACK) != null) { //Add second Rook for color this.position = new FigurePosition('b', 8); } else { //Add first Rook for color this.position = new FigurePosition('g', 8); } } } } break; case EFigures.Pawn: { this.value = 1; if (position == null) { if (this.color == Figure.WHITE) { this.position = new FigurePosition((char)(65 + this.gameBoard.Figures.Count <Figure>(f => f.Figuretype == EFigures.Pawn && f.Color == Figure.WHITE)), 2); } else { this.position = new FigurePosition((char)(65 + this.gameBoard.Figures.Count <Figure>(f => f.Figuretype == EFigures.Pawn && f.Color == Figure.BLACK)), 7); } } } break; default: { throw new Exception("Unkown figure type"); } } }
public override bool CanAttack(FigurePosition to, BoardState boardState, bool afterMove = true) { return(Math.Abs(to.X - Position.X) <= 1 && Math.Abs(to.Y - Position.Y) <= 1); }
public King(FigurePosition position, FigureColors color) : base(position, color) { }
public override bool CanAttack(FigurePosition to, BoardState boardState, bool afterMove = true) { return(CanMove(to, boardState, afterMove)); }