ChatGPT x 架空言語なゲームの開発記録その3です。
前回はこちら: www.bioerrorlog.work
はじめに
前回は、ゲームにChatGPTを組み込んでテキストを生成させました。
今回は少し地味ですが、Unit testの導入と架空言語辞書機能の模索をしていたのでその記録を残します。
架空言語 x ChatGPT.
— BioErrorLog (@bioerrorlog) June 9, 2023
ゲームシステムを模索中.#スーパーゲ制デー #screenshotsaturday pic.twitter.com/4GDKpDELNR
Devlog
Unit testの導入
これまでGodot Engineでゲームを実装するとき、テストコードを書いてきませんでした。
普段のゲーム開発ではないプログラミングではテストコードが非常に重要な位置を占めているので、これでは開発体験にも大きな違いが出てきてしまいます。
調べてみるとGodot Engineでテストを書けるフレームワークがあったので、これを導入してテストコードの拡充をしました。
後付けのテストは実装時のテストよりも効能が下がってしまうところですが、それでもコードの振る舞いについて少しづつでも安心が得られるのは良いですね。
ちなみにE2Eテスト的なものは現在手動でやっていますが (規模が全然小さいので問題ない)、将来的には自動化したいところですね。
(ゲームにおけるE2Eテスト自動化ってどうやるのだろうか..)
辞書機能の模索
このゲームのコンセプトはChatGPTを使って架空言語を話させる、というものであり、プレイヤーが言語を解読していく流れを想定しています。 言語を解読していく時には、プレイヤーによって編集可能な辞書のようなものを用意しようとしています。
この"編集可能な辞書"、さくっと書けるだろうと思ってましたが結構ハマってました (ハマってます)。 で、辞書機能の根本的な設計を見直そうとしているのですが、取り急ぎ現段階で見えている課題を将来の自分に向けて記録します。
まずデータの保存ですが、これは外部ファイルに保存する、という形式にしています。 現在はjsonで保存していますが、データフォーマット/スキーマ設計は置いておいて、外部ファイルに保管する、という方針は今のところ問題なさそうです。
# 実装イメージ func save_dict() -> void: var file: File = File.new() file.open(file_path, File.WRITE) file.store_string(to_json(dict)) file.close()
あとは、プレイヤーが編集可能な辞書をどう作るか、です。
取り急ぎプロトタイプとして、Tree Nodeを使って編集可能なKey - Val辞書を作ろうとしましたが、これが少し厄介でした。 Tree Nodeでは列ごとにフォントを変えることができないので、Keyを架空言語のフォント、Valを日本語フォント、と設定を分けることができません。
このフォント問題を解決(回避)しようとしてKeyとValを別々のテキストNodeとして構成すると、今度は別の問題 (編集したテキストを取得してKeyと紐付けて更新する処理などなど)に綻びが出てきてしまいます。
これら問題を切り分けするのに無駄に時間を浪費してしまいましたが、適当に仮実装で済ませようという元々の思想が悪かった、というのが今の気持ちです。
ちゃんとSceneを切り出すなどして、手を抜かずに設計し直そうと思っています。
おわりに
今回は進捗というより、試行錯誤の記録のようなものになってしまいました。
構想時は簡単だろうと思っていたものも、いざ書いてみると躓きまくる、というのはあるあるですね。
[関連記事]