コード例 #1
0
        public IEnumerable <Card> Take(Type cardType, int count)
        {
            IEnumerable <Card> returnCards = _Cards.FindAll(card => card.CardType == cardType).Take(count);

            if (count == 0)
            {
                return(returnCards);
            }
            if (returnCards.Count() == 0)
            {
                throw new Exception("Nothing to take!");
            }

            if (_Game.State != GameState.Setup)
            {
                for (int index = _Tokens.Count - 1; index >= 0; index--)
                {
                    Token token = _Tokens[index];
                    if (token.Gaining())
                    {
                        _Tokens.Remove(token);
                        _Game.Table.TokenPiles.Add(token);
                        if (TokensChanged != null)
                        {
                            TokensChangedEventArgs etcea = new TokensChangedEventArgs(token);
                            TokensChanged(this, etcea);
                        }
                    }
                }
            }

            _Cards.RemoveAll(c => returnCards.Contains(c));

            if (_Game.State != GameState.Setup)
            {
                if (_AsynchronousChanging)
                {
                    if (_AsynchronousPileChangedEventArgs == null)
                    {
                        _AsynchronousPileChangedEventArgs = new PileChangedEventArgs(null, PileChangedEventArgs.Operation.Removed, returnCards);
                    }
                    else
                    {
                        _AsynchronousPileChangedEventArgs.RemovedCards.AddRange(returnCards);
                    }
                }
                else if (PileChanged != null)
                {
                    PileChangedEventArgs pcea = new PileChangedEventArgs(null, PileChangedEventArgs.Operation.Removed, returnCards);
                    PileChanged(this, pcea);
                }
            }

            return(returnCards);
        }
コード例 #2
0
 public void Bought(Player player)
 {
     foreach (Token token in _Tokens)
     {
         if (token.Buying(_Game.Table, player))
         {
             _Tokens.Remove(token);
             _Game.Table.TokenPiles.Add(token);
             if (TokensChanged != null)
             {
                 TokensChangedEventArgs etcea = new TokensChangedEventArgs(token);
                 TokensChanged(this, etcea);
             }
         }
     }
 }
コード例 #3
0
        public void AddToken(Token token)
        {
            _Tokens.Add(token);

            if (TokensChanged != null)
            {
                TokensChangedEventArgs etcea = new TokensChangedEventArgs(token);
                TokensChanged(this, etcea);
            }

            PileChangedEventArgs pcea = new PileChangedEventArgs(PileChangedEventArgs.Operation.Reset);

            if (_AsynchronousChanging)
            {
                _AsynchronousPileChangedEventArgs = pcea;
            }
            else if (PileChanged != null)
            {
                PileChanged(this, pcea);
            }
        }
コード例 #4
0
        public override void Reset()
        {
            base.Reset();

            if (_Tokens.RemoveAll(token => token.IsTemporary) > 0)
            {
                if (TokensChanged != null)
                {
                    TokensChangedEventArgs tcea = new TokensChangedEventArgs(null);
                    TokensChanged(this, tcea);
                }
            }

            PileChangedEventArgs pcea = new PileChangedEventArgs(PileChangedEventArgs.Operation.Reset);

            if (_AsynchronousChanging)
            {
                _AsynchronousPileChangedEventArgs = pcea;
            }
            else if (PileChanged != null)
            {
                PileChanged(this, pcea);
            }
        }