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