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); }
/// <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); }
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)); }
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); }
/// <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() + "]"); } }
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); }
public void RemoveCard(CardDefinition card) { this.Items.Remove(card); }
public void AddCardToPack(CardDefinition card) { this.Items.Add(card); }