- ベストアンサー
いつどこゲームのようなテキストのランダム表示がしたい
こんにちは。 いつどこゲーム(「いつ」「どこで」「誰と」「誰と」「どうした」がバラバラに出てくる)のようにテキストがランダム表示されるようなことがしたいと思っています。 今回したいと思っているのが、 (1)「誰と」と「誰が」を、隣同士にランダム表示する (2)「誰と」と「誰が」に、同じ人名が重複しないようにする (3)「誰と」と「誰が」は、同じデータを引っ張りたい(できれば) 以上の3点です。 検索をしてjavascriptを使う方法を見つけたのですが、人名がかなり多いため他に良い方法がないものかと思い、相談に伺いました。 http://homepage2.nifty.com/yoshi-m/makehp/dhtml/sorce/play/1.htm こういったことができるCGI、またはその方法をご存知の方いらっしゃいましたら、ご教示いただけましたら幸いです。 よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
CGIでもできますが、JavaScriptの例があるのでそれを活用されてみてはいかがで しょうか? データを別ファイルに記述すれば管理しやすいのではないかと思い、JSON形式の ファイルを用意してAjaxで読み込むように作ってみました。 まず以下のようなデータファイルを作ってください。 <ファイル : data.json> { "time": ["昨日", "今日", "明日"], "endphrase": ["した。", "することになっている。", "する予定。"], "people": ["私", "友達", "見知らぬ人"], "where": ["家", "トイレ", "学校"], "what": ["うんこ", "野球拳", "キス"] } そして、HTMLファイルは以下です。 <HTML> <HEAD> <TITLE>いつどこゲーム!?</TITLE> <SCRIPT language="JavaScript"> <!-- //-- ご自分の環境に合わせて変更してください -- data_file = "data.json" // JSONデータを記述したファイル名 //-------------------------------------------- function createHttpRequest() { if(window.XMLHttpRequest){ return new XMLHttpRequest() } else if(window.ActiveXObject){ try { return new ActiveXObject('Msxml2.XMLHTTP') } catch (e) { try { return new ActiveXObject('Microsoft.XMLHTTP') } catch (e2) { return null } } } else { return null } } function make_par(){ var data var http_request = createHttpRequest() http_request.open( "GET", data_file, true ) http_request.onreadystatechange = function () { if ( http_request.readyState == 4 ) { if ( http_request.status == 200 ) { try { data = eval( "(" + http_request.responseText + ")" ) } catch (e) { alert("JSONデータの形式に問題があります") } show(data) } else { alert("ファイルに問題があります") } } } http_request.send(null) } function show(data) { var day_num = Math.floor(Math.random()*data.time.length) //いつ? var peo_num = Math.floor(Math.random()*data.people.length) //誰と? var peo2_num //誰が? while ( (peo2_num = Math.floor(Math.random()*data.people.length)) == peo_num ) {} var whe_num = Math.floor(Math.random()*data.where.length) //どこで? var do_num = Math.floor(Math.random()*data.what.length) //どんなことを? text.innerText = "「" + data.time[day_num] + "、" + data.people[peo_num] + "と" + data.people[peo2_num] + "は" + data.where[whe_num] + "で" + data.what[do_num] + "を" + data.endphrase[day_num] + "」"; } //--> </SCRIPT> </HEAD> <BODY onLoad="make_par()"> <!--表示部分--> <SPAN id="text"> </SPAN> <!--ここまで--> </BODY> </HTML>
お礼
仕事が繁忙期に入ってしまい、お礼が遅くなって大変失礼しました。 JavaScriptのサンプルをありがとうございます。 落ち着きましたら作成したいと思っております。 このたびは本当にありがとうございました!