Ejemplo n.º 1
0
        /// <summary>
        /// The CanMoveDown
        /// </summary>
        /// <param name="piece">The piece<see cref="Piece"/></param>
        /// <returns>The <see cref="bool"/></returns>
        private bool CanMoveDown(Piece piece)
        {
            if (!State.CanMove)
            {
                return(false);
            }

            var newPosition = new Point(piece.Position.X, piece.Position.Y + 1);
            var testPiece   = new PieceBuilder()
                              .OfType(piece.Type)
                              .OnPosition(newPosition)
                              .WithRotation(piece.Rotation)
                              .OnBoard(this)
                              .Build();

            //check if current piece's blocks don't go out the board height edge
            foreach (var i in testPiece.Blocks)
            {
                if (i.Y > Dimension.Height - 1)
                {
                    return(false);
                }
            }

            return(!ThereIsCollision(testPiece));
        }
Ejemplo n.º 2
0
    public void SetCorrectPiecePos(GameObject _pieceObj, int _id, float _duration)
    {
        PieceBuilder _piece      = _pieceObj.GetComponent <PieceBuilder>();
        Vector3      _correctPos = listAnswerForSample.Find(a => a.x == _id);

        if (_correctPos != null)
        {
            _piece.AutoCorrectPiece(new Vector2(_correctPos.y, _correctPos.z), _duration);
        }
    }
Ejemplo n.º 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Board"/> class.
 /// </summary>
 /// <param name="repository">The repository<see cref="IStatsRepository"/></param>
 /// <param name="width">The width<see cref="int"/></param>
 /// <param name="height">The height<see cref="int"/></param>
 public Board(IStatsRepository repository, int width, int height)
 {
     _repository   = repository;
     _pieceBuilder = new PieceBuilder().OnBoard(this);
     Dimension     = new Size(width, height);
     Stats         = new Stats();
     State         = new PausedState();
     Matrix        = new Block[width, height];
     Record        = _repository.MaxScore();
 }
Ejemplo n.º 4
0
        private void PerformPromotionPieceMove(Board newBoard, Move move)
        {
            var promotion    = move.Promotion;
            var pieceHistory = new List <Move>(promotion.PromotingPiece.MoveHistory);
            var newPiece     = new PieceBuilder(promotion.NewPieceType.Type)
                               .As(promotion.PromotingPiece.Color)
                               .At(promotion.NewPosition)
                               .Create()
                               .AddRangeToMoveHistory(pieceHistory)
                               .AddMoveToHistory(move);

            newBoard.AddPiece(newPiece);
            newBoard[promotion.OldPosition] = null;
        }
Ejemplo n.º 5
0
        public void KingCannotMoveIntoCheck()
        {
            var board = Board.NewEmptyBoard();
            var king  = new PieceBuilder(PieceType.King)
                        .As(PieceColor.White)
                        .At(new Position(File.D, Rank._1))
                        .Create();

            board.AddPiece(king);
            board.AddPiece(new PieceBuilder(PieceType.Rook)
                           .As(PieceColor.Black)
                           .At(new Position(File.E, Rank._8))
                           .Create());

            var move = MoveBuilder.CreateNormalMove(king,
                                                    new Position(File.E, Rank._1), false);

            bool putsMeInCheck = board.DoesMovePutKingInCheck(PieceColor.White, move);

            Assert.True(putsMeInCheck);
        }
Ejemplo n.º 6
0
        private static void BuildDiffPieces(DiffResult diffResult, List<DiffPiece> oldPieces, List<DiffPiece> newPieces, PieceBuilder subPieceBuilder)
        {
            int aPos = 0;
            int bPos = 0;

            foreach (var diffBlock in diffResult.DiffBlocks)
            {
                while (bPos < diffBlock.InsertStartB && aPos < diffBlock.DeleteStartA)
                {
                    oldPieces.Add(new DiffPiece(diffResult.PiecesOld[aPos], ChangeType.Unchanged, aPos + 1));
                    newPieces.Add(new DiffPiece(diffResult.PiecesNew[bPos], ChangeType.Unchanged, bPos + 1));
                    aPos++;
                    bPos++;
                }

                int i = 0;
                for (; i < Math.Min(diffBlock.DeleteCountA, diffBlock.InsertCountB); i++)
                {
                    var oldPiece = new DiffPiece(diffResult.PiecesOld[i + diffBlock.DeleteStartA], ChangeType.Deleted, aPos + 1);
                    var newPiece = new DiffPiece(diffResult.PiecesNew[i + diffBlock.InsertStartB], ChangeType.Inserted, bPos + 1);

                    if (subPieceBuilder != null)
                    {
                        subPieceBuilder(diffResult.PiecesOld[aPos], diffResult.PiecesNew[bPos], oldPiece.SubPieces, newPiece.SubPieces);
                        newPiece.Type = oldPiece.Type = ChangeType.Modified;
                    }

                    oldPieces.Add(oldPiece);
                    newPieces.Add(newPiece);
                    aPos++;
                    bPos++;
                }

                if (diffBlock.DeleteCountA > diffBlock.InsertCountB)
                {
                    for (; i < diffBlock.DeleteCountA; i++)
                    {
                        oldPieces.Add(new DiffPiece(diffResult.PiecesOld[i + diffBlock.DeleteStartA], ChangeType.Deleted, aPos + 1));
                        newPieces.Add(new DiffPiece());
                        aPos++;
                    }
                }
                else
                {
                    for (; i < diffBlock.InsertCountB; i++)
                    {
                        newPieces.Add(new DiffPiece(diffResult.PiecesNew[i + diffBlock.InsertStartB], ChangeType.Inserted, bPos + 1));
                        oldPieces.Add(new DiffPiece());
                        bPos++;
                    }
                }
            }

            while (bPos < diffResult.PiecesNew.Length && aPos < diffResult.PiecesOld.Length)
            {
                oldPieces.Add(new DiffPiece(diffResult.PiecesOld[aPos], ChangeType.Unchanged, aPos + 1));
                newPieces.Add(new DiffPiece(diffResult.PiecesNew[bPos], ChangeType.Unchanged, bPos + 1));
                aPos++;
                bPos++;
            }
        }
Ejemplo n.º 7
0
        private static void BuildDiffPieces(DiffResult diffResult, List <DiffPiece> oldPieces, List <DiffPiece> newPieces, PieceBuilder subPieceBuilder)
        {
            int aPos = 0;
            int bPos = 0;

            foreach (var diffBlock in diffResult.DiffBlocks)
            {
                while (bPos < diffBlock.InsertStartB && aPos < diffBlock.DeleteStartA)
                {
                    oldPieces.Add(new DiffPiece(diffResult.PiecesOld[aPos], ChangeType.Unchanged, aPos + 1));
                    newPieces.Add(new DiffPiece(diffResult.PiecesNew[bPos], ChangeType.Unchanged, bPos + 1));
                    aPos++;
                    bPos++;
                }

                int i = 0;
                for (; i < Math.Min(diffBlock.DeleteCountA, diffBlock.InsertCountB); i++)
                {
                    var oldPiece = new DiffPiece(diffResult.PiecesOld[i + diffBlock.DeleteStartA], ChangeType.Deleted, aPos + 1);
                    var newPiece = new DiffPiece(diffResult.PiecesNew[i + diffBlock.InsertStartB], ChangeType.Inserted, bPos + 1);

                    if (subPieceBuilder != null)
                    {
                        subPieceBuilder(diffResult.PiecesOld[aPos], diffResult.PiecesNew[bPos], oldPiece.SubPieces, newPiece.SubPieces);
                        newPiece.Type = oldPiece.Type = ChangeType.Modified;
                    }

                    oldPieces.Add(oldPiece);
                    newPieces.Add(newPiece);
                    aPos++;
                    bPos++;
                }

                if (diffBlock.DeleteCountA > diffBlock.InsertCountB)
                {
                    for (; i < diffBlock.DeleteCountA; i++)
                    {
                        oldPieces.Add(new DiffPiece(diffResult.PiecesOld[i + diffBlock.DeleteStartA], ChangeType.Deleted, aPos + 1));
                        newPieces.Add(new DiffPiece());
                        aPos++;
                    }
                }
                else
                {
                    for (; i < diffBlock.InsertCountB; i++)
                    {
                        newPieces.Add(new DiffPiece(diffResult.PiecesNew[i + diffBlock.InsertStartB], ChangeType.Inserted, bPos + 1));
                        oldPieces.Add(new DiffPiece());
                        bPos++;
                    }
                }
            }

            while (bPos < diffResult.PiecesNew.Length && aPos < diffResult.PiecesOld.Length)
            {
                oldPieces.Add(new DiffPiece(diffResult.PiecesOld[aPos], ChangeType.Unchanged, aPos + 1));
                newPieces.Add(new DiffPiece(diffResult.PiecesNew[bPos], ChangeType.Unchanged, bPos + 1));
                aPos++;
                bPos++;
            }
        }
Ejemplo n.º 8
0
        private static ChangeType BuildDiffPieces(DiffResult diffResult, List <DiffPiece> oldPieces, List <DiffPiece> newPieces, PieceBuilder subPieceBuilder, bool ignoreWhiteSpace, bool ignoreCase)
        {
            int aPos = 0;
            int bPos = 0;

            ChangeType changeSummary = ChangeType.Unchanged;

            foreach (var diffBlock in diffResult.DiffBlocks)
            {
                while (bPos < diffBlock.InsertStartB && aPos < diffBlock.DeleteStartA)
                {
                    oldPieces.Add(new DiffPiece(diffResult.PiecesOld[aPos], ChangeType.Unchanged, aPos + 1));
                    newPieces.Add(new DiffPiece(diffResult.PiecesNew[bPos], ChangeType.Unchanged, bPos + 1));
                    aPos++;
                    bPos++;
                }

                int i = 0;
                for (; i < Math.Min(diffBlock.DeleteCountA, diffBlock.InsertCountB); i++)
                {
                    var oldPiece = new DiffPiece(diffResult.PiecesOld[i + diffBlock.DeleteStartA], ChangeType.Deleted, aPos + 1);
                    var newPiece = new DiffPiece(diffResult.PiecesNew[i + diffBlock.InsertStartB], ChangeType.Inserted, bPos + 1);

                    if (subPieceBuilder != null)
                    {
                        var subChangeSummary = subPieceBuilder(diffResult.PiecesOld[aPos], diffResult.PiecesNew[bPos], oldPiece.SubPieces, newPiece.SubPieces, ignoreWhiteSpace, ignoreCase);
                        newPiece.Type = oldPiece.Type = subChangeSummary;
                    }

                    oldPieces.Add(oldPiece);
                    newPieces.Add(newPiece);
                    aPos++;
                    bPos++;
                }

                if (diffBlock.DeleteCountA > diffBlock.InsertCountB)
                {
                    for (; i < diffBlock.DeleteCountA; i++)
                    {
                        oldPieces.Add(new DiffPiece(diffResult.PiecesOld[i + diffBlock.DeleteStartA], ChangeType.Deleted, aPos + 1));
                        newPieces.Add(new DiffPiece());
                        aPos++;
                    }
                }
                else
                {
                    for (; i < diffBlock.InsertCountB; i++)
                    {
                        newPieces.Add(new DiffPiece(diffResult.PiecesNew[i + diffBlock.InsertStartB], ChangeType.Inserted, bPos + 1));
                        oldPieces.Add(new DiffPiece());
                        bPos++;
                    }
                }
            }

            while (bPos < diffResult.PiecesNew.Length && aPos < diffResult.PiecesOld.Length)
            {
                oldPieces.Add(new DiffPiece(diffResult.PiecesOld[aPos], ChangeType.Unchanged, aPos + 1));
                newPieces.Add(new DiffPiece(diffResult.PiecesNew[bPos], ChangeType.Unchanged, bPos + 1));
                aPos++;
                bPos++;
            }

            // Consider the whole diff as "modified" if we found any change, otherwise we consider it unchanged
            if (oldPieces.Any(x => x.Type == ChangeType.Modified || x.Type == ChangeType.Inserted || x.Type == ChangeType.Deleted))
            {
                changeSummary = ChangeType.Modified;
            }
            else if (newPieces.Any(x => x.Type == ChangeType.Modified || x.Type == ChangeType.Inserted || x.Type == ChangeType.Deleted))
            {
                changeSummary = ChangeType.Modified;
            }

            return(changeSummary);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Builds the diff pieces.
        /// </summary>
        /// <param name="diffResult">Diff result.</param>
        /// <param name="firstPieces">First pieces.</param>
        /// <param name="secondPieces">Second pieces.</param>
        /// <param name="subPieceBuilder">Sub piece builder.</param>
        private static void BuildDiffPieces(Result diffResult, List <LineModel> firstPieces, List <LineModel> secondPieces, PieceBuilder subPieceBuilder)
        {
            int aPos = 0;
            int bPos = 0;

            foreach (var diffBlock in diffResult.DiffBlocks)
            {
                while (bPos < diffBlock.InsertStartB && aPos < diffBlock.DeleteStartA)
                {
                    firstPieces.Add(new LineModel(diffResult.PiecesFirst[aPos], ChangeType.Unchanged, aPos + 1));
                    secondPieces.Add(new LineModel(diffResult.PiecesSecond[bPos], ChangeType.Unchanged, bPos + 1));
                    aPos++;
                    bPos++;
                }

                int i = 0;
                for (; i < Math.Min(diffBlock.DeleteCountA, diffBlock.InsertCountB); i++)
                {
                    var oldPiece = new LineModel(diffResult.PiecesFirst[i + diffBlock.DeleteStartA], ChangeType.Deleted, aPos + 1);
                    var newPiece = new LineModel(diffResult.PiecesSecond[i + diffBlock.InsertStartB], ChangeType.Inserted, bPos + 1);

                    if (subPieceBuilder != null)
                    {
                        subPieceBuilder(diffResult.PiecesFirst[aPos], diffResult.PiecesSecond[bPos], oldPiece.SubPieces, newPiece.SubPieces);
                        newPiece.Type = oldPiece.Type = ChangeType.Modified;
                    }

                    firstPieces.Add(oldPiece);
                    secondPieces.Add(newPiece);
                    aPos++;
                    bPos++;
                }

                if (diffBlock.DeleteCountA > diffBlock.InsertCountB)
                {
                    for (; i < diffBlock.DeleteCountA; i++)
                    {
                        firstPieces.Add(new LineModel(diffResult.PiecesFirst[i + diffBlock.DeleteStartA], ChangeType.Deleted, aPos + 1));
                        secondPieces.Add(new LineModel());
                        aPos++;
                    }
                }
                else
                {
                    for (; i < diffBlock.InsertCountB; i++)
                    {
                        secondPieces.Add(new LineModel(diffResult.PiecesSecond[i + diffBlock.InsertStartB], ChangeType.Inserted, bPos + 1));
                        firstPieces.Add(new LineModel());
                        bPos++;
                    }
                }
            }

            while (bPos < diffResult.PiecesSecond.Length && aPos < diffResult.PiecesFirst.Length)
            {
                firstPieces.Add(new LineModel(diffResult.PiecesFirst[aPos], ChangeType.Unchanged, aPos + 1));
                secondPieces.Add(new LineModel(diffResult.PiecesSecond[bPos], ChangeType.Unchanged, bPos + 1));
                aPos++;
                bPos++;
            }
        }