Exemple #1
0
        private long GetWinningScore(bool recursive)
        {
            var crabCombatGame = new CrabCombatGame(_playersDeck[1], _playersDeck[2]);

            crabCombatGame.Play(recursive: recursive);
            return(crabCombatGame.GetWinningScore());
        }
        public int Play(bool recursive)
        {
            while (_player1Deck.Count > 0 && _player2Deck.Count > 0)
            {
                if (recursive && HasLooped())
                {
                    return(1);
                }

                var player1Card = _player1Deck.Dequeue();
                var player2Card = _player2Deck.Dequeue();

                bool player1Wins = false;

                if (recursive && player1Card <= _player1Deck.Count && player2Card <= _player2Deck.Count)
                {
                    var subGame = new CrabCombatGame(_player1Deck.Take(player1Card).ToArray(), _player2Deck.Take(player2Card).ToArray());
                    player1Wins = subGame.Play(recursive: recursive) == 1;
                }
                else
                {
                    if (player1Card == player2Card)
                    {
                        throw new InvalidOperationException("Undefined rules for equal cards played");
                    }

                    player1Wins = player1Card > player2Card;
                }

                if (player1Wins)
                {
                    _player1Deck.Enqueue(player1Card);
                    _player1Deck.Enqueue(player2Card);
                }
                else
                {
                    _player2Deck.Enqueue(player2Card);
                    _player2Deck.Enqueue(player1Card);
                }
            }

            return(_player2Deck.Count == 0 ? 1 : 2);
        }