Java オブジェクト指向4 〜テキストRPG PlayerCharactorを作る〜

以前、テキストRPGを作成する方向でJavaの基本に関して記載しました。
しかし、学習順序を、ちょいと飛ばしてしまったように思い。追記する次第です。

今までにやってきたものは下関連ページに記載しております。
まとめると、ミニゲームを作成する中でJavaの基本を理解していこうというものです。ちなみに「基本」と言ってもいろんな意味があるので、詳細はオブジェクト(クラス)を組み合わせてどんなものを作っていくか?を考えるための基本というところです。

ここでいう基本は。。。

クラスを作成して、クラスとクラスの関連をどのように作り、どのような形で動かしたら良いか?

を考えるための基本になります。
作成途中になりますが、イメージとしては下のような感じです。そしてこのような「絵」のことをUMLを呼びます。全世界共通語ですので、言葉が通じなくてもこのUMLでの会話であれば全世界共通です。

参考に「デザインパターンなどを調べてみるのも1つです。このデザインパターンというのは現代ではすでに常識(JavaAPIで実装済)なので、意識して使用することは少ないかもしれません。

RPGキャラクターで考える

RPGと言ってもいろんなRPGがあるのですが、ここではテキストRPG(TRPG)を考えていこうと思います。具体的には下のようなキャラクター(職業?)がいます。

  1. 勇者
  2. 戦士
  3. 僧侶
  4. 魔法使い
  5. 商人
  6. 遊び人
  7. 賢者

テキストRPGは文言のみでストーリー、ゲームを進行していきます。絵がないので、UI(ユーザーインターフェース)は人間の「想像力」になります。世界最高のGPU(グラフィック・プロセッシング・ユニット)を使用したゲームということになりますネ(笑)。

「RPGのキャラクター」と一言で言ってもイメージがぼやけてしまうので、考える(言葉の)範囲を絞っていきます。RPGの中の「ドラゴンクエスト」を土台にして考えます。

前回は、NPC(NonPlayerCharactor)を作成する方向で進んできたのですが。ある程度作ることができたので、PC(PlayerCharactor)を作成します。

PlayerCharacorを作る

PlayerCharactorは、例えになりますが、下のように定義します。

public class PlayerCharactor extends Player {
   private Body body;
   /** 話す */
   protected String talk() {
   }
   /** 調べる */
   protected String use() {
   }
   /** たたかう */
   protected String attack() {
   }
   /** 防御 */
   protected String difense() {
   }
   /** 強さ */
   protected String showStatus() {
   }
}

PlayerCharactorはプレーヤーが操作するキャラクターです。具体的には上記の写真にあるように、Fingter(戦士)はPlayerCharactorクラスを継承したクラスであり、操作するコマンドは親クラスにある処理をオーバーライドして使用します。戦士固有のコマンド処理は「たたかう」と「ぼうぎょ」が対象になりますので、実装イメージとしては下のような形です。そして、「とくぎ」は現状の設計では、戦士固有のコマンドなので、あとで、下のコードに「とくぎ」を追加します。

public class Fighter extends PlayerCharactor {
   @Override
   public String attack() {
   }
   @Override
   public String difense() {
   }
}

UMLで書くと下のようになります。※他のプロパティなども記載しています。そして、NPC(NoPlayerCharactor)クラスに関して、プレーヤーが操作する可能性があることに気がついたので、継承先をPlayerクラスからPlayerCharactorクラスに変更します。UMLで考えていくと楽です。矢印が上の絵と変わっています。

そして、作成したPlayerCharactorクラスを継承して、以下のコマンドに対してオーバーライドしてやれば戦士クラス(Fighter)が一応の形ですが、出来上がります。もし、「とくぎ」を親クラスのPlayerCharactorに移動する場合は、オーバーライドする形に変更します。

public Fighter extends PlayerCharactor {
   @Override
   public int attack() {
   }

   @Override
   public void difense() {
   }

   /** 戦士固有のコマンドなのでオーバーライドしない */
   public int specials() {
   }
}

大まかにこんな感じです。

とりあえずは

とりあえずは、戦士クラスが作成できました。色々と足りない部分がありますが、概要レベルでの「戦士」というものがちゃんと定義できたと思います。

次は何を考えるか?

次は、戦士に武器や防具を装備できるようにBodyクラスを具体的に定義していこうと思います。

Bodyクラス

ここで定義(中身はからです)しているBodyクラスの用途としては、ゲームをプレイ中のプレーヤーの実体を表します。リアルに考えると膨大な量になってしまうので、ここはちょいとかいつまんだ感じにして定義していきます。
まずは、具体的に自分の体を土台にして考えてみてください。
そして、ゲームの世界に入って、(戦士になっている想定で)武器を、防具を装備して戦いの準備、もしくは冒険の準備をすることを考えてください。
ちょっとワクワクしましたか?(笑)

方向転換します。

この記事にある内容で設計を進めると話が大きくなりすぎるので、仕様を変えて下のようなアプローチで開発しようと思います。

  1. Java ミニゲーム ソース付き 〜RPGの戦闘シーンを作るin Console〜
  2. Java ミニゲーム ソース付き 〜RPGの戦闘シーンを作る2 in Console〜
  3. Java ミニゲーム ソース付き 〜ここまでのまとめ〜
  4. Java ミニゲーム ソース付き 〜コンソールゲームをJavaFXに組み込む〜
  5. Java ミニゲーム ソース付き 〜テスト駆動開発:文言出力部品を作る〜
  6. Java ミニゲーム ソース付き 〜コンソールアプリからGUIアプリへ〜

設計中に「いつまでたっても開発に手がつかない。。。」というような状況になったら開発内容を限定して「今回はこの部分だけ作る。」というような形で実装して行くと、成果物を残せつつ、次のステップに繋がる形で作業を区切る事が出来ます。

具体的にはバージョン分けをするという事です。

  1. プレイヤーとモンスターの一対一での戦闘を実装する
  2. プレイヤーに攻撃力などのステータスを付与してやる
  3. モンスターにもステータスを付与
  4. モンスターをランダムに生成して違うモンスターとの戦闘を行う

などの様にバージョン分けを行い作成して行く、いわゆるアジャイルな開発を進めていく方向に移行することにしました。

Java ミニゲーム ソース付き 〜RPGの戦闘シーンを作るin Console〜

でわでわ。。。

関連ページ

Java Basic

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

<ins class="adsbygoogle"
style="display:block"
data-ad-format="fluid"
data-ad-layout-key="-6t+ed+2i-1n-4w"
data-ad-client="ca-pub-7367785927150581"
data-ad-slot="3284986237">

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す