Ejemplo n.º 1
0
        private void EventSource_WaitingForFirstBidStarted(object sender, GameLogic.PlayerPositionEventArgs e)
        {
            Common.GameTrigger trigger;
            if (this.IsUser(e.PlayerPosition))
            {
                trigger = this.userInterface.LetUserPlaceFirstBidOrPass(InitialBidAmount);
                this.ValidateTrigger(trigger, BidOrPassTriggers, "initial bid");
                this.currentStateStack.DeltaChanges.Add(new GameStateChangeInfo()
                {
                    HumanTrigger = trigger
                });
            }
            else
            {
                // TODO: Implement AI
                trigger = Common.GameTrigger.BidPlaced;
            }

            if (trigger == Common.GameTrigger.Passed)
            {
                this.userInterface.DisplayPlayerAsPassed(e.PlayerPosition);
            }
            else
            {
                this.currentBidAmount = InitialBidAmount;
                if (!this.IsUser(e.PlayerPosition))
                {
                    this.userInterface.DisplayAIBid(e.PlayerPosition, this.currentBidAmount);
                }
            }
            this.stateBridge.TriggerSink.SendTrigger(trigger);
        }
Ejemplo n.º 2
0
        private void EventSource_ValidatingCardStarted(object sender, GameLogic.PlayerPositionEventArgs e)
        {
            // TODO: Actually validate card
            bool cardIsValid = true;

            // Assumption: AI always provides valid cards.
            if (this.IsUser(e.PlayerPosition) && !cardIsValid)
            {
                this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.InvalidCardPlaced);
            }
            else
            {
                // TODO: Check if the card is currently leading
                bool cardIsWinning = true;
                if (cardIsWinning)
                {
                    this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.WinningCardPlaced);
                }
                else
                {
                    this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.LosingCardPlaced);
                }
                this.userInterface.PlaceCardInMiddle(e.PlayerPosition, this.mostRecentCard);
            }
        }
Ejemplo n.º 3
0
 private void EventSource_MeldingStarted(object sender, GameLogic.PlayerPositionEventArgs e)
 {
     // TODO: Display actual melds
     this.userInterface.DisplayMelds(
         new List <Common.MeldData>()
     {
         new Common.MeldData()
         {
             Melds = new List <Common.SingleMeld>()
             {
                 new Common.SingleMeld()
                 {
                     Cards = this.cardsPerPlayer[0].Take(5).ToList(), Points = 150
                 },
                 new Common.SingleMeld()
                 {
                     Cards = this.cardsPerPlayer[0].Skip(5).Take(2).ToList(), Points = 40
                 }
             }
         },
         new Common.MeldData()
         {
             Melds = new List <Common.SingleMeld>()
             {
                 new Common.SingleMeld()
                 {
                     Cards = this.cardsPerPlayer[1].Take(2).ToList(), Points = 20
                 }
             }
         },
         new Common.MeldData()
         {
             Melds = new List <Common.SingleMeld>()
             {
                 new Common.SingleMeld()
                 {
                     Cards = this.cardsPerPlayer[2].Take(4).ToList(), Points = 80
                 }
             }
         },
         new Common.MeldData()
         {
             Melds = new List <Common.SingleMeld>()
             {
                 new Common.SingleMeld()
                 {
                     Cards = this.cardsPerPlayer[3].Take(5).ToList(), Points = 50
                 }
             }
         }
     });
     this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.MeldsSeenByAllPlayers);
 }
Ejemplo n.º 4
0
        private void EventSource_ExchangingCardsWithDabbStarted(object sender, GameLogic.PlayerPositionEventArgs e)
        {
            this.userInterface.UncoverDabb(this.cardsInDabb);

            Common.GameTrigger trigger;
            if (this.IsUser(e.PlayerPosition))
            {
                IEnumerable <Common.Card> discardedCards = null;
                trigger = this.userInterface.LetUserExchangeCardsWithDabb(out discardedCards, out this.trumpSuit);
                // TODO: Validate and process discarded cards and selected trump suit
                var removedDabbCards   = new HashSet <Common.Card>(this.cardsInDabb);
                var removedPlayerCards = new List <Common.Card>();
                foreach (var discardedCard in discardedCards)
                {
                    if (this.cardsInDabb.Contains(discardedCard))
                    {
                        // The card remains in dabb, remove it from the set of cards which could have been taken by the player
                        removedDabbCards.Remove(discardedCard);
                    }
                    {
                        // The card used to be a player card but was discarded
                        removedPlayerCards.Add(discardedCard);
                    }
                }
                this.cardsInDabb       = this.cardsInDabb.Except(removedDabbCards.ToList()).Concat(removedPlayerCards).ToList();
                this.cardsPerPlayer[0] = this.cardsPerPlayer[0].Except(removedPlayerCards).Concat(removedDabbCards.ToList());
                // TODO: Actually rearrange cards
                this.userInterface.RearrangeCardsForUser(this.cardsPerPlayer.First());
            }
            else
            {
                // TODO: Implement AI
                trigger        = Common.GameTrigger.TrumpSelected;
                this.trumpSuit = Common.CardSuit.Hearts;
            }

            this.ValidateTrigger(
                trigger,
                new HashSet <Common.GameTrigger>()
            {
                Common.GameTrigger.TrumpSelected,
                Common.GameTrigger.GoingOut,
                Common.GameTrigger.BettelAnnounced,
                Common.GameTrigger.DurchAnnounced
            },
                "dabb exchange"
                );
            this.playerWentOut = trigger == Common.GameTrigger.GoingOut;

            this.stateBridge.TriggerSink.SendTrigger(trigger);
        }
Ejemplo n.º 5
0
        private void HandleBidOrPass(Common.GameTrigger bidTriggerType, GameLogic.PlayerPositionEventArgs e)
        {
            var potentialBid = this.currentBidAmount + 10;

            Common.GameTrigger trigger;
            if (this.IsUser(e.PlayerPosition))
            {
                trigger = this.userInterface.LetUserDoCounterBidOrPass(potentialBid);
                this.ValidateTrigger(trigger, BidOrPassTriggers, "bidding");
                if (trigger == Common.GameTrigger.BidPlaced)
                {
                    trigger = bidTriggerType; // might be bid or counterbid
                }
                this.currentStateStack.DeltaChanges.Add(new GameStateChangeInfo()
                {
                    HumanTrigger = trigger
                });
            }
            else
            {
                // TODO: Implement AI
                if (this.currentBidAmount < (150 + 20 * e.PlayerPosition))
                {
                    trigger = bidTriggerType;
                }
                else
                {
                    trigger = Common.GameTrigger.Passed;
                }
            }

            if (trigger == Common.GameTrigger.Passed)
            {
                this.userInterface.DisplayPlayerAsPassed(e.PlayerPosition);
            }
            else
            {
                this.currentBidAmount = potentialBid;
                if (!this.IsUser(e.PlayerPosition))
                {
                    this.userInterface.DisplayAIBid(e.PlayerPosition, this.currentBidAmount);
                }
            }
            this.stateBridge.TriggerSink.SendTrigger(trigger);
        }
Ejemplo n.º 6
0
 private void EventSource_WaitingForCardStarted(object sender, GameLogic.PlayerPositionEventArgs e)
 {
     this.userInterface.ActivatePlayer(e.PlayerPosition);
     if (this.IsUser(e.PlayerPosition))
     {
         this.mostRecentCard = this.userInterface.LetUserSelectCard();
     }
     else
     {
         // TODO: Implement AI
         this.mostRecentCard = this.cardsPerPlayer[e.PlayerPosition].First();
         this.cardsPerPlayer[e.PlayerPosition] = this.cardsPerPlayer[e.PlayerPosition].Except(new List <Common.Card>()
         {
             this.mostRecentCard
         });
     }
     this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.CardPlaced);
 }
Ejemplo n.º 7
0
 private void EventSource_CountingPlayerOrTeamScoresStarted(object sender, GameLogic.PlayerPositionEventArgs e)
 {
     // TODO: Actually calculate score
     this.userInterface.MoveCardsToTrickWinner(e.PlayerPosition);
     this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.ScoreCalculationFinished);
 }
Ejemplo n.º 8
0
 private void EventSource_StartingNewRoundStarted(object sender, GameLogic.PlayerPositionEventArgs e)
 {
     this.userInterface.MoveCardsToTrickWinner(e.PlayerPosition);
     this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.NewRoundStarted);
 }
Ejemplo n.º 9
0
 private void EventSource_SwitchingCurrentTrickPlayerStarted(object sender, GameLogic.PlayerPositionEventArgs e)
 {
     // Nothing to do here
     this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.PlayerSwitched);
 }
Ejemplo n.º 10
0
 private void EventSource_RevertingInvalidMoveStarted(object sender, GameLogic.PlayerPositionEventArgs e)
 {
     this.userInterface.HandleInvalidMove(new List <Common.Card>());
     this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.RevertingFinished);
 }
Ejemplo n.º 11
0
 private void Sender_TrickTakingStarted(object sender, GameLogic.PlayerPositionEventArgs e)
 {
     this.userInterface.PrepareTrickTaking(this.cardsPerPlayer, this.currentDealer);
     this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.ReadyForTrickTaking);
 }
Ejemplo n.º 12
0
 private void EventSource_CalculatingGoingOutScoreStarted(object sender, GameLogic.PlayerPositionEventArgs e)
 {
     // TODO: Calculate actual score
     this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.ScoreCalculationFinished);
 }
Ejemplo n.º 13
0
 private void EventSource_WaitingForCounterOrPassStarted(object sender, GameLogic.PlayerPositionEventArgs e)
 {
     this.HandleBidOrPass(Common.GameTrigger.BidCountered, e);
 }