先日、非プログラマという身分でありながら、ブラウザで正体隠匿ゲームができるように頑張って開発してみた。PHPで。
ふと、この仕組をちょっとアレンジするだけでインサイダーゲームが
「できる…理論的には可能だ…!!」
と気づいたので、作ってみた。所要時間3時間。
なお厳密にはインサイダーゲームも前回作った「正体隠匿系ゲーム」に属するらしいのだが、必要な仕組みが異なるので別で作ることにした。
求めた機能
太字が前回との変更点。
- ゲームの度に参加者を変更できる(全員が出席できるとは限らないため)
- お題=キーワードの候補を自由に編集できる
- ゲームの度に役をシャッフルし、お題を1つ選択する
- マスターかインサイダーのみにお題を表示する
- 自分の役は他人からは見れない
作ったものの構成
ここまでは前回と全く同じ。
room.phpはプレイヤーの数だけ用意しているので実際は7種類存在する(いつものボドゲ仲間が7人のため)。
phpファイルは1つで、パラメータで出し分けする仕様にしている。全く同じ記述を7種類コピペするのが面倒だからだ。
処理1:参加者とお題を設定する
前回と同じく、設定画面には2種類のフォームを実装した。
- 参加者をチェックボックスでON/OFFしてsubmit → 参加者だけのIDを書いたテキストファイルが生成
- お題のリストをtextareaに1行1役で入力してsubmit → お題のリストが書かれたテキストファイルが生成
2つ目のリストは前回が役のリストだったが、今回はこれをお題のリストに変更する。といっても仕組みは全く同じ。
こんな感じ。
相変わらず設定情報をテキストとして保存しておくのが良いのかどうか分からない。誰か教えてほしい。
処理2:シャッフルする
ボタンを押すことで以下の処理が走る。
前回では「プレイヤーの配列」だけをシャッフルする機能だったが、今回は「お題を1つだけピックアップする」という処理も同時に走るようにした。
上図で言う「word-picked.txt」は、何の文脈もない単語が1つだけ書かれたシュールなテキストファイルだ。
処理3:自分の役とお題を読み込む
厳密には、2つの処理が走る。
まず、シャッフルした後の参加者リストから、「自分のIDが何番目か」を読む。
そしてIDの並び順で以下の分岐が走る。
- 1番目だった場合:マスター認定。次の処理に進む
- 2番目だった場合:インサイダー認定。次の処理に進む
- 上記以外(=3+番目):庶民認定。庶民と表示して終わり。
自分が「マスター」か「インサイダー」かのどちらかだった場合のみ、選択されたお題を読む。
自分のIDが2番目だとこうなる。
自分のIDが3番目以降だとこうなる。
相変わらず他人のroomが覗き放題なのだが、他人のroomを覗いてもゲームがつまらなくなるので見ないだろうという善意を頼りにした設計となっている。
公開しないのかね
前回と同じ理由で、いつものボドゲ仲間専用に作っているのと、すでに公開している方がいらっしゃるので私が公開する意義が薄い。
インサイダーゲーム
プログラムは楽しい
今回も楽しかった。他に何か作るものないかなぁ。
CONVERSATION