PHPでポーカーの役判定を作っています
解決したいこと
PHPでポーカーの役判定を作っているのですが、カード5枚の表示はできたのですが、カードの不正チェックと並べ替えと役判定がどうしてもわかりません。
宜しければ助けていただきたいです。
該当するソースコード
<?php
// 以下はポーカーの役を判定するプログラムです。
// cards配列に格納したカードの役を判定し、結果表示してください。
// cards配列には計5枚、それぞれ絵柄(suit)、数字(numeber)を格納する
// 絵柄はheart, spade, diamond, clubのみ
// 数字は1-13のみ
// 上記以外の絵柄や数字が存在した場合、または同一の絵柄、数字がcards配列に存在した場合、
// 役の判定前に「手札が不正です」と表示してください。
// 役判定は関数に記述し、関数を呼び出して結果表示すること
// プログラムが完成したらcards配列を差し替えてすべての役で検証を行い、提出時にテストケースを示すこと
// <役>
// ワンペア・・・同じ数字2枚(ペア)が1組
// ツーペア・・・同じ数字2枚(ペア)が2組
// スリーカード・・・同じ数字3枚
// ストレート・・・数字の連番5枚(13と1は繋がらない)
// フラッシュ・・・同じマークが5枚
// フルハウス・・・同じ数字3枚が1組+同じ数字2枚(ペア)が1組
// フォーカード・・・同じ数字4枚
// ストレートフラッシュ・・・数字の連番5枚+同じマークが5枚
// ロイヤルストレートフラッシュ・・・1, 10, 11, 12, 13で同じマーク
// ※下の方が強い
// 表示例1)
// 手札は
// heart2 heart5 heart3 heart4 culb1
// 役はストレートです
// 表示例2)
// 手札は
// heart1 spade2 diamond11 club13 heart9
// 役はなしです
// 表示例3)
// 手札は
// heart1 heart1 heart3 heart4 heart5
// 手札は不正です
自分で試したこと
<?php
// 手札
$suits = ['heart', 'spade', 'diamond', 'club'];
$numbers = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];
// suitsのkeyをランダムに表示する
$randsuit1 = array_rand($suits);
$randsuit2 = array_rand($suits);
$randsuit3 = array_rand($suits);
$randsuit4 = array_rand($suits);
$randsuit5 = array_rand($suits);
// keyから値を取得し、それを変数に代入する
$the_suit1 = $suits[$randsuit1];
$the_suit2 = $suits[$randsuit2];
$the_suit3 = $suits[$randsuit3];
$the_suit4 = $suits[$randsuit4];
$the_suit5 = $suits[$randsuit5];
// $the_suits = [$the_suit1, $the_suit2, $the_suit3, $the_suit4, $the_suit5];
// numbersのkeyをランダムに表示する
$randnum1 = array_rand($numbers);
$randnum2 = array_rand($numbers);
$randnum3 = array_rand($numbers);
$randnum4 = array_rand($numbers);
$randnum5 = array_rand($numbers);
// keyから値を取得し、それを変数に代入する
$the_num1 = $numbers[$randnum1];
$the_num2 = $numbers[$randnum2];
$the_num3 = $numbers[$randnum3];
$the_num4 = $numbers[$randnum4];
$the_num5 = $numbers[$randnum5];
// $the_nums = [$the_num1, $the_num2, $the_num3, $the_num4, $the_num5];
// 取得したsuitとnumberを交互に表示する
$final_cards = [
['suit' => $the_suit1, 'num' => $the_num1],
['suit' => $the_suit2, 'num' => $the_num2],
['suit' => $the_suit3, 'num' => $the_num3],
['suit' => $the_suit4, 'num' => $the_num4],
['suit' => $the_suit5, 'num' => $the_num5],
];
//(ここから関数処理)
function judge($final_cards) {
// この関数内に処理を記述
// カードの不正チェック
// カードの並び替え
// 役判定
// 結果を返す
}
?>
<!DOCTYPE html>
ポーカー役判定
手札は
<?php foreach($final_cards as $final): ?>
<?php
$final_suit = $final['suit'];
$final_num = $final['num'];
?>
<?php echo $final_suit . ' ' . $final_num . ' ';?>
<?php endforeach ?>
役は<?=judge($final_cards) ?>です。
if文で役判定をしようとすると膨大な記述量、そしてエラーが出てしまう為他のやり方を探した結果、関数に辿り着いたのですがまだまだ勉強不足で上手くいきません。
ご教授願いたいです。
そもそもカードの表示方法から間違えている可能性もあるのでこちらに投稿させていただきます。
是非、よろしくお願い致します。