//子のときに役を選択 private ulong SelectBitHandOnNoneDealer(int id, GameData gameData) { var bitPlayerCard = bitPlayerCards[id]; var playerCard = new PlayerCard(bitPlayerCard, gameData); var legalHands = playerCard.GetLegalHands(gameData); if (bit.IsSequence(gameData.BitFieldCard)) { legalHands.ForEach(h => { var next = playerCard.CreateNextPlayerCard(h.BitHand, gameData); if (next.CanEndGame || playerCard.Score <= next.Score + 1) { h.Selected = true; } }); } else { for (int i = 0; i < legalHands.Count; i++) { var h = legalHands[i]; var next = playerCard.CreateNextPlayerCard(h.BitHand, gameData); if (h.CanEndTurn && playerCard.CanEndGame) { h.Selected = true; } else if (h.CanEndTurn) { if (playerCard.Hands.Count < 4 || next.Hands.Exists(h2 => h2.CanEndTurn)) { h.Selected = true; } } else if (next.Hands.Count == 1 && next.Hands[0].Score <= 50) { continue; } else if (next.CanEndGame) { h.Selected = true; } else if (IsPrettyHigh(h.BitHand, gameData.IsRevolutionalizing) && next.Hands.Count >= 4 && next.Score > 0) { continue; } else if (next.Score <= playerCard.Score) { h.Selected = true; } } } var selected = legalHands.Where(h => h.Selected).ToList <Hand>(); if (selected.Count == 0) { return(0); } var min = Mathf.Infinity; int m = 0; for (int i = 0; i < selected.Count; i++) { var next = playerCard.CreateNextPlayerCard(selected[i].BitHand, gameData); if (next.Score <= min) { if (next.Score == min) { if (selected[i].Rank < selected[m].Rank) { m = i; } } else { m = i; } min = next.Score; } } return(selected[m].BitHand); }