• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでビンゴプログラムを作成する)

PHPでビンゴプログラムを作成する

このQ&Aのポイント
  • PHPの勉強を始めた初心者です。submitボタンを押すたびに数字を生成するビンゴプログラムを作成したいと思うのですがわからずに悩んでいます。
  • ポイントは1~75のランダムな整数を一つずつ表示することであり、同じ整数は二度と出ないようにします。また、出た整数は確認できるように表示します。整数をすべて取り出したら「ビンゴは終了しました」と表示させ、リセットボタンを作ります。
  • 以上がビンゴプログラムの要件です。現在途中までコードを書いていますが、うまく動かすことができません。ご教授いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

こんな感じでは如何でしょうか <?php if (isset($_POST['seed'])) $seed=$_POST['seed']; else $seed=(float)microtime() * 1000000; if (isset($_POST['order'])) $order=$_POST['order']+1; else $order=1; $numbers = range(1, 75); srand($seed); shuffle($numbers); print "<font size='50px'>".$numbers[$order-1]."</font>"."<br>"; print "<form method='POST'>"; if ($order<75){ print "<input type='hidden' name='seed' value='$seed'>"; print "<input type='hidden' name='order' value='$order'>"; print "<input type='submit' value='ビンゴ'>"; } else { print "ビンゴは終了しました<br>\n"; print "<input type='submit' value='リセット'>"; } print "</form>"; echo "既出番号\n"; for($i=0;$i<$order-1;$i++) { echo "$numbers[$i] "; } ?>

その他の回答 (1)

回答No.1

■ランダムな数値の取り出し方に関して まず、mt_rand関数だと、一度取り出した値を含めないで次の値を出力することが出来ません。 今回は、1~75番までが含まれている配列を作成して、その中から値を取り出してはいかがでしょう。 <?php $bingo_array = range(1, 75); //range関数は、与えられた引数の一番目から二番目までの配列を作ります。 shuffle($bingo_array); //shuffle関数は、配列をシャッフルしてランダムに並び替えます。 //値を取り出すときにはarray_shiftを使う //そうすると取り出された値が返り値に、そして配列の中からは取り出された値が削除される。 $result = array_shift($bingo_array); ?> ■フォームのSUBMITボタンに関して とりあえず、<form method="POST">で示されている様に、 このプログラムにPOSTメソッドでアクセスされたときと、そうでない時で切り分ければ、事が少し簡単になります。 POSTでアクセスされなかった時には配列を初期化して、 POSTでアクセスされた時には、すでにシャッフルされている値を処理する。 <?php //環境変数にアクセスされたときのメソッドが渡されているので、 //これで判断できる if($_SERVER['REQUEST_METHOD'] == 'POST'){ //POSTされていたら、その処理を }else{ //そうでなかったら初期化処理を。 } ?> ■hiddenに与える値 最初に書いたとおり、配列で保持しておくので、そのままではhiddenに保存出来ません。 一度配列を、文字列に変換して保持しておくことにするのが今回は手軽です。 <?php $hidden = serialize($bingo_array); //serialize関数でPHPの変数の中身を文字列に変換できる。 //ただし、HTML中に含めたくない値も含むので、 $hidden = htmlspecialchars($hidden); //といった感じでエスケープもチャンとする。 //もとに戻したい場合は、 $bingo_array = unserialize($_POST['num']); //unserialize関数を使う。 ?> ■リセットボタンについて 上記で書いた、array_shiftで値を取り出しきったかどうかを、empty関数などで確認して、 すべて取り切っていたら、submitボタンを非表示にして、代わりにリセットボタンを出力するように振り分ける感じでしょうか。 リセットボタンは、javascriptか何かで、今回のプログラムにGETメソッドでリダイレクトかけるなり、 リセットボタンを普通のリンクタグにして、同じプログラムにリンクすれば、すべて初期化されるかなと。 一応、必要そうな要素は記述しました。 如何でしょうか。

pusherman
質問者

お礼

ご返信ありがとうございます。 数字の出し方などとても参考になりました! ですが、出た数字をhiddenに保存させて重複させないというところがうまくいきません。。 非常にお手数ですがもう少し詳しく教えていただけないでしょうか、、 お手数をお掛けして申し訳ありません、、、

関連するQ&A