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); }
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); } }
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); }
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); }
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); }
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); }
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); }
private void EventSource_StartingNewRoundStarted(object sender, GameLogic.PlayerPositionEventArgs e) { this.userInterface.MoveCardsToTrickWinner(e.PlayerPosition); this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.NewRoundStarted); }
private void EventSource_SwitchingCurrentTrickPlayerStarted(object sender, GameLogic.PlayerPositionEventArgs e) { // Nothing to do here this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.PlayerSwitched); }
private void EventSource_RevertingInvalidMoveStarted(object sender, GameLogic.PlayerPositionEventArgs e) { this.userInterface.HandleInvalidMove(new List <Common.Card>()); this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.RevertingFinished); }
private void Sender_TrickTakingStarted(object sender, GameLogic.PlayerPositionEventArgs e) { this.userInterface.PrepareTrickTaking(this.cardsPerPlayer, this.currentDealer); this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.ReadyForTrickTaking); }
private void EventSource_CalculatingGoingOutScoreStarted(object sender, GameLogic.PlayerPositionEventArgs e) { // TODO: Calculate actual score this.stateBridge.TriggerSink.SendTrigger(Common.GameTrigger.ScoreCalculationFinished); }
private void EventSource_WaitingForCounterOrPassStarted(object sender, GameLogic.PlayerPositionEventArgs e) { this.HandleBidOrPass(Common.GameTrigger.BidCountered, e); }