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

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

NPC(NonPlayerCharactor: プレーヤーが操作しない)を作成していきます。前回作成したのは下のようなイメージです。

ここから、不確定要素の部分をちょいと入れ込みます。それは、以下のようなところです。

  1. NPCの種族や生い立ち、性格など
  2. 話の中での立ち位置や、役目(何かのヒントをプレーヤーに伝えるなど)
  3. ゲーム(RPG)に参加する(プレーヤになる)のか?

ゲームの進行上はあまり重要ではありませんが、サブストーリーなどの展開も考えられるのでそのようにしました。

そして、これをクラスで表現すると下のようになります(自分の場合)

public class NoPlayerCharactor extends Player {
   /** ストーリーのイベントクラス */
   private StoryEvent event;
   /** 実際に話す内容 */
   private String[] talk;
   /** NPCの種族、生い立ちなど */
   private CharStory charStory;
   /** 仲間になるかどうか? */
   private boolean canBeFriend;
   /** 話しかけられる */
   public String[] beTalked() {
      return talk;
   }
   /** イベントクラスへ様々な通知を行う */
   private void callEvent() {
   }
}

まだまだ、追加されるべき項目はありそうですが、ここで一度NPCについては考えることをやめます。

次は何を考えるか?

次はPlayerCharactorに関して考えます。少しずつ「戦士」を作成するところに近づいていきます。
まず考えるべきところは、NPCと違い「プレーヤーが操作する」というところです。そして、ストーリーを進めていく上で、「成長」「感情の変化」などしていくであろう存在です。が、ここでは、そのような「ストーリー」に依存する部分を「Story」と名前のつくクラス群に責任を押し付けて話を進めます(笑)。
ちなみに「責任を押し付ける」というのはその部分を担当させるという意味です。「放り投げる」ということではありませんので。。。

PlayerCharactor

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

PCの役目

ストーリーを進めていく主人公なので、いろんな操作ができる必要があります。
ストーリーに依存する部分もありますが、基本的にはテレビゲーム、TRPGにあるような「基本的な動作」があります。
ちなみに、今回作成したイメージは下のようになります。そして、矢印は継承関係を示します。Playerを継承してPlayerCharactor, NoPlayerCharactorクラスが存在しています。

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

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

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

でわでわ。。。

関連ページ

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などもやります。

コメントを残す