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

以前、テキスト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を作る

NPC(NonPlayerCharactor: プレーヤーが操作しない)を作成していきます。
上画像(UML)に示したように、戦士は基本的なコマンドとHP, MPなどがあるだけで全然「戦士」っぽくありません。さしずめ、プレーヤーが使用するキャラクターと言った感じでしかありません。
しかし、使用するコマンドは戦士のものでなくてはならないのでUMLはこのままです。

次は何を考えるか?

ちょっと「戦士」からは遠ざかってしまうのですが、プレイヤーが操作するキャラクターとゲームに登場するプレーヤーが操作しないキャラクターについて考えて見ます。つまりは以下のことについて考えます。

プレーヤーが操作する→ PlayerCharactor
 プレーヤーが操作しない(ラスボスや町人) → NoPlayerCharactor

TRPGの世界では「PC」とか「NPC」と呼ばれるものです。

ポイント

以下のことを考えてそれを各クラスにまとめます。

  1. PlayerCharactorクラスは、戦士だけではなく、勇者〜遊び人までに共通すること
  2. NoPlayerCharactorクラスは魔王や敵キャラ、町人などに共通すること

まずは「プレーヤー」が「操作」を行わないNPCを考えていきます。
NPCと言っても、範囲が結構広いので無難なところを攻めます。最低限必要なHPなどはPlayerクラスで定義しています。この他にどんなことを描きたいでしょうか?

自分のアイディアになりますが、下のように作成しようと思います。

NoPlayerCharactor

このクラス(NPC)は、基本的にテレビゲームならばPC(プログラム)が、TRPGであれば、GM(ゲームマスター)が操作します。なのでプレーヤーが操作するように「想定外の操作」というものを考えなくて良いので先にNPCから作成していきます。

NPCの役目

ストーリーを進めていくために、かながら図必要になるのがNPCです。主人公だけでは話が進みません(笑)
そして、時々、仲間に加わるNPCもいます。なのでPlayerであることには変わりなく、また操作できるか否かの違いがあるだけです。おおきなさですけど。。。

しかし、ここで重要なのは「どのように表現するか?」なので「役目」に重きを置き表現することにします。つまり、詳細な部分は「他のクラスでラップしてしまう」方法でごまかします(笑)。後々にそのクラスも作成しますのでご安心ください。
ちなみに、イメージは下のようになります。

NPCは話の進行を支配する

上記の通りに、話を進める上で「はなす」などの操作でイベントの発生などを実行しない限り話が進まないのです。なので、以下のようにNPCを作成して見ました。

public class NoPlayerCharactor extends Player {
   /** ストーリーのイベントクラス */
   private StoryEvent event;
   /** 実際に話す内容 */
   private String[] talk;
   /** 話しかけられる */
   public String[] beTalked() {
      return talk;
   }
   /** イベントクラスへ様々な通知を行う */
   private void callEvent() {
   }
}

ちょっと中途半端ですが。。。
今回はここまでにしておきます。

でわでわ。。。

関連ページ

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 4Boolean
  5. Java Basic Level 5If 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 9Training 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">