Ejemplo n.º 1
0
 private void PromptForSuggestionResult(object sender, ISuggestionResponseViewModel suggestionResponseViewModel)
 {
     new SuggestionResponseDialog(suggestionResponseViewModel)
     {
         Owner = this,
         WindowStartupLocation = WindowStartupLocation.CenterOwner
     }.ShowDialog();
 }
        public SuggestionResponseDialog(ISuggestionResponseViewModel vm)
        {
            InitializeComponent();

            _vm             = vm;
            DataContext     = _vm;
            CloseWithResult = new RelayCommand <DialogResult>(DoCloseWithResult);
            CloseWithCard   = new RelayCommand <Card>(DoCloseWithCard);
            if (!_vm.CanChooseCard)
            {
                Height = 150;
            }
        }
Ejemplo n.º 3
0
        private void OnPromptForSuggestionResult(object sender, ISuggestionResponseViewModel suggestion)
        {
            var responder      = suggestion.Responder;
            var responderCards = suggestion.Cards.Intersect(PlayerHands[responder]).ToArray();

            if (suggestion.Asker == _solver.MyPlayer)
            {
                // I am asking another player
                if (responderCards.Length > 0)
                {
                    suggestion.ResultCard = responderCards[0];
                    suggestion.Result     = DialogResult.Card;
                }
                else
                {
                    suggestion.Result = DialogResult.None;
                }
            }
            else
            {
                // Another player is asking another player
                suggestion.Result = responderCards.Length > 0 ? DialogResult.Maybe : DialogResult.None;
            }
        }
Ejemplo n.º 4
0
        private bool GetSuggestionResponse(Player player, ref bool stopped)
        {
            if (ReferenceEquals(player, _solver.MyPlayer))
            {
                var prompt = new SimplePrompt("Hit OK when done.", "Hit OK when done.", MessageBoxButton.OK, MessageBoxImage.None);
                PromptForSimpleResponse?.Invoke(this, prompt);
                if (player.Hand.Intersect(_selectedCards).Any())
                {
                    _solver.Changes.Add(new SuggestionResponse(DateTime.Now, player, "?"));
                    stopped = true;
                    return(false);
                }
                _solver.Changes.Add(new SuggestionResponse(DateTime.Now, player, null));
                return(true);
            }

            _currentAsk = new SuggestionResponseViewModel(PlayerTakingTurn, player, _solver.MyPlayer.IsTakingTurn, _selectedCards);
            PromptForSuggestionResult?.Invoke(this, _currentAsk);
            var addedChange = false;

            try
            {
                switch (_currentAsk.Result)
                {
                case DialogResult.Cancel:
                    return(false);

                case DialogResult.Skip:
                    return(true);

                case DialogResult.Maybe:
                    _solver.Changes.Add(new SuggestionResponse(DateTime.Now, player, "?"));
                    addedChange = true;
                    _solver.PlayerMightHaveCards(player, _selectedCards,
                                                 $"{player.Name} showed a card to {PlayerTakingTurn.Name}.");
                    stopped = true;
                    return(false);

                case DialogResult.None:
                    _solver.Changes.Add(new SuggestionResponse(DateTime.Now, player, null));
                    addedChange = true;
                    _solver.PlayerDoesNotHaveCards(player, _selectedCards,
                                                   $"{player.Name} said they didn't have this card when asked.");
                    return(true);

                case DialogResult.Card:
                    _solver.Changes.Add(new SuggestionResponse(DateTime.Now, player, _currentAsk.ResultCard.Name));
                    addedChange = true;
                    _solver.PlayerHasCard(player, _currentAsk.ResultCard, $"{player.Name} showed me {_currentAsk.ResultCard}.");
                    stopped = true;
                    return(false);

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            catch (GameException)
            {
                if (addedChange)
                {
                    _solver.Changes.RemoveAt(_solver.Changes.Count - 1);
                }
                throw;
            }
        }