public void DoTurn(ref HanabiGame game)
 {
     if (this.NextAction.Type == HanabiActionType.Hint)
     {
         if (game.HintsRemaining == 0)
         {
             var discard = Hand[0];
             game.DiscardCard(this, 0);
             if (game.IsDangerCard(discard))
             {
                 DangerCardDiscarded(ref game);
             }
         }
         else
         {
             GiveClue(ref game);
         }
     }
     else if (NextAction.Type == HanabiActionType.Play)
     {
         if (SeesCollision(ref game) && game.HintsRemaining > 0 && game.BombsUsed >= 2)
         {
             GiveClue(ref game);
         }
         else
         {
             game.PlayCard(this, NextAction.CardIndex);
             NextAction.Type      = HanabiActionType.Hint;
             NextAction.Card      = null;
             NextAction.CardIndex = -1;
         }
     }
     else // Must be discard
     {
         if (PlaysSeen(ref game) >= 2 && game.HintsRemaining > 0)
         {
             GiveClue(ref game);
         }
         else if (SeesCollision(ref game) && game.HintsRemaining > 0)
         {
             GiveClue(ref game);
         }
         else
         {
             game.DiscardCard(this, NextAction.CardIndex);
             if (game.IsDangerCard(NextAction.Card))
             {
                 DangerCardDiscarded(ref game);
             }
             NextAction.Type      = HanabiActionType.Hint;
             NextAction.Card      = null;
             NextAction.CardIndex = -1;
         }
     }
 }