■ はじめに

前回、PNGファイルを並べて表示用マップを作りました。

このチェックに使ったプロンプトを仕様書に追記すればいいと思っていました。

(できたGIFアニメ、圧縮したらイマイチ)



一見上手くいっているようですが、問題が残っていますね。

・信号がでない(信号ルールが入らない)
・人がでない(人回避のチェックできない)

この問題、前回のPNG表示のテスト用コードでは
信号ロジックと人配置ロジックを
呼び出していなかったため、確認できてません。

さっそく仕様書を立ち上げ、対策しようと中身を確認するも…

「見づらい」

これまでのランダムウォーク的な仕様書変更により、スパゲッティコードならぬ、スパゲッティ仕様を作っていました。

今回は、こんがらかった仕様書を整理して、人配置や信号ルールなどが入ったロジックの生成を目指します。



■整理・整頓の基本は捨てる事

サイズを32×32にして、自動生成マップ上を動くロジックを作ることを目標にして仕様を見直すことで、今の仕様書から捨てる物が見えてきます。

今は使わないもの
・模倣学習、マップの色指定

結構苦労したので、捨てるのに勇気が必要ですが、これだけで随分とスッキリします。

更に、お試しで作ってる上半分を試作ロジック、
試作を改良して本番用にしているところを本番用ロジックとすると分かりやすくなります。

この整理によって

・試作ロジック → 検証用
・本番ロジック → 実行用

と役割が明確になり、

ChatGPTにコード生成を依頼する際も
誤解が起きにくくなりました。

後は変更点を書いて置きます。

試作ロジック

・サイズ:16×16(固定マップ)
・人マーク:未確認○、確認済◎
・表示:アスキーマップ
 マップ全体表示
・信号アスキーは、信号色によらず固定
 (縦方向①、横方向②)

本番用ロジック

・サイズ:32×32(将来も32が最小、自動生成)
・人マーク:
 未確認(下歩道)s(下横断歩道)z
 確認済(下歩道)S(下横断歩道)Z
・表示:PNGファイルから成る表示用マップ
 (アスキーマップは、コードの進行で用いるため、
 論理メモリー内で処理し、求めがない限り、
 表示しない)
 エージェント周囲7×7マスの表示
・信号アスキーと信号色によって6通りの
 バリエーションを持つ。
 他の挙動は試作ロジックと等しい

 アスキー ① 信号 赤 PNG signal_1_red.png
 アスキー ① 信号 黄 PNG signal_1_yellow.png
 アスキー ① 信号 青 PNG signal_1_blue.png

 アスキー ② 信号 赤 PNG signal_2_red.png
 アスキー ② 信号 黄 PNG signal_2_yellow.png
 アスキー ② 信号 青 PNG signal_2_blue.png

後、信号ルールも怪しいので、本番用ロジック側にも新設しました。

■結果:

という事で仕様書を直しました。
(Google検索窓へコピペ)
github.com/logicmaker256-prog/final_code/blob/main/Final_design.txt

この仕様書に従ったコードがコチラ
(Google検索窓へコピペ)
github.com/logicmaker256-prog/final_code/blob/main/Final_Code.py

このコードを動かすと、Google driveの中の delivery_PNGフォルダからpngファイルを取りに行きます。

pngファイルの用意とGoogle driveへのアクセス権をお願いします。

(詳しくは前回のブログへリンク)

実行すると、delivery_viewというフォルダができ、エージェントが動くpngファイルが大量に発生します。

コチラのコードでgifアニメにする事ができます。
(Google検索窓へコピペ)
github.com/logicmaker256-prog/final_code/blob/main/Animated_GIF.py

(gifアニメの例、圧縮したらイマイチ)


GIFアニメのオリジナルは、コードが入っいるGitHubにzipファイルで入っています。

よかったら見てね。

■ 今回の学び:

今回学んだことは、

「仕様書の整理・整頓は大事」て事です。

AI使って仕様を作ってると、出力をそのままコピペするようなこともあると思います。

でも何処かのタイミングで、整理・整頓しないと読めたものではなくなって、AIも勘違いし始めます。

そうなる前に、自分の仕様書を確認して見てください。

■まとめ

今回は、表示マップを完成するために、仕様書を整理・整頓してみました。

なんとか表示と動作にバグが無いところまで出来たと思います。

本当は、

・表示マップ
・論理マップ

の分離をする予定だったのですが、
仕様整理の過程で自然と分離されていました。

結果的に、理想的な構造になっていたようです。

出来たマップをみていたら、

「なんか、RPGの画面ぽく見えね?」

皆さんは、どう思います?

次回は、このマップシステムを使って
実際にAIで動くRPGをゲームAI的に作っていきたいと思います。

どうなることやら。