private async void Deal()
        {
            ComputerThoughts = "You dare challenge I? I can calculate more moves in a second than you can possibly imagine!";

            if (dealFinishied)
            {
                dealFinishied = false;
                var deck = Cards.Shuffle(Cards.FullDeck);

                foreach (var card in deck)
                {
                    RemainingDeck.Add(card);
                    await Task.Delay(1);
                }

                for (int i = 0; i < 10; i++)
                {
                    ComputerCards.Add(DrawTopCardFromDeck());
                    await Task.Delay(30);

                    HumanCards.Add(DrawTopCardFromDeck());
                    await Task.Delay(30);
                }

                Discards.Add(DrawTopCardFromDeck());
                dealFinishied = true;
            }
        }
示例#2
0
 private void DiscardCardFromHand(Cards.Card p)
 {
     if (!humanDiscard && humanDraw)
     {
         HumanCards.Remove(p);
         Discards.Add(p);
         removePossibleCard(p);
         humanDiscard = true;
         startGame    = true;
         playerTurn   = false;
     }
     else
     {
         if (!startGame)
         {
             RaiseNotification("You must draw a card first", "Invalid Action");
         }
         else
         {
             if (!playerTurn)
             {
                 RaiseNotification("You already discard a card", "Invalid Action");
             }
             else
             {
                 RaiseNotification("You must draw a card first", "Invalid Action");
             }
         }
     }
 }
示例#3
0
        private async void Deal()
        {
            var deck = Cards.Shuffle(Cards.FullDeck);

            foreach (var card in deck)
            {
                PossibleDeck.Add(card); // Possible list of card
                RemainingDeck.Add(card);
                await Task.Delay(1);
            }

            for (int i = 0; i < 10; i++)
            {
                Cards.Card computerCard = DrawTopCardFromDeck();
                ComputerCards.Add(computerCard);
                // Remove the list of card on computer hand, as it is seen
                removePossibleCard(computerCard);
                await Task.Delay(30);

                HumanCards.Add(DrawTopCardFromDeck());
                await Task.Delay(30);
            }

            Discards.Add(DrawTopCardFromDeck());
            // Remove the discard from possible deck
            removePossibleCard(Discards[Discards.Count - 1]);
            ScoreToWin = "Score To Win : " + winingScore.ToString();
            scoreLabel(firstWinnerScore, secondWinnerScore);
        }
示例#4
0
        public void Dahai(int index, bool isRiichi)
        {
            if (index != 13)
            {
                index = Hand.Tehai.IndexOf(Hand.SortedTehai[index]);
            }
            if (isRiichi)
            {
                //if (Shanten.CalculateShanten(Hand.AllTiles) != 0) return;
                RiichiMode      = true;
                isDaburuRiichi_ = Discards.Count == 0;
            }

            Discards.Add(Hand.Dahai(index).Value);
            if (wall_.RemainCount == 0)
            {
                IsRyukyoku = true;
            }
            else
            {
                Tsumo(new HandConfig(options: rules_,
                                     isTsumo: true,
                                     isRiichi: RiichiMode,
                                     isIppatsu: isRiichi,
                                     isDaburuRiichi: RiichiMode && isDaburuRiichi_,
                                     playerWind: Constants.EAST,
                                     roundWind: Constants.EAST));
            }
        }
示例#5
0
 private void CleanUpCards()
 {
     HumanCards.Clear();
     ComputerCards.Clear();
     RemainingDeck.Clear();
     Discards.Clear();
     Deal();
 }
示例#6
0
 private void TakeCardFromDiscardPile(Cards.Card p)
 {
     if (humanTurn)
     {
         Discards.Remove(p);
         HumanCards.Add(p);
     }
 }
示例#7
0
 private void DiscardCardFromHand(Cards.Card p)
 {
     if (HumanCards.Count > 10 && humanTurn)
     {
         HumanCards.Remove(p);
         Discards.Add(p);
         humanTurn = false;
     }
 }
 private void TakeCardFromDiscardPile(Cards.Card p)
 {
     if (!takenFromDeckOrDiscardPile)
     {
         Discards.Remove(p);
         HumanCards.Add(p);
         takenFromDeckOrDiscardPile = true;
         canNowDiscard = true;
     }
 }
示例#9
0
        private void ComputerPlayerTurn()
        {
            Cards.Card card = DrawTopCardFromDeck();
            ComputerCards.Add(card);
            ComputerCards.Remove(card);

            Discards.Add(card);
            computerStage = false;
            pickUpStage   = true;
        }
示例#10
0
        private void ComputerTurn()
        {
            var takeDiscard = ComputerPlayer.ComputerPickupDiscard(ComputerCards, Discards[Discards.Count - 1], RemainingDeck);

            if (takeDiscard)
            {
                var discardCard = Discards[Discards.Count - 1];
                Discards.Remove(discardCard);
                ComputerCards.Add(discardCard);
            }
            else
            {
                Cards.Card remainingDeckCards = RemainingDeck[RemainingDeck.Count - 1];
                RemainingDeck.Remove(remainingDeckCards);
                ComputerCards.Add(remainingDeckCards);
            }

            var compMove = ComputerPlayer.ComputerMove(ComputerCards);

            ComputerCards.Remove(compMove.Item2.Value);
            Discards.Add(compMove.Item2.Value);

            var scores = GinRummy.Score(ComputerCards, HumanCards);

            if (compMove.Item1.IsGin)
            {
                compScore += scores;
                if (humanScore < 100 && compScore < 100)
                {
                    RaiseNotification("Human Score: " + humanScore + ". Computer Score: " + compScore, "Scores So Far");
                    CleanUpCards();
                }
            }
            else if (compMove.Item1.IsKnock)
            {
                if (scores > 0)
                {
                    compScore += scores;
                    if (humanScore < 100 && compScore < 100)
                    {
                        RaiseNotification("Human Score: " + humanScore + ". Computer Score: " + compScore, "Scores So Far");
                        CleanUpCards();
                    }
                }
                else
                {
                    humanScore += Math.Abs(scores);
                    if (humanScore < 100 && compScore < 100)
                    {
                        RaiseNotification("Human Score: " + humanScore + ". Computer Score: " + compScore, "Scores So Far");
                        CleanUpCards();
                    }
                }
            }
        }
示例#11
0
        async private void ArtificialPlayer()
        {
            if (takenFromDeckOrDiscardPile)
            {
                while (true)
                {
                    ComputerThoughts = "Calculating your impending doom ...";


                    foreach (var card in ComputerCards)
                    {
                        computerSeen.Remove(card);
                    }

                    GinRummy.sortByRankAndSuit(ComputerCards);

                    var x = ComputerPlayer.averageAllOfThePossibleDeadwoods(computerSeen, ComputerCards);


                    var pickupFromDeckOrDiscard = await Task.Run(() => ComputerPlayer.ComputerPickupDiscard(ComputerCards, Discards.First(), computerSeen));


                    if (pickupFromDeckOrDiscard) // picking up from the deck
                    {
                        ComputerThoughts = "You can not comprehend how much I know the top of the deck will benefit me, fool!";
                        ComputerCards.Add(DrawTopCardFromDeck());
                        await Task.Delay(5000);

                        var cardToAddToDiscard = ComputerPlayer.ComputerMove(ComputerCards);
                        ComputerCards.Remove(cardToAddToDiscard.Item2.Value);
                        Discards.Add(cardToAddToDiscard.Item2.Value);
                    }
                    else     // picking up from the discard
                    {
                        ComputerThoughts = "Ahh this card will do very nicely, my thanks for allowing me to have it, fool!";

                        await Task.Delay(2000);

                        var topOfDiscard = Discards[Discards.Count - 1];
                        ComputerCards.Add(topOfDiscard);
                        Discards.Remove(topOfDiscard);
                        await Task.Delay(5000);

                        var cardToAddToDiscard = ComputerPlayer.ComputerMove(ComputerCards);
                        ComputerCards.Remove(cardToAddToDiscard.Item2.Value);
                        Discards.Add(cardToAddToDiscard.Item2.Value);
                    }
                    ComputerThoughts = "I now end my turn. Your move, human." + GinRummy.Deadwood(ComputerCards);

                    break;
                }
                canNowDiscard = false;
                takenFromDeckOrDiscardPile = false;
            }
        }
示例#12
0
 private void nextRound()
 {
     CheckForEndGame();
     takenFromDeckOrDiscardPile = false;
     canNowDiscard = false;
     HumanCards.Clear();
     ComputerCards.Clear();
     RemainingDeck.Clear();
     Discards.Clear();
     Deal();
 }
        public override bool CanMoveToAnotherPile(int whichOne)
        {
            if (Discards !.HasCard(whichOne) == false)
            {
                throw new BasicBlankException($"Must have at least one card on {whichOne}");
            }
            var oldCard = Discards.GetLastCard(whichOne);
            var newCard = Discards.GetLastCard(PreviousSelected);

            return((int)oldCard.Value + newCard.Value == EnumCardValueList.Jack);
        }
示例#14
0
文件: Deck.cs 项目: norleaf/Nemesis
        public T DrawCard()
        {
            if (!DrawPile.Any())
            {
                DrawPile = new Queue <T>(Discards.Shuffle().ToArray());
                Discards.Clear();
            }
            var card = DrawPile.Dequeue();

            HandCards.Add(card);
            return(card);
        }
示例#15
0
        private void DiscardCardFromHand(Cards.Card p)
        {
            if (canNowDiscard)
            {
                HumanCards.Remove(p);
                Discards.Add(p);

                canNowDiscard = false;
                computerSeen.Remove(p);
                ArtificialPlayer();
            }
        }
示例#16
0
 private void TakeCardFromDiscardPile(Cards.Card p)
 {
     if (!humanDraw)
     {
         Discards.Remove(p);
         HumanCards.Add(p);
         humanDraw = true;
     }
     else
     {
         RaiseNotification("You already take a card", "Invalid Action");
     }
 }
示例#17
0
 private void TakeCardFromDiscardPile(Cards.Card p)
 {
     if (pickUpStage)
     {
         Discards.Remove(p);
         HumanCards.Add(p);
         pickUpStage  = false;
         discardStage = true;
     }
     else
     {
         RaiseNotification("Not in Pick-Up Stage", "Title");
     }
 }
        public override bool CanAddSingleCard(int whichOne, SolitaireCard thisCard)
        {
            if (Discards !.HasCard(whichOne) == false)
            {
                return(true);
            }
            var oldCard = Discards.GetLastCard(whichOne);

            if (thisCard.Suit != oldCard.Suit)
            {
                return(false);
            }
            return(oldCard.Value - 1 == thisCard.Value);
        }
示例#19
0
 private void DiscardCardFromHand(Cards.Card p)
 {
     if (discardStage)
     {
         HumanCards.Remove(p);
         Discards.Add(p);
         discardStage  = false;
         computerStage = true;
         ComputerPlayerTurn();
     }
     else
     {
         RaiseNotification("Not in Discard Stage", "Title");
     }
 }
示例#20
0
        public override bool CanAddSingleCard(int whichOne, SolitaireCard thisCard)
        {
            if (Discards !.HasCard(whichOne) == false)
            {
                return(true);
            }
            if (whichOne == 2)
            {
                return(false);
            }
            var oldCard = Discards.GetLastCard(whichOne);

            if (oldCard.Value - 1 == thisCard.Value)
            {
                return(true);
            }
            return(oldCard.Value == EnumCardValueList.LowAce && thisCard.Value == EnumCardValueList.King); //because round corner.
        }
示例#21
0
        // Function to reset the game for next rounds
        // The game will continue if none of player has exceeded
        // maximum score to win
        private void resetGame()
        {
            Discards.Clear();
            HumanCards.Clear();
            ComputerCards.Clear();
            RemainingDeck.Clear();
            PossibleDeck.Clear();
            startGame    = false;
            playerTurn   = true;
            humanDraw    = false;
            humanDiscard = false;

            if (firstWinnerScore >= winingScore || secondWinnerScore >= winingScore)
            {
                scoreReset();
            }
            Deal();
        }
        public override bool CanMoveToAnotherPile(int whichOne)
        {
            if (PreviousSelected == -1)
            {
                throw new BasicBlankException("There is no pile even selected");
            }
            if (Discards !.HasCard(whichOne) == false)
            {
                return(false); //can only fill an empty spot with a card from the deck
            }
            var oldCard = Discards.GetLastCard(whichOne);
            var newCard = Discards.GetLastCard(PreviousSelected);

            if (newCard.Suit != oldCard.Suit)
            {
                return(false);
            }
            return(oldCard.Value - 1 == newCard.Value);
        }
        public override void MoveSingleCard(int whichOne)
        {
            if (GlobalClass.MainMod !.DeckPile !.IsEndOfDeck() == true)
            {
                throw new BasicBlankException("Can't be at the end of the deck.  If so; alot of rethinking is required");
            }
            var thisCard = GlobalClass.MainMod.DeckPile.DrawCard();

            Discards !.RemoveCardFromPile(PreviousSelected);
            Discards.RemoveCardFromPile(whichOne);
            Discards.PileList !.ForEach(thisPile => thisPile.IsSelected = false); //try this way.
            Discards.AddCardToPile(PreviousSelected, thisCard);
            if (GlobalClass.MainMod.DeckPile.IsEndOfDeck())
            {
                throw new BasicBlankException("Can't be at the end of the deck for the second card.");
            }
            thisCard = GlobalClass.MainMod.DeckPile.DrawCard();
            Discards.AddCardToPile(whichOne, thisCard);
            PreviousSelected = -1;
        }
示例#24
0
        private void ComputerDiscardCardFromHand()
        {
            if (humanDiscard)
            {
                ComputerPlayer.Move move    = ComputerPlayer.ComputerMove(ComputerCards).Item1;
                Cards.Card          discard = ComputerPlayer.ComputerMove(ComputerCards).Item2.Value;
                Discards.Add(discard);
                ComputerCards.Remove(discard);
                humanDiscard = false;
                playerTurn   = true;

                if (move == ComputerPlayer.Move.Gin)
                {
                    endGame();
                }
                else if (move == ComputerPlayer.Move.Knock)
                {
                    endGame();
                }
            }
        }
示例#25
0
        private async void Deal()
        {
            var deck = Cards.Shuffle(Cards.FullDeck);

            foreach (var card in deck)
            {
                RemainingDeck.Add(card);
                await Task.Delay(1);
            }

            for (int i = 0; i < 10; i++)
            {
                ComputerCards.Add(DrawTopCardFromDeck());
                await Task.Delay(30);

                HumanCards.Add(DrawTopCardFromDeck());
                await Task.Delay(30);
            }

            Discards.Add(DrawTopCardFromDeck());
        }
示例#26
0
        public override bool CanMoveToAnotherPile(int whichOne)
        {
            if (whichOne == 2)
            {
                return(false);
            }
            if (Discards !.HasCard(whichOne) == false)
            {
                return(PreviousSelected == 2);
            }
            if (PreviousSelected == 2)
            {
                return(false);
            }
            var oldCard = Discards.GetLastCard(whichOne);
            var newCard = Discards.GetLastCard(PreviousSelected);

            if (oldCard.Value - 1 == newCard.Value)
            {
                return(true);
            }
            return(oldCard.Value == EnumCardValueList.LowAce && newCard.Value == EnumCardValueList.King); //because round corner.
        }
示例#27
0
 private void ComputerTakeCardFromDiscardPile()
 {
     Cards.Card topDiscard = Discards[Discards.Count - 1];
     if (humanDraw)
     {
         bool computerPickUp = ComputerPlayer.ComputerPickupDiscard(ComputerCards, topDiscard, PossibleDeck);
         if (computerPickUp)
         {
             ComputerCards.Add(topDiscard);
             Discards.Remove(topDiscard);
             humanDraw = false;
             ComputerDiscardCardFromHand();
         }
         else
         {
             var topHiddenCard = RemainingDeck[RemainingDeck.Count - 1];
             ComputerCards.Add(topHiddenCard);
             PossibleDeck.Remove(topHiddenCard);
             RemainingDeck.Remove(topHiddenCard);
             humanDraw = false;
             ComputerDiscardCardFromHand();
         }
     }
 }
示例#28
0
文件: Deck.cs 项目: norleaf/Nemesis
 public void DiscardMultible(params T[] cards)
 {
     HandCards.RemoveAll(c => cards.Contains(c));
     Discards.AddRange(cards);
 }
示例#29
0
文件: Deck.cs 项目: norleaf/Nemesis
 public void DiscardHand()
 {
     Discards.AddRange(HandCards.ToArray());
     HandCards.Clear();
 }
示例#30
0
文件: Deck.cs 项目: norleaf/Nemesis
 public void Discard(T card)
 {
     HandCards.Remove(card);
     Discards.Add(card);
 }