werewolfgame.online

Ruby on Railsで作成した人狼ゲームについて

Start scrolling!

このページについて

Rails 7のTurbo Streamを使用してなにかアプリケーションを作れないかと考えたとき、何度か遊んだことのある「人狼ゲーム」をWebアプリケーションとして再現できないかと思いついたのがきっかけでした。

2024年11月27日から作り始めて、12月23日に無事クラウド上にデプロイすることができました。

当初の目的を達成したため、このページはドメインの契約が切れるまでは記録として残そうと思います。

ルーム一覧画面

現在参加することのできるルームの一覧を表示します。それぞれのルームの現在の参加者や、ルームにあらかじめ設定されたルールを確認できます。

ルーム作成画面

ルームごとに参加者に応じて討論時間やそれぞれの役職を割り当てる人数を指定できます。

スライダーの値がリアルタイムに反映され、ルームの合計人数が確認できます。また、村人よりも人狼の数を多いルームは作成できないようにしています。

参加者の待機画面

ルームの参加者がリアルタイムに反映されていきます。この画面で全員揃うとゲームが完了するまで他のルームには参加できなくなります。

役割の発表画面

参加者が全員揃うとそのルームで役割が発表されます。各役割のヒントも確認することができます。

役割 (1)

  • 人狼:村人に扮して村人全員を襲撃するのが目的です
  • 村人:村人に扮した人狼を探し当てるのが目的です
  • 霊媒師:襲撃された犠牲者が村人か人狼かを知ることができます

役割 (2)

  • 占い師:指定した参加者が村人か人狼かを知ることができます
  • 騎士:人狼の指定した襲撃対象を防ぐことができます
  • 裏切者:村人側に紛れて人狼チーム側が有利になるようするのが目的です

昼の議論をする時間

それぞれの参加者が実際に話し合う画面です。あらかじめ指定した時間までタイマーが表示され、時間がくるまでは発言することができます。

昼の処刑相手を選択する画面

人狼と疑わしき参加者を選択する画面です。最も多い投票数の参加者が重複した場合は再び選択する画面に戻ります。

昼の処刑された参加者の発表画面

投票で最も多く選ばれた参加者がゲームから脱落します。投票結果を確認することができます。

夜の行動を選択する画面

  • 人狼:襲撃する参加者を選択する
  • 騎士:人狼が襲撃する参加者を予想して、襲撃を防ぐ
  • 占い師:疑わしい人物を調べて村人か人狼かを調べる

この画面では実際の端末を操作する姿で役割を推測されるのを防ぐため、すべての参加者に対して選択画面を実装するべきでした

夜の結果画面に遷移する前の画面

他のユーザーは通常の確認メッセージが表示されるが、占い師と霊媒師はそれぞれの結果を知ることができる。

夜に襲撃された参加者の発表画面

人狼によって襲撃された参加者を表示する画面です。襲撃が成立しなかった場合は騎士のアイコンが表示されます。

勝者側の陣営の発表画面

村人および人狼側が特定の人数に減ったときに勝利した陣営が表示されます。結果を確認した参加者はルームの一覧へ遷移します。

作り終えた感想

Railsのおかげで実装は最後まで大きく破綻することはなく、テストなどを駆使してUIなどにこだわりを持ちながら作業することができました。

普段決まりきっている画面ではなく、すべての画面を0から作り上げるのは大変でしたが貴重な経験でした。

フィードバックから得た改善点、実装しきれていない箇所、細かい挙動の修正等やりたいことはありますが、現時点での実装はここまでとして今回得た経験を活かしていきたいです。