今回は第4回に追加したリーチシグナル表示を拡張して、確率表示を追加します。
表示仕様
今回はあまり難しいことは特にありません。
こんな表示を想定しています。
○ Flush4: 9(23%)
フォーマットは以下になります。
[リーチ中の役]: [狙い札数] ( 確率=100 * [狙い札数] / [山札の残数] )
狙い札の数をカウントアップする処理を追加しますが、前回の処理に以下の処理を追加するだけなので、コード全体での掲載は割愛します。
int 狙い札カウンタ; if( !ドロー済( no ) ){ if( 狙い札[ no ].各フラグ == 0){ // 重複カウントチェック 狙い札カウンタ++; // 追加 } 狙い札[ no ].各フラグ++; }
コード
CardSuit.cs
public class CardSuit : MonoBehaviour { void DispReachSignals(HAND_NAME hand) { string str = null; if( ReferenceEquals( reachSignals, null ) ) { return; } // フラッシュ点灯 if( r_flush ){ reachSignals.SetSignalDetail( SIGNAL_ID.SIG_FLUSH, r_flush, "Flush" + maxMarkCount + ": " + c_flush + "(" + (100 * c_flush / drawCtrl.remain) + "%)" ); } else { reachSignals.SetSignal( SIGNAL_ID.SIG_FLUSH, r_flush ); } // ストレート点灯 if( r_straight ){ reachSignals.SetSignalDetail( SIGNAL_ID.SIG_STRAIGHT, r_straight, "Straight" + maxStraightPtnCount + ": " + c_straight + "(" + (100 * c_straight / drawCtrl.remain) + "%)" ); } else { reachSignals.SetSignal( SIGNAL_ID.SIG_STRAIGHT, r_straight ); } // スリーカード以上点灯 if( r_over3 ){ if( pair_num == 2 ){ // two pair -> fullhouse str = "FullHouse"; } else { if( max_paircount == 2 ){ // pair -> three card str = "Three of a kind"; } else if( max_paircount == 3 ){ // three card -> four card str = "Four of a kind"; } } reachSignals.SetSignalDetail( SIGNAL_ID.SIG_OVER_3_OF_A_KIND, r_over3, str + ": " + c_over3 + "(" + (100 * c_over3 / drawCtrl.remain) + "%)" ); } else { reachSignals.SetSignal( SIGNAL_ID.SIG_OVER_3_OF_A_KIND, r_over3 ); } // ツーペア以上点灯 if( r_over2pair ){ if( max_paircount == 2 ){ // pair -> two pair str = "Two Pair"; } else if( max_paircount == 3 ){ // three card -> fullhouse str = "FullHouse"; } reachSignals.SetSignalDetail( SIGNAL_ID.SIG_OVER_2PAIR, r_over2pair, str + ": " + c_over2pair + "(" + (100 * c_over2pair / drawCtrl.remain) + "%)" ); } else { reachSignals.SetSignal( SIGNAL_ID.SIG_OVER_2PAIR, r_over2pair ); } // ペア点灯 if( r_pair ){ reachSignals.SetSignalDetail( SIGNAL_ID.SIG_PAIR, r_pair, "Pair: " + c_pair + "(" + (100 * c_pair / drawCtrl.remain) + "%)" ); } else { reachSignals.SetSignal( SIGNAL_ID.SIG_PAIR, r_pair ); } } /* その他 略 */ }
ReachSignals.cs
public class ReachSignals : MonoBehaviour { List<TextMeshProUGUI> sigText = new List<TextMeshProUGUI>(); List<string> defaultStr = new List<string>(); public void SetSignalDetail( SIGNAL_ID id, bool on, string str ) { if( on ){ signals[(int)id].color = signalColor[(int)id]; // 文字 sigText[(int)id].text = str; } else { signals[(int)id].color = signalColor[(int)SIGNAL_ID.SIG_OFF]; // 文字 sigText[(int)id].text = defaultStr[(int)id]; } } // Start is called before the first frame update void Start() { Image image; TextMeshProUGUI text; foreach( Transform child in gameObject.transform ){ foreach( Transform gc in child ){ // シグナル(Panel) image = gc.gameObject.GetComponent<Image>(); if( !ReferenceEquals( image, null ) ){ signals.Add( image ); } // 文字表示(Text(TMP)) 追加 text = gc.gameObject.GetComponent<TextMeshProUGUI>(); if( !ReferenceEquals( text, null ) ){ sigText.Add( text ); defaultStr.Add( text.text ); } } } int i = 0; foreach( Image im in signals ){ SetSignal( (SIGNAL_ID)i, false ); i++; } } }
プレイ画面
(前回までと同じURLです。最新の状態に更新されています)
tomo-mana.hatenablog.com
次回
リーチ表示、長かった… 正直こんなに細分化して実装することになるなんて思っていませんでした…
やっとテスト環境が整って、そろいやすいポーカーのメイン、乱数調整に入る準備が整いました。楽しみです!