実現したいこと
チャンスの出目が出た時に最も大きい出目の合計が表示されるようにしたい
前提
サイコロを5つ振って役を作り、得点を出すゲームです。
役は以下の通りです。
スリーダイス・・・3つの出目が同じ。全ての出目の合計が得点になります。
フォーダイス・・・4つの出目が同じ。全ての出目の合計が同じになります。
フルハウス・・・3つの出目が同じ、かつ残りの2つの出目が同じ。すべての出目の合計が得点になります。
ショートストレート・・・4つの出目が連続している(1,2,3,4,6 / 1,2,2,3,4等)。25点。
ビッグストレート・・・5つの出目がすべて連続している。30点。
ヨット・・・5つの出目が全て同じ。50点。
チャンス・・・上記の役に該当しなかった場合。最も大きい出目の合計。
サイコロの出目はランダム関数を用いて、ランダムに1~6の値を取得してください。
ランダムな数値はmt_rand(最小値, 最大値)を使用することで取得できます。
$diceに配列として出目が格納されています。
結果表示時は以下の例のように、 1.出目を小さい順に出力し、 2.役 と 3.得点 を表示すること。
役は得点が高い役を採用すること。
発生している問題・エラーメッセージ
現状だと全ての値の合計値が出てしまう
該当のソースコード
function judge($dice) { sort($dice);// $sum = array_sum($dice); //配列の中の値の合計を整数または float として返す。 $name = ""; $u_dice = array_unique($dice);// 配列から重複した値を削除する $count = max(array_count_values($dice)); if($count === 5){ $name = "ヨット"; $sum = 50; } else if($count === 4){ $name = "フォーダイス"; } else if($count === 3){ $name = "スリーダイス"; } else if(range(1,5) == $dice or range(2,6) == $dice){//range:ある範囲の整数を有する配列を作成します。 $name = "ビックストレート"; $sum = "30"; } else if(array_intersect($u_dice, range(1,4)) === range(1,4) || array_intersect($u_dice, range(2,5)) === range(2,5) || array_intersect($u_dice, range(3,6)) === range(3,6)){ $name = "ショートストレート"; $sum = "25"; } //(1)1,2,3,4,? (2)2,3,4,5,? (3)3,4,5,6,?の3通り*(18通り) else { $name = "チャンス"; $sum = } echo "出目は",implode(",",$dice),"<br>"; echo "役は".$name."<br>"; echo "得点は",$sum."点です"; } $dice = [1, 2, 3, 4, 5, 6]; for($i=1; $i<=5; $i++) { $dice[$i] = mt_rand(1,6); } judge($dice); ?>
試したこと
最大値の合計=右2桁の合計と考えて処理を記入するのでしょうか
解説も頂けたらありがたいです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー