Пример #1
0
        public IEnumerable <BoardDeskAndPackCard> GetCardAvaibleToPosition(int x, int y)
        {
            var resultValue      = new List <BoardDeskAndPackCard>();
            var listCardInserted = new List <CardDefinition>();

            for (int ind = 0; ind < this.PackCard.Items.Count; ind++)
            {
                {
                    CardDefinition card         = this.PackCard.Items[ind];
                    var            rotationCard = (CardDefinition)card.DeepCopy();
                    for (int i = 0; i < CardDefinition.ROTATION_MOVE; i++)
                    {
                        // Rotation card  "all item (Smile and mount) in card is rotation around"
                        rotationCard = i == 0 ? rotationCard : CardDefinition.RotationCardToRight(rotationCard);
                        if (this.IsPossiblePutCardOnBoard(x, y, rotationCard))
                        {
                            if (listCardInserted.Any <CardDefinition>(c => c.IsTheSameCard(rotationCard)) == false) // optimalization (insert evenly card are ignore)
                            {
                                var cloneBoard = (BoardDeskAndPackCard)this.Clone();
                                cloneBoard.boardField[x, y] = rotationCard;
                                cloneBoard.PackCard.RemoveCard(card);
                                listCardInserted.Add(rotationCard);
                                resultValue.Add(cloneBoard);
                            }
                        }
                    }
                }
            }
            ;
            return(resultValue);
        }
Пример #2
0
        /// <summary>
        /// Rotation actual card to Right
        /// </summary>
        /// <param name="card"></param>
        public static CardDefinition RotationCardToRight(CardDefinition c)
        {
            ImageOnCard temp = c.Top;

            c.Top    = c.Right;
            c.Right  = c.Bottom;
            c.Bottom = c.Left;
            c.Left   = temp;
            return(c);
        }
Пример #3
0
 public bool InsertCardToBoard(int x, int y, CardDefinition card)
 {
     if ((x < 0 || x > sizeX) || (y < 0 || y > sizeY))
     {
         throw new IndexOutOfRangeException("Insert Card on Board is out the area X. Range X is defined as [X,Y] [" + sizeX + "," + sizeY + "] inserted position is [" + x.ToString() + "," + y.ToString() + "]. Position is calculated from 0!");
     }
     if (boardField[x, y] != null)
     {
         throw new Exception("The field on the board is ocupied. Position [" + x.ToString() + "," + y.ToString() + "]. Position is calculated from 0!");
     }
     return(IsPossiblePutCardOnBoard(x, y, card));
 }
Пример #4
0
        internal bool IsTheSameCard(CardDefinition RotationCard)
        {
            if (this != RotationCard)
            {
                return(false);
            }

            var rtCard = (CardDefinition)RotationCard.Clone();

            for (int i = 0; i < CardDefinition.ROTATION_MOVE - 1; i++)
            {
                rtCard = CardDefinition.RotationCardToRight(rtCard);
                if (rtCard != this)
                {
                    return(false);
                }
            }
            return(true);
        }
Пример #5
0
        /// <summary>
        /// Compare Actual Card with Card of the location
        /// </summary>
        /// <param name="CompareCard">Comapred Card</param>
        /// <param name="PositionCard">Compare Actual Card on Position</param>
        /// <returns>Return True if the card is connected</returns>
        public bool Compare(CardDefinition CompareCard, TypePositionImages PositionCard)
        {
            // Card of upper
            // upper  if (y < sizeY && (this.boardField[x, y + 1] != null)) isPosible = card.Compare(this.boardField[x, y + 1], TypePositionImages.Top) ? isPosible : false;
            switch (PositionCard)
            {
            case TypePositionImages.Top:
                return(this.Top.IsConnect(CompareCard.Bottom));

            case TypePositionImages.Right:
                return(this.Right.IsConnect(CompareCard.Left));

            case TypePositionImages.Bottom:
                return(this.Bottom.IsConnect(CompareCard.Top));

            case TypePositionImages.Left:
                return(this.Left.IsConnect(CompareCard.Right));

            default:
                throw new Exception("The Compare is not defined! Please check the compare Card Procedure. Value [" + PositionCard.ToString() + "]");
            }
        }
Пример #6
0
 private bool IsPossiblePutCardOnBoard(int x, int y, CardDefinition card)
 {
     // Card of upper
     if (y < sizeY && (this.boardField[x, y + 1] != null))
     {
         if (card.Compare(this.boardField[x, y + 1], TypePositionImages.Top) == false)
         {
             return(false);
         }
     }
     // Card of Right
     if (x < sizeX && (this.boardField[x + 1, y] != null))
     {
         if (card.Compare(this.boardField[x + 1, y], TypePositionImages.Right) == false)
         {
             return(false);
         }
     }
     // Card of bottom
     if (y > 0 && (this.boardField[x, y - 1] != null))
     {
         if (card.Compare(this.boardField[x, y - 1], TypePositionImages.Bottom) == false)
         {
             return(false);
         }
     }
     // Card of Left
     if (x > 0 && (this.boardField[x - 1, y] != null))
     {
         if (card.Compare(this.boardField[x - 1, y], TypePositionImages.Left) == false)
         {
             return(false);
         }
     }
     return(true);
 }
Пример #7
0
 public void RemoveCard(CardDefinition card)
 {
     this.Items.Remove(card);
 }
Пример #8
0
 public void AddCardToPack(CardDefinition card)
 {
     this.Items.Add(card);
 }