今からはじめるプログラミング17
絵を描くのをちょっと中断してしまっている。
正確には描いてはいるのだが、スキャンしに行くのが面倒で、行っていない。ボールペン画ですが。
そして実は結構コーディングしていたり。
そこが問題。
結構コーディングしてしまったため、説明が追いつかなくなってしまったのです。
ステータス画面にモンスターを表示させて、戦闘のイベントをコーディングしようと思い、まずキャラクターのコマンドを表示するパネルをつくり、コマンドを選択する流れを作ったまでは良かったのですが、さて相手側も実装しようかな、と思った時、少し面倒なことに気がついてしまいました。どうせならキャラクターを継承してモンスタークラスを作ろうと思ったのですが、キャラクターのクラスはシングルトンとして作りました。
どういうことかというと、シングルトンは継承しても一つとして認識します。故にシングルトンなのですが、モンスターの値を設定してもキャラクターの値に上書きになってしまいます。
以下のような感じです。
Monster
-------------------------------------------------
package sample7;
public class Monster extends UserCharactor {
private Monster() {
Monster.getInstance().setCommand(new String {"なでる","わたす","にげる"});
Monster.getInstance().setHp(10);
Monster.getInstance().setImage_path("./あざらし.png");
Monster.getInstance().setMax_hp(10);
Monster.getInstance().setName("あざらし");
}
public static void main(String args) {
UserCharactor user = UserCharactor.getInstance();
user.setCommand(new String[]{"","",""});
user.setHp(5);
user.setImage_path("");
user.setMax_hp(5);
user.setName("ぺんぎん");
System.out.println("Monster:"+Monster.getInstance().getName());
Monster.getInstance().setName("あざらし");
System.out.println("user:"+user.getName());
}
}
-------------------------------------------------
実行結果は以下のようになります。(コンソール出力なので、文字列ですいません。)
-------------------------------------------------
Monster:ぺんぎん
user:あざらし
-------------------------------------------------
反転してしまいます。ようはシングルトンの役目をきちんと果たしています。
なので、MonsterとUserCharactorのスーパークラス(GameCharactor)をつくり、共通要素をそちらへ移動します。
そんな感じで、ちょこちょこ作ったのが、以下のような画面。
まぁいいかな?
Googleドライブのリンクです。
が詳しいです。
で、システム開発についてこの記事に関連して、今回は最初にユーザーキャラクターというクラスを作ってしまったので、親クラスのゲームキャラクターが後から実装という形になりました。こういう感じで、オブジェクト思考のアプリケーションというかシステム開発では、抽象化と具体化、具現化?を繰り返して、システムをより洗練させていくスタイルをとることがあります。おおまかな設計と具体的な実装、最初は大まかでも作り込んでいくうちに具体的に、逆に具体的な部分から共通する事項を抽象化して、という感じで、とある技術者(月に数マンステップコーディングしてしまうモンスターですね。)の言葉を借りれば、粒度をコントロールして、システムを作り上げていく、オブジェクト思考的にはこういうスタイルが適しているとのこと。
よって官公庁系のシステム開発とか硬めの金融系プロジェクトとは、根本的な部分で相容れないシステム開発手法なのかもしれません。
予定がたたない。