ソースの公開にむけて、きょうはArmy,ArmyViewer,Boardクラスなどに注釈文をいろいろつけくわえてみました。これで多少は読解がしやすくなったような気がします。あくまでも気がするだけですが。
またシングルスレッドルールなるものにしたがって、ArmyViewerクラスの描画メソッドも改良しました。この改良によってArmyViewerクラスの描画メソッドはイベントディスパッチスレッドからのみ呼び出されるようになりました。
シングルスレッドルールとは、「ひとたびSwingコンポーネントがrealizeされたら、そのSwingコンポーネントの状態に影響をあたえうる、もしくは、そのコンポーネントに依存しうるコードは、event-dispatching threadから実行されなければならない」というものです。
といっても、これではろくに説明になっていないので、詳細については以下のページを見たほうがいいような気がします。Threads and Swing
翻訳の王様のVersion5と「リファクタリング -プログラミングの体質改善テクニック-」という本をかってきました。翻訳の王様はVersion3のころとくらべると、辞書機能がなかなかすてき。リファクタリングの本は目から鱗がおちまくり。文章も日本語としてわかりやすいし、おすすめ。
ただ、この本は読者に前提条件として、オブジェクト指向、Java、基本的なデザインパターンについての知識を要求しているようなかんじ。
というわけでオブジェクト指向、Java、基本的なデザインパターンについての知識はあるが、リファクタリングについての知識はあまりないかたに、おすすめ。
で、序章を読みおわったところで、いったんおふとんに入ったのですが、けっきょく起き上がり朝まで読みふけってしまいました。とりあえず、きょうは第1章まで読みおわりました。
とりあえず軍隊ユニットは、まずプレイヤーにさからうことのない存在としてゲームをつくろうかとおもう。それに対して民衆ユニットは弱いがプレイヤーの意のままにはならない存在にしようかとおもう。
もちろん最終的には軍隊ユニットすらも、プレイヤーの意のままにはならない存在というゲームになる予定ではあるのだが。
(軍隊は意のままになり、民衆ユニットは意のままにならない存在としてつくられるゲームにおける)民衆ユニットはAge of Empiresにおけるガゼル、いや象やイノシシに近い存在といえるかもしれない。つまりプレイヤーが食糧など(このゲームにおいては食糧・資材・兵士)を得るための存在であり、なおかつプレイヤーの意のままにはならぬものたち。そしてプレイヤーの持つ軍隊ユニットの兵力(AoEにおいては町の人の数)が少なければ、食糧を得るどころか逆に彼らの反撃によって損失がでてしまう。
ソースコードの清書が、ひととおり終わりました。実験用につくって、いまは使わなくなったクラスファイルやコードなどを一通り削除しました。こんどは、先週、買ったリファクタリングを応用して、もっと読解しやすいコードに作り直してみたいとおもいます。
そういえば、こうしてソースコードを読み返して気がついたのですが、インターナルフレームを作成するコードのあたり、インターナルフレームを閉じるときの処理を作っていないので、メモリがもれまくりです。こちらも、そのうちなんとかしなければなりません。あとクラスの数も、昔にくらべて、ずいぶんと多くなったので、近いうちにパッケージ化もしたいものです。
ソースコードの清書も終わったので、zip形式に圧縮して公開してみることにしました。ゲーム内で使用している画像ファイルなどは添付しなかったので、これを解凍してコンパイルしても、そのままでは実行できませんけれど。ThreeKingdoms.zip