public override bool CanMoveCards(int whichOne, out int lastOne)
        {
            if (PreviousSelected == -1)
            {
                throw new BasicBlankException("Cannot find out whether we can move the cards because none was selected");
            }
            lastOne = -1; //until i figure out what else to do.
            var givList = Piles.ListGivenCards(PreviousSelected);

            TempList = givList.ListValidCardsAlternateColors();
            var           thisPile = Piles.PileList[whichOne];
            SolitaireCard oldCard;

            if (thisPile.CardList.Count == 0)
            {
                lastOne = TempList.Count - 1;
                return(true);
            }
            oldCard = Piles.GetLastCard(whichOne);
            if (oldCard.Value == EnumCardValueList.LowAce)
            {
                return(false);
            }
            return(TempList.CanMoveCardsAlternateColors(oldCard, ref lastOne));
        }
        public void Redeal()
        {
            TempList = new DeckRegularDict <SolitaireCard>();
            if (DealNumber == 3)
            {
                throw new BasicBlankException("There are only 3 deals allowed.  Therefore, there is a problem");
            }
            var thisCol = new DeckRegularDict <SolitaireCard>();

            DealNumber++;
            Piles.PileList.ForEach(thisPile =>
            {
                thisPile.CardList.ForEach(thisCard => thisCol.Add(thisCard));
            });
            Piles.ClearBoard();
            thisCol.ShuffleList();
            int y = 0;

            8.Times(x =>
            {
                foreach (var thisPile in Piles.PileList)
                {
                    if (y == thisCol.Count)
                    {
                        break;
                    }
                    var tempCard = thisCol[y];
                    thisPile.CardList.Add(tempCard);
                    y++;
                }
            });
            PreviousSelected = -1;
        }
        public void ExportToExcel()
        {
            SaveFileDialog sfd = new SaveFileDialog();

            sfd.Filter = "Excel 2007 - 2016|*.xlsx";
            sfd.Title  = "选择计算文件";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                if (File.Exists(sfd.FileName))
                {
                    File.Delete(sfd.FileName);
                }
                try
                {
                    var  exporttoexcel = new ExportCalculationSheet(Piles.ToList());
                    Task task          = Task.Run(() => exporttoexcel.Export(sfd.FileName))
                                         .ContinueWith(t => MessageBox.Show($"文件已保存至{sfd.FileName}", "保存成功", MessageBoxButtons.OK, MessageBoxIcon.Information), TaskContinuationOptions.OnlyOnRanToCompletion);
                    //MessageBox.Show($"文件已保存至{sfd.FileName}", "保存成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString(), "输出错误!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
Example #4
0
        private void CalcNums()
        {
            // Вычислить строку номеров свай
            var poses = Piles.Select(p => p.Pos);

            Nums = AcadLib.MathExt.IntsToStringSequence(poses.ToArray());
        }
Example #5
0
        public void AddPile()
        {
            var ret = new GroupItemModel(Piles);

            Piles.Add(ret);
            Selection = ret;
            RaisePropertyChanged("Piles");
        }
 protected override void AfterRemovingFromLastPile(int Lasts)
 {
     if (Piles.HasCardInColumn(Lasts) || GlobalClass.MainModel !.Heel1.IsEndOfDeck())
     {
         return;
     }
     Piles.AddCardToColumn(Lasts, GlobalClass.MainModel.Heel1.DrawCard());
 }
 public override bool CanAddSingleCard(int whichOne, SolitaireCard thisCard)
 {
     if (Piles.HasCardInColumn(whichOne) == false && GlobalClass.MainModel !.Heel1.IsEndOfDeck())
     {
         return(true);
     }
     return(Piles.HasCardInColumn(whichOne) == false && GlobalClass.MainModel !.Heel1 !.CardsLeft() == 1);
 }
Example #8
0
        public void addACardToThePlayPile()
        {
            Piles pile = new Piles();

            pile.addCardToPile(new Card((CardSuite)1, (CardValue)1), (PlayablePiles)0);

            Assert.AreEqual(1, pile.PlayPiles[0].Count);
        }
Example #9
0
        public void placeASecondCardOnThePile()
        {
            Piles pile = new Piles();

            pile.addCardToPile(new Card((CardSuite)1, (CardValue)1), (PlayablePiles)0);
            pile.addCardToPile(new Card((CardSuite)1, (CardValue)2), (PlayablePiles)0);

            Assert.AreEqual(2, pile.PlayPiles[0].Count);
        }
Example #10
0
        public override bool CanAddSingleCard(int whichOne, SolitaireCard thisCard)
        {
            if (Piles.HasCardInColumn(whichOne) == false)
            {
                return(true);
            }
            var prevCard = Piles.GetLastCard(PreviousSelected);

            return(prevCard.Value - 1 == thisCard.Value && prevCard.Color == thisCard.Color);
        }
        public override bool CanAddSingleCard(int whichOne, SolitaireCard thisCard)
        {
            if (Piles.HasCardInColumn(whichOne) == false)
            {
                return(true);
            }
            var oldCard = Piles.GetLastCard(whichOne);

            return(oldCard.Value - 1 == thisCard.Value && oldCard.Color != thisCard.Color);
        }
Example #12
0
        private DeckRegularDict <SolitaireCard> ListValidCards()
        {
            var output = Piles.ListGivenCards(PreviousSelected);

            if (output.Count == 0)
            {
                return(new DeckRegularDict <SolitaireCard>()); //decided this instead of error.
            }
            return(output.ListValidCardsSameSuit());
        }
        public override bool CanAddSingleCard(int whichOne, SolitaireCard thisCard)
        {
            if (Piles.HasCardInColumn(whichOne) == false)
            {
                return(thisCard.Value == EnumCardValueList.King);
            }
            var prevCard = Piles.GetLastCard(whichOne);

            return(prevCard.Value - 1 == thisCard.Value && prevCard.Color != thisCard.Color);
        }
        public void AddPile()
        {
            var ret = new GroupItemViewModel()
            {
                ItemSource = Piles
            };

            Piles.Add(ret);
            Selection = ret;
            RaisePropertyChanged("Piles");
        }
Example #15
0
        public void invalidPileForCardToAdd()
        {
            void addCardWithWrongPile()
            {
                Piles piles = new Piles();

                piles.addCardToPile(new Card((CardSuite)1, (CardValue)1), (PlayablePiles)88);
            }

            Assert.Throws(typeof(InvalidPlayPileException), addCardWithWrongPile);
        }
Example #16
0
        public void isNotAnAce()
        {
            void addCardWithWrongPile()
            {
                Piles piles = new Piles();

                piles.addCardToPile(new Card((CardSuite)2, (CardValue)3), (PlayablePiles)1);
            }

            Assert.Throws(typeof(MustBeAnAceException), addCardWithWrongPile);
        }
        public Pile GetDiscardPile(string identifier)
        {
            var discardPile = Piles.SingleOrDefault(p => p.Type == PileType.Discard && p.Identifier == identifier);

            if (discardPile == null)
            {
                throw new DomainException(DomainErrorCode.InconsistentData, $"No discard pile for game {Id}");
            }

            return(discardPile);
        }
        public Pile GetDeckPile()
        {
            var deckPile = Piles.SingleOrDefault(p => p.Type == PileType.Deck);

            if (deckPile == null)
            {
                throw new DomainException(DomainErrorCode.InconsistentData, "No deck pile found");
            }

            return(deckPile);
        }
Example #19
0
        public void pileDoesNotHaveKing()
        {
            Piles pile = new Piles();

            for (var i = 1; i <= 12; i++)
            {
                pile.addCardToPile(new Card((CardSuite)1, (CardValue)i), (PlayablePiles)0);
            }

            Assert.False(pile.checkIfAnyPileHasAKing());
        }
 protected override void AfterRemovingFromLastPile(int Lasts)
 {
     if (Piles.HasCardInColumn(Lasts) || GlobalClass.MainModel !.Heel1 !.IsEndOfDeck() || GlobalClass.MainModel.Heel1.CardsLeft() == 1)
     {
         return;
     }
     Piles.AddCardToColumn(Lasts, GlobalClass.MainModel.Heel1.DrawCard());
     if (GlobalClass.MainModel.Heel1.CardsLeft() == 1)
     {
         GlobalClass.MainModel.Heel1.DeckStyle = DeckObservablePile <SolitaireCard> .EnumStyleType.AlwaysKnown;
     }
 }
Example #21
0
 public void addCardToPile(Card card, Piles pile)
 {
     if (validatePile(pile))
     {
         int index = (int)pile;
         this.Pile[index].Add(card);
     }
     else
     {
         throw new InvalidStoragePileException((int)pile);
     }
 }
Example #22
0
        public void cannotPlaceASecondCardOnThePile()
        {
            void addCardWithWrongPile()
            {
                Piles piles = new Piles();

                piles.addCardToPile(new Card((CardSuite)2, (CardValue)1), (PlayablePiles)1);
                piles.addCardToPile(new Card((CardSuite)2, (CardValue)5), (PlayablePiles)1);
            }

            Assert.Throws(typeof(InvalidCardValueSizeDifferenceException), addCardWithWrongPile);
        }
        public Pile GetPlayerPile(Player player, string identifierSuffix)
        {
            var identifier = GetPlayerIdentifier(player, identifierSuffix);

            var playerPile = Piles.SingleOrDefault(p => p.Type == PileType.PlayerHand && p.Identifier == identifier);

            if (playerPile == null)
            {
                throw new DomainException(DomainErrorCode.InconsistentData, $"No player pile for game {Id} and player {player.Id}");
            }

            return(playerPile);
        }
        public override bool CanMoveToAnotherPile(int whichOne)
        {
            SolitaireCard newCard;
            SolitaireCard oldCard;

            if (Piles.HasCardInColumn(whichOne) == false)
            {
                return(false);// cannot move because the empty piles are never filled
            }
            oldCard = Piles.GetLastCard(whichOne);
            newCard = GetCard(); // i think
            return(oldCard.Value - 1 == newCard.Value);
        }
Example #25
0
 public void RemoveCards(int whichOne)
 {
     if (TempList.Count != 13)
     {
         throw new BasicBlankException("Must have 13 cards to remove the 13 cards");
     }
     TempList.ForEach(tempCard => Piles.RemoveSpecificCardFromColumn(whichOne, tempCard.Deck));
     if (Piles.HasCardInColumn(whichOne))
     {
         var thisCard = Piles.GetLastCard(whichOne);
         Piles.RemoveFromUnknown(thisCard);
     }
     UnselectAllColumns();
 }
        public override bool CanAddSingleCard(int whichOne, SolitaireCard thisCard)
        {
            if (Piles.HasCardInColumn(whichOne) == false)
            {
                return(thisCard.Value == EnumCardValueList.King);
            }
            var oldCard = Piles.GetLastCard(whichOne);

            if (thisCard.Suit != oldCard.Suit)
            {
                return(false);
            }
            return(oldCard.Value - 1 == thisCard.Value);
        }
        private bool CanBuildFromKing(int pile, SolitaireCard thisCard)
        {
            if (pile > 1)
            {
                throw new BasicBlankException($"Kings must be 0, or 1; not {pile}");
            }
            var oldCard = Piles.GetLastCard(pile);

            if (oldCard.Suit != thisCard.Suit)
            {
                return(false);
            }
            return(oldCard.Value - 1 == thisCard.Value);
        }
        public override bool CanAddSingleCard(int whichOne, SolitaireCard thisCard)
        {
            if (Piles.HasCardInColumn(whichOne) == false)
            {
                if (GlobalClass.MainModel !.Heel1.IsEndOfDeck() == false)
                {
                    throw new BasicBlankException("If its not at the end of the deck; a card needs to be placed");
                }
                return(true);
            }
            var prevCard = Piles.GetLastCard(whichOne);

            return(prevCard.Value - 1 == thisCard.Value && prevCard.Suit != thisCard.Suit);
        }
Example #29
0
        public void returnNullForPileWithKing()
        {
            Piles pile = new Piles();

            for (var i = 1; i <= 12; i++)
            {
                pile.addCardToPile(new Card((CardSuite)1, (CardValue)i), (PlayablePiles)0);
            }

            DiscardPile dp          = new DiscardPile();
            DiscardPile discardPile = pile.getPileWithAKing(dp);

            Assert.IsNull(discardPile);
            Assert.False(dp.DiscardedCards.Any());
        }
Example #30
0
        public void getDiscardPileWithAKing()
        {
            Piles pile = new Piles();

            for (var i = 1; i <= 13; i++)
            {
                pile.addCardToPile(new Card((CardSuite)1, (CardValue)i), (PlayablePiles)0);
            }

            DiscardPile dp          = new DiscardPile();
            DiscardPile discardPile = pile.getPileWithAKing(dp);

            Assert.IsNotNull(discardPile);
            Assert.AreEqual(13, discardPile.DiscardedCards.Count);
        }