2005年11月8日の日記

<2005/11/09 2005/11/07>

分離型

プログラミングコーナー更新ですよ!
はっきり言って思いつきでふと更新しました。
しかし変数に符号付きデータを使っているということを忘れていてソート結果をバイナリエディタで開いて0付近から始まっていなくてかなりあせてしまいました。
しかも、ActiveBasicはファイルの読み書きが弱く、バイナリファイルをまともに読むにはAPIに頼らねばならなくて、面倒だったのでVBで読み込んで「data[0]=… data[1]=… …」というようなプログラムで直接変数にデータを代入するファイルを作って、ABだけファイル読み込みはせずに済ませてしまいました。
純粋にアルゴリズムだけの速度を比較したいということのほかにこういうこともあったんですよね、ファイル読み込みの時間を考慮しなかったこと。

Bomber丸Worldの敵のシステム、基底クラスにキャラクラス、そこから派生して敵キャラクラス、更に派生して個別の敵のクラス、という構造にしたいのですが、それを全部いちいちプログラムに埋め込んでいたら実行ファイルのサイズが、使用メモリが、起動時間が、えらいことになってしまいます。
そこで考えたのが、敵キャラクラス一つにつき一つのDLLに埋め込んで、敵キャラをDLLで提供するという方法。
こうすれば本体をコンパイルしなおさなくても敵を追加できますし、動作が独立になることで保守もしやすそうに思えます。
しかしこれには問題があって、例えばDLLを見れば一気にネタバレしてしまったり、ファイルを削除すれば敵が出なくなったり、そのあたりは適当に考えて隠したり存在チェックをすれば済む話なのですが、もっと問題なのは、DLLの実装方法です。
基本的に同じ基底クラスを本体とDLLで共有して、DLL側で派生クラスとして実体を提供するという形になるのですが、途中で基底クラスの実装を変更してしまうとDLL全部をコンパイルしなおさなくてはならなくなり、かえって保守が難しくなってしまうのです。
だから先にインターフェイスを決めてしまい、後はずっと同じものを使うのですが、この問題があるということは、もっと別の問題も考慮しなくてはならなくなります。
それはDLLの敵からゲーム本体にアクセスする方法です。
このゲームでは他のキャラクターを使って行動したり、ゲーム内の変数を利用したり、高度なグラフィック処理をする可能性があるので、ゲーム本体のクラスなどに比較的自由にアクセスできることが必要なのです。
う~ん…難しそうだ。

<2005/11/09 2005/11/07>