だまって人狼

https://jinro.nulltemp.com/

自由入力のチャットを使わず、ボタンで選ぶ「定型宣言」(CO・占い結果の報告など)だけで遊ぶ、ブラウザ向けのオンライン人狼ゲームです。

だまって人狼で遊ぶ

どんなゲームか

「だまって人狼」は、会話やチャットをせずに遊べるオンライン人狼ゲームです。ルールは一般的な人狼とほぼ同じですが、議論の時間に文章を打ち込む代わりに、「私は占い師です」「〇〇が怪しい」「〇〇に投票する予定」といった決まった文面の宣言(定型宣言)をボタンで選んで発言します。

人狼は好きだけれど、知らない人との会話やチャットのやり取りが苦手な人、スマホで短い時間だけ遊びたい人に向けて作りました。登録は不要で、ブラウザを開けばすぐに遊べます。人が足りない席はNPC(コンピューターのプレイヤー)が埋めるので、1人でも最後まで遊べます。

遊び方

部屋に入る

  • クイックマッチ:トップ画面で「6人村」か「12人村」を選ぶと、待機中の部屋に参加します。定員が揃うか、最初の参加者が入ってから30秒たつと始まり、空いた席はNPCが埋めます。名前は全員ランダムに決まります。
  • 合言葉部屋:友達と遊ぶときは、部屋を作って6桁の合言葉か招待URLを共有します。村の大きさは部屋主が5人村から12人村まで選べ、部屋主が「開始」を押すとゲームが始まります。

ゲームの流れ

  1. 0日目の夜は、占い師だけが1人を占います。襲撃はありません。
  2. 昼は定型宣言で議論します(120秒)。全員が「議論終了」を押せば早く進みます。
  3. 投票で最も票を集めた1人が処刑されます。同数のときは決選投票を1回行います。
  4. 夜は人狼が襲撃し、占い師・霊媒師・騎士がそれぞれの能力を使います。朝に犠牲者が発表されます。
  5. 人狼をすべて処刑すれば村人陣営の勝ち、生きている人狼の数が人狼以外の数以上になれば人狼陣営の勝ちです。

操作は「プレイヤーをタップして、やることを選ぶ」の1種類だけです。その時点で選べない宣言はメニューに出ないので、ルール説明を細かく読まなくても遊べるようにしています。

村の構成と役職

村役職の内訳
5人村村人2・占い師1・人狼1・狂人1
6人村村人3・占い師1・人狼1・狂人1
7人村村人3・占い師1・人狼2・狂人1
9人村村人3・占い師1・霊媒師1・騎士1・人狼2・狂人1
12人村村人6・占い師1・霊媒師1・騎士1・人狼2・狂人1
  • 占い師:毎晩1人を占い、人狼か人間かを知ります。
  • 霊媒師:その日に処刑された人が人狼だったかどうかを知ります。
  • 騎士:2日目以降の夜に、自分以外の1人を襲撃から守ります。
  • 人狼:2日目以降の夜に1人を襲撃します。人狼が2人いる村では、お互いが仲間だと分かります。
  • 狂人:人狼陣営ですが、能力はなく、誰が人狼かも知りません。占い師を名乗るなどして村を混乱させます。

使える宣言

昼の議論で使えるのは次の宣言だけです。宣言は嘘でもよく、システムは内容が本当かどうかを確かめません。偽の占い師を名乗ったり、嘘の占い結果を出したりできることが、このゲームの駆け引きの中心です。

  • カミングアウト:「私は占い師です」など(1ゲームに1回)
  • 占い結果・霊媒結果:「〇〇を占った結果、人狼でした」など
  • 疑い・信用:「〇〇が怪しい」「〇〇を信じる」
  • 投票予定:「〇〇に投票する予定」(実際の投票先は自由に変えられます)

占い結果・霊媒結果以外の宣言は、1人1日5回までです。回数に上限があるので、誰を疑うか、いつカミングアウトするかを考えて使う必要があります。

作った理由

人狼は、ルールを覚えるだけなら簡単ですが、実際に遊ぶには「議論でうまく話す」ことが求められ、それが苦手で遠ざかってしまう人も多いゲームです。そこで、推理と駆け引きの部分だけを残し、話す・書く部分をボタンに置き換えたらどうなるか、を試すために作りました。チャット欄が無いので、知らない人同士でも気軽に遊べ、荒らしや不適切な発言が起こりにくいという利点もあります。

工夫した点

夜は行動の無い人にもボタンを押してもらう

各フェーズには制限時間があり、全員の行動が終わったら早めに次へ進みます。ただし、夜に行動がある人(占い師や人狼など)だけを待つと、「夜がすぐに明けた=ほかの人間には夜の行動が無かった」ということから、役職を推測できてしまいます。そこで、村人のように夜の行動が無い人にも「朝を待つ」ボタンを押してもらい、誰が押したかは他の人に見せないようにしました。

NPCが自然に推理する

NPCは、人間と同じ定型宣言・投票・夜の行動だけを使います。ほかのプレイヤーの役職をこっそり参照することはなく、公開された宣言や投票の内容から、プレイヤーごとの「人狼らしさ」を点数にして判断します。占い師を名乗る人が2人出たらどちらかが偽物だと考える、投票予定と実際の投票が食い違った人を怪しむ、といった具合です。

また、NPCには「理詰め」「疑り深い」「流されやすい」「頑固」の4つの性格があり、日ごとに判断へ少しの揺らぎを加えています。これで、毎回同じ人に票が集まる単調な展開を減らしました。

シミュレーションで村のバランスを調整

NPCだけで1つの村を1,000回ずつ対戦させ、陣営ごとの勝率を見ながら役職の構成を決めています。たとえば12人村は、一般的には人狼3人の構成がよく使われますが、試したところ村人陣営の勝率が2割ほどに偏ったため、人狼2人にしました。

通信が切れても戻れる

スマホで遊ぶと、画面の切り替えや電波の状態で接続が切れることがあります。切断しても同じ部屋・同じ席に戻れるようにし、60秒たっても戻らないときは、その席をNPCが代わりに操作して、ゲームが止まらないようにしています。

使用技術

  • 言語:TypeScript(ルール・NPC・画面を1つのリポジトリで管理)
  • 画面:React 19 + Vite
  • サーバー:Cloudflare Workers + Durable Objects
  • 通信:WebSocket(ブラウザとサーバーで、ゲームの状態をやり取り)

勝敗の判定やNPCの思考、制限時間の管理は、すべてサーバー側で行っています。ゲームのルールとNPCの思考は副作用の無い関数として書き、自動テストで確かめられるようにしました。特に、各プレイヤーに送る情報に他人の役職などの秘密が混ざっていないかを、ゲームのすべての時点・すべてのプレイヤーの視点について検査しています。

画面は日本語と英語に対応しています。

今後の予定

実際に遊んでもらいながら、NPCの強さや判断の仕方、村ごとの勝率を調整していく予定です。不具合や要望があれば、トップページのお問い合わせフォームからお知らせください。