アドベンチャーゲームを作ってみよう

公開日:

注意

本記事は情報提供を目的としており、本記事の内容は無保証、サポートの対象外です。
サポート窓口、問合せ窓口にご質問をいただいても対応いたしかねますのでご了承ください。

はじめに

サポートの沖です。Cybozu Daysは大盛り上がりでしたね。まさかあんな発表とかこんな出来事があるとは。。。

派手な見た目とかに影響されてkintoneの画面が忘れ去られそうな空気もあるので、ここはkintoneの画面にどっぷりと浸かるためにアドベンチャーゲームを作ってみましょう(唐突

実は昔作ってました

記憶が確かなら、今回のネタは約10年前のkintone Café 大阪 Vol.5のLTで話したネタ。

https://kintonecafe-osaka.doorkeeper.jp/events/33338

関連レコードで画像表示。プロセス管理で部屋移動というミステリーハウス的なもの。この時は、JavaScriptでステータス名をフィールド保存と、特定のステータスに行くとフラグがセットされるので、その値があるときだけプロセス管理の「アクションが実行できる条件」で出口に行くアクションボタンが表示される、という作りでした。

なので、あの頃からkintoneは夢に溢れていたわけです(ほわわ

基本コンセプト

アドベンチャーゲームの簡単な流れとしては、

  1. 状況説明がある
  2. 行動を選択する
  3. 1に戻る

になると思います。

状況説明は詳細画面か編集画面で実現するのがシンプルに作成できそうです。行動の選択はいくつかの方法がありそうなので悩みますが、今回はkintoneの機能で実現できる方法に寄せていく方針なのでプロセス管理を使うようにします。とは言え、状態管理はフィールド値を使うのがシンプルなので、そこの部分はカスタマインで作成していきます。

使えそうなkintoneの機能

プロセス管理の1ステータスを1つのシーンに割り当てます。シーン毎の移動がプロセス管理のアクションになるという感じです。

こんなシーンを想定して、それぞれの場所から特定の場所だけに行けるように設定するとこんな感じ。(なぜに、POLICEがCAFEなのだ?)

カスタマインの「プロセス管理アクションの情報を取得する」を使うとこんな感じです。今回のケースだとこっちの方が繋がりがわかりやすいかな。

関連レコードはシーンの状況説明に使えそうです。また、関連レコードなので画像を表示することも可能です。画面レイアウト的に制限はありますが関連レコードをフィールド毎に複数作成すれば多少のレイアウト調整も可能そうです。

関連レコードのリンクアイコンがあるのが気になりますが「レコードの一覧をスペースに表示する」で表示すると画像がリンクになるので、ここは関連レコードのままでいきたいと思います。ただ、せっかくなので場所と説明を文字列ではなくリッチテキストに変えて、更にCSSで不要な箇所を非表示にすると。。。

こんなかんじ。という事で、関連レコード万能説まである。。

画面のカスタマイズ、自動処理(バッチ)、帳票出力といった「kintoneの”できない”を”できる”に」
gusuku Customineがあればkintoneらしさをそのままにkintoneをカスタマイズできます

使えそうなカスタマインの機能

プロセス管理のアクションを実行した時」に「フィールドに値をセットする」という設定だと、シーン移動の時にフラグをセットすることが可能。なので、特定の場所に行くとフラグをセットとか、「フィールド値が特定の値ならば」で判定して別のフラグが立っている時だけフラグをセットとかもできそうです。

同様にフラグが立っていなければ「フィールドやグループを非表示にする」で秘密の情報を非表示にしておくとかも可能と思います。

あとは、コマンド選択方式なら「選択肢から選択するダイアログを表示する」を使ったり、コマンド入力なら「入力ダイアログを表示する」を使う方法が考えられますね。もしくはカスタマイズを頑張って、コマンド選択をボタンにしてみるとか?

kintone Webhook を起動する」で権限のないアプリやレコードから情報を取得してレコードに転記という動きも考えられますが、これは「kintoneアプリのWebhook」側でのレコード更新を待つ仕組みが必要なので、作成は出来るのですが(出来るの!?)カスタマイズの難易度は高そうです。

・・・ヤバい、シンプルな設定からかけ離れてる・・・?

キャラクターとの会話

OpenAI を呼び出してテキストを生成する」を使うことで、メッセージを動的に・・・。いや、作成コストに合わなそう。生成AIが話題になり始めた頃にそんなプロンプトもありましたが、今回は動的は考えないことにします。ただ、ゲームを作る時の固定メッセージを作成するときには良いかもですね。

ということで、会話や状況説明は画面の詳細部分に関連レコードで表示するような仕組みにします。関連レコードなのでステータス名+フラグをキーにすればいくらでも変更可能ですね。

特定の操作をしないと進めない仕組み

「イロイッカイズツ」とか「POLISH PILLAR」とか木を押すとか、昔はいろいろとありましたよね。。いやまぁ、ゲームのジャンル違いますけど。

kintoneで考えると、今回のゲームは詳細画面上で動く仕組みという前提ですが、一覧画面を表示するとか編集画面で保存ボタンを押すとか、更には印刷画面を表示とか色々な事が考えられますね。「kintoneイベントが発生した時」を使うと、「条件」では見たことの無いような画面でもアクションの動作が可能です。

更には、わざとレコードを複数作成しておいて、特定レコード数の時だけフラグをセットするとかも出来そうです。表面をクリアしたら裏面は新規レコードとか、続編を作成した時に前作のクリアデータがあると最初から強い状態でコンバートされるとかも出来そうですね。

・・・なんか、特定のゲームの影響が(笑)わかる人は同世代ですね。

なお、詳細画面でのカスタマインの動きを上手く使うと、

  1. 詳細画面でフィールド値を変更し、dirty recordsの発動条件を満たす
  2. 特定の条件に一致していなければ元の値に再セットすることで、同値でdirty recordsを実行
  3. レコードが自動的に保存された時」でリロード

なんてのもできそうです。「部屋に入ると眩暈が・・・」的な感じで、条件に一致していなければリロードで元に戻り、条件に一致していると値によってプロセス管理のアクションボタンが表示、なんて動きができますね。

なお、dirty recordsを複数回実行でエラーになるとアクションの実行は止まりますが、APIのリクエストがエラーの場合は「kintone API がエラーになった時」で検知可能なので強制遷移とかで一覧画面に戻す(ゲームオーバー的な動き)こともできそうです。

・・・(大丈夫かな。読んでる人は付いてきてるかな?)

コマンド選択をボタンにしてみる

各シーンごとに選択できるコマンドを用意してみました。テーブル1行がボタン1つで、ボタンを押した時の動きを複数指定可能という仕組みにしています。

文字表示

基本的な動作タイプは文字表示で、押すと以下のように表示されます。

このボタンはシーンが変わるたびに変わります。

フラグセット

フラグセットの場合は、フラグのチェックボックスフィールドに値を追加します。その結果、値が変わった時は自動でリロードする仕組みです。例えば、喫茶店で本棚を探すと地図を見つけるので、メニュー位置にプロセス管理の承認ステップ図が表示されるという仕組みです。

なお、フラグがセット済みだと何もないという固定メッセージになります。

この辺は「フィールド値が特定の値ならば」を使うと自由に設定可能です。

作成例

という設定を作ってみたんですが。。。ちょっとマニアックすぎたかもしれません。

ざっくり説明すると、詳細画面での設定が1ページで、承認承認ステップ図の表示判定があります。ポイントはプロセス管理で、ステータスの変更時にシーンマスタにあるテーブルを転記しています。

今回は、フィールド値の判定が多くあるので、テーブルのままではなくテーブル外フィールドに転記するようにしてみました。ただ、その結果「フィールドに値をセットする」のアクションが増えすぎるという問題が。。。ここは改良の余地ありです。

ボタンの動作は1つ作ってページコピーという作りにしましたが、これも修正時に大変なので可変になる値を使ったほうが良かったかもですね。

最後に

今回の検証で色々と気づいたこともあるので、次回作成時にはもっとスマートに出来たり、気づきにくいトリックを仕掛けたりも出来そうです。設定に興味がありましたらお声がけいただければ!

それでは、またー

投稿者プロフィール

アバター画像
"サイボウズ公認kintoneエバンジェリスト
カスタマインやデプロイットでも色々とやってます"