椅子取りゲームシミュレーション
STATUS: 故障中x2
はてなで、こんな質問を見かけました。
100人でイス取りゲームをやったとして、実際問題として全員が座るには、イスが何脚必要なのかを求めるロジックを教えて下さい。
うーん、じゃあシミュレーションプログラムを作って検証してみよう!
【実行できるページ】
椅子取りシミュレーション
http://dokokano.com/ftlabo/applet/isutori/
【これは何?】
椅子取りゲームのシミュレーションです。
プレイヤーや椅子の数を変えた状態での椅子が埋まるまでの時間を計測できます。
【スクリーンショット】
(歩いている状態)
(着席!…ひとりあぶれてます)
(大人数でのシミュレーションも出来ます)
http://youtube.com/watch?v=R5DAXOlEV4I
デモムービー (Youtube)
【画面のみかた】
・椅子
円形に並んでいる緑色の四角が椅子です。
・プレイヤー
椅子の周りをぐるぐる回っているのがプレイヤーです。
あなたの号令で椅子に座ろうとします。
椅子に座り損ねると赤くなります。
・号令
画面中央に「WALK」「SIT DOWN」と表示されているのが、あなたの号令です。
画面をクリックすると切り替わります。
「SIT DOWN」にするとプレイヤーはいっせいに開いている椅子に座ろうとします。
号令の下には、椅子が埋まるまでの時間がカウントアップされます。(単位は特に決めてませんが、1カウントあたり1/10秒程度と考えてください)
・プレイヤー数/椅子数
画面下の左右にプレイヤー(Player)と椅子(Chair)の数が表示されます。
【操作方法】
・「WALK」「SIT DOWN」号令
画面をクリックすると、「WALK」「SIT DOWN」が切り替わります。
「WALK」→椅子の周りを歩きます。
「SIT DOWN」→椅子に座ろうとします。
・プレイヤー数変更
「Player」の横の [+][-] で加減できます。
・椅子数変更
「Chair」の横の [+][-] で加減できます。
・プレイヤー/椅子数一括変更
キーボードの[0]〜[9]で、×10倍の数に変更できます。
「Player」の横の [+][-] で加減できます。
・プレイヤー番号表示
プレイヤーの歩いているあたりの円周にカーソルをあわせると、プレイヤーの番号が表示されます
【シミュレーション】
各プレイヤーの歩行速度は、-10%〜+10%の幅があります。
椅子に座るまでの時間は椅子までの距離によりますが、近くの椅子にだれも座っていない場合、1〜13カウントで着席できます。
プレイヤー同士の衝突は考慮していません(すりぬける)。
プレイヤーは一番近い空席を目指して移動します。その席を狙っているプレイヤーがより近くにいても考慮していません。
空席判定が手抜きなので、最悪値で(椅子数×プレイヤー数×プレイヤー数)の判定処理を行っています。椅子、プレイヤー数がそれぞれ100の場合、号令直後は毎回100万回の判定をしているのですが、けっこうなんとかなってしまうの今のPCはすごいですね〜(トカイウ)。
これをベースに椅子取りゲームって作れないかなあ。
プレイヤーが100人の場合、全員着席できるまでの時間を計りました(単位はカウント)。椅子取りゲームの際参考にしてください。
席数 時間(1/10秒) :平均値 中間値
100 : 1559,878,1552,1110,1482 : 1316 (1482)
110 : 513,1188,546,709,1166 : 824 ( 709)
120 : 714,615,856,1072,638 : 779 ( 714)
150 : 410,159,670,206,132 : 315 ( 206)
200 : 96,241,168,112,140 : 151 ( 140)
300 : 76,64,10,128,56 : 67 ( 64)
400 : 56,51,90,98,43 : 68 ( 56)
500 : 39,49,56,59,63 : 53 ( 56)
【ゲーム画面が映らない場合は・・・】
というか、JDK1.3のAppletなのでたいていの環境では動かないはず・・・
↓のサイトから、Java ソフトウェア(JRE)をダウンロードしてインストールしてください。
Java ソフトウェアの無料ダウンロード