コード例 #1
0
        public void ShouldGetSixPossibilitiesWhenKnightOnB4()
        {
            var knight = Figure.Knight;
            var result = knight.Move.GetPossibilities(FigurePosition.From(2, 4));

            Assert.Equal(6, result.Count());
        }
コード例 #2
0
        public void ShouldGetNinePossibilitiesWhenBishopOnB4()
        {
            var bishop = Figure.Bishop;
            var result = bishop.Move.GetPossibilities(FigurePosition.From(2, 4));

            Assert.Equal(9, result.Count());
        }
コード例 #3
0
        public void ShouldGetTwentyThreePossibilitiesWhenQueenOnB4()
        {
            var queen  = Figure.Queen;
            var result = queen.Move.GetPossibilities(FigurePosition.From(2, 4));

            Assert.Equal(23, result.Count());
        }
コード例 #4
0
        public void ShouldGetOnePossibilitiesWhenPawnOnB4()
        {
            var pawn   = Figure.Pawn;
            var result = pawn.Move.GetPossibilities(FigurePosition.From(2, 4));

            Assert.Single(result);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        public void ShouldGetEightPossibilitiesWhenKingOnB4()
        {
            var king   = Figure.King;
            var result = king.Move.GetPossibilities(FigurePosition.From(2, 4));

            Assert.Equal(8, result.Count());
        }
コード例 #7
0
        public void ShouldGetFourteenPossibilitiesWhenRookOnB4()
        {
            var rook   = Figure.Rook;
            var result = rook.Move.GetPossibilities(FigurePosition.From(2, 4));

            Assert.Equal(14, result.Count());
        }
コード例 #8
0
        public void GivenPositionShouldAlwaysBeSetWhenFigurePositionIsNull()
        {
            var bishop   = Figure.Bishop;
            var position = FigurePosition.From(1, 2);

            bishop.Move.Execute(bishop, position);
            Assert.Equal(position, bishop.Position);
        }
コード例 #9
0
ファイル: Figure.cs プロジェクト: Dev-Owl/Chess
        private void set(EFigures FigureType, int Color, GameBoard Board, FigurePosition Position)
        {
            this.color      = Color;
            this.figuretype = FigureType;
            this.gameBoard  = Board;
            this.position   = Position;

            configure();
        }
コード例 #10
0
        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)));
        }
コード例 #11
0
 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);
 }
コード例 #12
0
ファイル: Rook.cs プロジェクト: paulb39/MPChessPC
 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);
 }
コード例 #13
0
 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);
 }
コード例 #14
0
        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);
        }
コード例 #15
0
ファイル: King.cs プロジェクト: paulb39/MPChessPC
 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);
 }
コード例 #16
0
        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());
        }
コード例 #17
0
 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);
     }
 }
コード例 #18
0
ファイル: Game.cs プロジェクト: aisaiev/Tetris-Game
 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;
     }
 }
コード例 #19
0
        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);
        }
コード例 #20
0
        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);
        }
コード例 #21
0
ファイル: Pawn.cs プロジェクト: paulb39/MPChessPC
 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);
 }
コード例 #22
0
ファイル: Figure.cs プロジェクト: paulb39/MPChessPC
 public abstract bool CanAttack(FigurePosition to, BoardState boardState, bool afterMove = true);
コード例 #23
0
ファイル: Figure.cs プロジェクト: paulb39/MPChessPC
 public abstract bool CanMove(FigurePosition to, BoardState boardState, bool afterMove = false);
コード例 #24
0
ファイル: Figure.cs プロジェクト: paulb39/MPChessPC
 protected Figure(FigurePosition position, FigureColors color)
 {
     Position = position;
     Color    = color;
 }
コード例 #25
0
 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));
 }
コード例 #26
0
 public Queen(FigurePosition position, FigureColors color)
     : base(position, color)
 {
 }
コード例 #27
0
ファイル: Figure.cs プロジェクト: Dev-Owl/Chess
        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");
            }
            }
        }
コード例 #28
0
ファイル: King.cs プロジェクト: paulb39/MPChessPC
 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);
 }
コード例 #29
0
ファイル: King.cs プロジェクト: paulb39/MPChessPC
 public King(FigurePosition position, FigureColors color)
     : base(position, color)
 {
 }
コード例 #30
0
 public override bool CanAttack(FigurePosition to, BoardState boardState, bool afterMove = true)
 {
     return(CanMove(to, boardState, afterMove));
 }