NPC をコーディングして領地経営するゲーム開発(Python 対応の RPC に着手)
Python 対応を進めます。NPC を制御する Python コードを個別に実行して、ゲーム側のサーバと TCP/IP 通信して必要な情報を送受信して動作させようとしています。
やったこと
主に Python クライアントとゲーム側サーバとの通信まわりを実装していきます。
ゲーム側のサーバを起動する
とりあえず、ゲーム側で各クライアントからの接続を過去に実装した TcpipServer.cs クラスを使って Listen できるようにしました。
よいです。
Python クライアント側の調整
Lua も C# もそうですが、Python も詳しくないので PEP8 のドキュメントを読んだり、実行して pdb モジュールが返す文字列を読み解いて実行時エラーの修正をしたりしていました。
それから、ログを見ていて「複数の Python スクリプトの pdb のログが1つのコンソールに表示されると混ざってわからない。コンソールは複数にする必要があるのでは?」と思ったりしました。少なくとも stderr として出力される情報は Python スクリプトごとに確認できた方がよさそうです。
ログまわりの UI をどう変更するかは少し考えます。
クライアント用のモジュールの実装予定
そして Python スクリプトとゲーム用サーバで通信して情報のやり取りを行うわけですが、例えば keep = world.keep() という Python のコードがクライアントで実行されたら
- world モジュール経由でゲーム側サーバに TCP/IP 接続を行う。(未接続ならば)
- world.keep, 引数なし、という内容をゲーム側サーバに送信する。
- 城塞(Keep) の位置情報を受信する。(位置情報をキーとして利用する)
- 位置情報で初期化した Building クラスのオブジェクトを作って返す。
- 不変なデータである Name を受け取って初期化してもいい。
- 以降は Building オブジェクトのメソッド呼び出しでゲーム用サーバと通信して情報のやり取りや制御を行う。
という処理を行います。
思ったように実装が進んでいなくて、このあたりは次回に行います。開発に着手できたのは大変よいです。
VS Code で追加パスにあるモジュールを認識せずにエラーになるのを修正した
このゲームの Python モジュールは sys.path.append() で追加しているのですが、そのパスを VS Code の Pylance が検出しないらしくて、調べて対処しました。
結論としてはこのサイトにある設定を追加したら動作するようになりました。よいです。
sys.path.appendで追加したパスがPylanceで認識されない
雑多な実装
荷馬車のドット絵を清書して、発車時の効果音を適用した
動作するのを確認しました。よいです。
荷車のドット絵はもう少し汚した方がよさそうですが、また後で検討します。
まとめと今後の予定
Python 対応の実装を少し進めて、実行時のエラーを修正して TCP/IP でどういう通信するかを確認しました。よいです。
次回は、この Python 対応の続きを少しでも行います。がんばります。