前提
現在課題でポーカーのアルゴリズムに取り組んでいるのですが、どうしてもjokerを足した後の処理ができません。
4日ほど悩んでいるのですが、全く分からないため知識をお借りしたいです。
実現したいこと
・cards配列に格納したカードの役を判定し、結果表示してください。
・cards配列には計5枚、それぞれ絵柄(suit)、数字(numeber)を格納する
・絵柄はheart, spade, diamond, club、jokerのみ
・数字は1-13、jokerの数字は0とする。
・上記以外の絵柄や数字が存在した場合、または同一の絵柄、数字がcards配列に存在した場合、
・役の判定前に「手札が不正です」と表示
・役判定は関数に記述し、関数を呼び出して結果表示すること
分からない箇所
// 手札 $cards = [ ['suit'=>'heart', 'number'=>1], ['suit'=>'heart', 'number'=>10], ['suit'=>'heart', 'number'=>13], ['suit'=>'joker', 'number'=>12], ['suit'=>'joker', 'number'=>11], ]; function judge($cards) { // この関数内に処理を記述 foreach($cards as ['suit' => $suit,'number' => $number]){ //不正 if(!in_array($suit,['heart','spade','diamond','club','joker']) || $number < 0 || $number > 13 ){ return '不正'; } //ここが分からない=jokerの判定(jokerが二枚以上あれば、jokerの数字が0以上であれば) if(($suit['joker']) > 2){ return '不正'; } if(count(array_unique($cards,SORT_REGULAR)) <= 4){ return '不正'; } //$cardsから$numberを分ける $number_count = array_column($cards,'number'); $numbers_count = array_count_values($number_count); $numbers_list = array_count_values($numbers_count); //$cardsから$suitを分ける $suit_count = array_column($cards,'suit'); $suits_count = array_count_values($suit_count); $suits_list = array_count_values($suits_count); //$numberが連番かどうか $SerialNumber = $number_count[0]; $SerialNumber_list = range($SerialNumber, $SerialNumber + 4);
試したこと
ネットで検索し、in_arrayやarray_count_valuesなど、いろいろな関数を使ってみましたが上手くいきませんでした。
if(in_array(['joker'],$suit) >= 1)
if(isset($suit['joker']) >= 1)
if(array_search($cards,['joker']) >= 1)
等等…
変数を変えたり、鉤括弧を外したり、他に使えそうな関数を探したりしたのですが、どうにも上手くいきません。
jokerの数字が0以上の時の処理も同時に考えましたが同様に全然上手くいきません…
課題なので、答えを詳しくとは言いません。
自分で考えたいので「この関数を使えばできる。」とかのアドバイスで構わないので教えて欲しいです。
わがままかとは思いますが、皆さんの知恵をお借りできればと思っております。
よろしくお願いします。
回答1件