第13回.連載でJavaゲーム作っちゃいます弐
ほるえ:
ますた〜。デザインパターンを使うってことは決めましたが、具体的に何しましょ。
Masa: まあ、とりあえず習うより慣れろだな。本*貸してやるから、ここのファクトリパターンを参考にしてキャラクタを増やしてみろ。*)やさしいUML入門―Javaオブジェクト・モデリング
ほるえ: ファクトリ?って工場じゃないですか・・に、肉体労働はちょっと・・・・
Masa:
お約束は、いいから。ファクトリパターンは、メソッドを作るときに使うデザインパターンなんだよ。
これを利用すれば、いま一人しか出ないキャラクタをいっぱい出せるだろ。
ほるえ: でも、もともとのプログラムをいっぱい出てましたよ。何で、こんな風にするんですか?
Masa:
練習版のシュミレーションも含めて、これまでやっていた方法は、起動後のコンストラクタですべてのメソッドを作ってしまって、表示をする・しないとかでやってたんだよ。でもシュミレーションとかだと、ユーザーの好みでいろいろ変えたくなるだろ。そうすると、この方法じゃ、まずいわけだ。わかったか?
ほるえ:
なんとなく・・・(面倒を押し付けられたのがですけど・・)

今回の実装

方針:キャラクタを自由に追加できる様に、Factoryパターンを参考にして作っています。

クラスと働き
TeamMaker CharInterFaceの参照と、CharacterMakerへのデータ渡しをしています。
CharacterMaker MageItem,Frighterを生成するためのファクトリ。
CharInterFace
<<interface>>
マップデータと場所評価点を持つクラス。
場所評価点はコンピュータ側の移動に関するもののため今回は使用せず。
FrighterItem 戦士クラス、CharInterFace<<interface>>をimplementしています。
Characterを継承しています。
MageItem 魔法使いクラス、CharInterFace<<interface>>をimplementしています。
Characterを継承しています。
Character 表示キャラクタのスーパークラス候補。一応必要そうなものは入っているが戦闘系はまだ未実装なので、その時再検討を要す。
実装クラス図
修正です。
drawImage用オブザーバとして、Sumulationと関連をつけていたところを外し、Appletとして上流側から受け渡しをしました。
たとえば、sumulationクラスで、
  public void initialize() {
    man = new Man(charColorImage, charGrayImage, butImage,characterData.getCharX(),
              characterData.getCharY(),mapColorImage, mapGrayImage,butImage,this);
  }
として、sumulationのインスタンスをManクラスに渡しました。これをバケツリレーのごとくやっています。
クラス図は少し見やすくなったでしょ?(ほ:06.02.08)
修正2です。
マップ関係をまとめて、MapInterFaceというinterFaceを経由してコマンドを送ることにしました。
「こうしておくと、クラスの再利用が簡単だ。」と、マスターは言っていますが、ただ単に覚えたてのinterFace関係を使いたいだけだと、
ほるえは、おもいます。
ダウンロードのソースデータに追加しておきますので、よかったら参考にしてください。(06.02.12)

ほるえ: む〜何とかやってみました。結局、まるっきりパクリになってます。
Masa: よいよい、こういうものは、パクリから始めるが肝要だ。でやってみてどうよ?
ほるえ:
そうですね。ぶっちゃけちゃうと、本読んだだけだと、いまいちぴんと来なくて・・・。でしょうがないから、なんとなくで作り始めたんですよ。そうすると、JBuilder君が間違っているところをびしびし指摘してくるので、「ごめんなさ〜い」ってしながら直していったんです。
やっぱり、開発環境って大事だなって思いました。
Masa: まあな。でも開発環境ばかりに頼っていると、新しいことはできんからな。開発環境は、指摘はしてくれるが、自分から作り出すことはできないからね。
ほるえ:
は〜い。

「今回の成果」

画面構成上、別画面にしています。
右のボタンでページが立ち上がります。


追加された操作
キャラクタにマウスをあわせて、右クリックするとポップアップメニューがでます。
メニューに新しく、"CallMage"と"CallFrighter"が追加されています。
"CallMage"を選択するとシルフが出ます。
"CallFrighter"を選択するとピクシーが出ます。
(あ、キャラあってない・・・)

ソースコードのダウンロードは、こちらから

ほるえ: 呼び出すキャラがちょっと違ったけど、ふわふわ感があってて、これはこれでいいかも。
Masa: まあ、動作テストだからな。リリース版ではちゃんと直すように・・
で、今回は結構まじめにデザインパターンをやってみたんだけど、感想は?
ほるえ:
ん〜。デザインパターンていうから、「なんか難しいのかしらん」と思ったけど・・・。その通りに作ればソフト動いちゃうんで、どっちかっていうと使ったほうが楽にソフト作れるかも・・・・
Masa: の割りにてこずってたみたいだけど・・・・(にゃっ)
ほるえ: (うっっ、いじめっこだ)
そ、それはちょっとデザインパターンを理解するのにてこずっただけで・・・・
Masa: つまり、「ウイザード」には、まだまだってことだな。
ほるえ:
しくしく。
とりあえず、デザインパターンを使ってオリジナルバージョンから若干進化しました。
といっても、ゲームになるには、まだまだです。

Copyright (C) 錬金術師Masa
更新:2006年02月12日