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); }