おはこんにちは、Liquid R&Dチームの布目です。
Liquid R&Dチームでは、eKYCの顔撮影時の偽造検知の実験や開発を行っています。今回は偽造検知などは置いておいて、オンラインでボードゲームをやるためのシステムを作成した話をしたいと思います。
今回作成したオンラインボドゲシステムはこんな感じで動いていました。(生活感がひどい写真だ・・・
リポジトリはこちらになります。
GitHub - yujidn/discord_bodoge_bot: discord botを介してボドゲをする仕組みを作る
動機
システム作成の動機は、ずばりボードゲームをやることになります。
かつては2,3週に1回くらいの頻度でボドゲ会をオフィスでやっていました。が、コロナ禍になり、出社はなくなり、集会は自粛するようになった結果、ボドゲ会自体が消えてなくなりそうになっているのが現状です。
オンラインでやれるボードゲームもあります。例えばボードゲームアリーナやカタンユニバースなどです。
上記のオンラインボドゲでは解決できない問題が1つあります。そう、積みボドゲの消化です。未開封のボドゲはオンラインではプレイできないのです。
要件定義
趣味的に作るものなのでそこまでガッチリしたものは必要ではないですが、必要な機能、不要な機能を考えていきます。
- 必要要件
- ダイスロール
- プレイヤー登録
- ゲーム全体を俯瞰する機能
- 各プレイヤーに手札を渡す機能
- 各プレイヤーのとのやり取り機能
- 人狼系ゲームのカミングアウト
- 何らかの行動をする、しない、何点分行う
- 不必要要件
- すべてのボードゲームに対応しようとする心
- ゲームごとの得点計算、HP管理
大雑把に下図のようなものを想定しました。
通話しながら行うことを考えていたので、鯖の部分はDiscord Botにします。 俯瞰視点のスマホカメラはDiscordの通話でカメラ映像を配信すれば良さそうなので、そのほかの機能をDiscord Botに詰め込んでいくことにしました。
開発
Discord botのコマンド周り
DiscordのAPIについてはラッパーを使用しました。 ( が、最近開発終了したようですね・・・。(2021年9月(どうしよう・・・
GitHub - Rapptz/discord.py: An API wrapper for Discord written in Python.
これによりコマンドの実装や各プレイヤーとのやり取りはサクッと実装できました。 コマンドの実行例は下図のようになります。プレイヤーを登録して、そのプレイヤーに対してDM(ダイレクトメッセージ)で手札を配るようにしています。
ダイスロールはよくある感じにしつつ、ゲームによっては出目の頻度が必要なものもあるので、ヒストグラムも返しています。
スマホカメラ画像周り
androidにしろiosにしろネイティブアプリを作るのはめんどくさいなーっと思っていました。 そういえば弊社のeKYCはブラウザで顔撮影などができるなーっということを思い出し、ブラウザ経由でカメラ画像をDiscord Botに送るようにしました。
カメラ周りは [HTML5] カメラをJSで操作し写真を撮影する を参考に作成しています。 カメラ制御から各プレイヤーへの配信は下図のような流れになりました。
実際に撮影された画像と各プレイヤーに配信される画像はこんな感じです。(保存していた画像がテスト時の画像で別のゲームのものになっています。ごめんなさい。。
裏面からの撮影画像
それを各プレイヤー用に分割したもの
実際にbotから送られてきたDM
テーブル作成
ホームセンターで分厚いアクリル板と塩ビパイプを買ってきて日曜大工しました(多分合計1500円ほど)。剛性がまっっっったく足りません。補強したいですね。
作成した感想
作成途中から気づいていながら実際にプレイした感想は、
- 手札の多いゲーム、手札移動の多いゲームには不向き
- 盤面の大きなゲームは厳しい
- 実際にプレイするとGM(というか私)がめちゃくちゃ大変
- カメラを天井に向けると天井ライトの逆光で何も見えなくなる
などです。
これまでの人生でhtmlとjavascriptに触れる機会があまりにも無かったこともあり、スマホブラウザ経由でカメラ画像を取得するところを作成するのにだいぶ手間取りました。 骨子となる部分は大体1日で作成できて、そのほかの細々とした部分の実装込みで5人日?くらいで作成できたと思います。
改善点はたくさんあるのですが、GMが物理的に大変なところが多いのでお蔵入り状態で放置しています。。。数こなせば慣れるかもしれない。。。
終わりに
今回はeKYCも偽造検知も何も関係のないオンラインボドゲシステムの話を書かせていただきました。 社内ではボードゲーム以外にも、電源ゲームやアウトドア、筋トレの話をしているslackチャンネルなどもあり、活発なようなあまり活発じゃないような感じです。
コロナ感染者数が減少してこれば、感染症対策をした上でオフィスでのボドゲ会も開催できる機運になってきています。 採用強化中ということもありボドゲ会から来ていただいてもいい気がします(ほんとか?。ぜひぜひどうぞー。