以前、テキストRPGを作成する方向でJavaの基本に関して記載しました。
しかし、学習順序を、ちょいと飛ばしてしまったように思い。追記する次第です。
今までにやってきたものは下関連ページに記載しております。
まとめると、ミニゲームを作成する中でJavaの基本を理解していこうというものです。ちなみに「基本」と言ってもいろんな意味があるので、詳細はオブジェクト(クラス)を組み合わせてどんなものを作っていくか?を考えるための基本というところです。
ここでいう基本は。。。
クラスを作成して、クラスとクラスの関連をどのように作り、どのような形で動かしたら良いか?
を考えるための基本になります。
作成途中になりますが、イメージとしては下のような感じです。そしてこのような「絵」のことをUMLを呼びます。全世界共通語ですので、言葉が通じなくてもこのUMLでの会話であれば全世界共通です。
参考に「デザインパターンなどを調べてみるのも1つです。このデザインパターンというのは現代ではすでに常識(JavaAPIで実装済)なので、意識して使用することは少ないかもしれません。
RPGキャラクター
RPGと言ってもいろんなRPGがあるのですが、ここではテキストRPG(TRPG)を考えていこうと思います。具体的には下のようなキャラクター(職業?)がいます。
- 勇者
- 戦士
- 僧侶
- 魔法使い
- 商人
- 遊び人
- 賢者
テキストRPGは文言のみでストーリー、ゲームを進行していきます。絵がないので、UI(ユーザーインターフェース)は人間の「想像力」になります。世界最高のGPU(グラフィック・プロセッシング・ユニット)を使用したゲームということになります(笑)。
「RPGのキャラクター」と一言で言ってもイメージがぼやけてしまうので、考える(言葉の)範囲を絞っていきます。RPGの中の「ドラゴンクエスト」を土台にして考えます。
前回は、戦士を作成する方向で進んできたのですが。まだ中途半端なところなのでその続きをやります。
NPCを作る2
NPC(NonPlayerCharactor: プレーヤーが操作しない)を作成していきます。前回作成したのは下のようなイメージです。
ここから、不確定要素の部分をちょいと入れ込みます。それは、以下のようなところです。
- NPCの種族や生い立ち、性格など
- 話の中での立ち位置や、役目(何かのヒントをプレーヤーに伝えるなど)
- ゲーム(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クラスが存在しています。
この記事にある内容で設計を進めると話が大きくなりすぎるので、仕様を変えて下のようなアプローチで開発しようと思います。
- Java ミニゲーム ソース付き 〜RPGの戦闘シーンを作るin Console〜
- Java ミニゲーム ソース付き 〜RPGの戦闘シーンを作る2 in Console〜
- Java ミニゲーム ソース付き 〜ここまでのまとめ〜
- Java ミニゲーム ソース付き 〜コンソールゲームをJavaFXに組み込む〜
- Java ミニゲーム ソース付き 〜テスト駆動開発:文言出力部品を作る〜
- Java ミニゲーム ソース付き 〜コンソールアプリからGUIアプリへ〜
設計中に「いつまでたっても開発に手がつかない。。。」というような状況になったら開発内容を限定して、今回はこの部分だけ作る。というような形で実装して行くと、成果物を残せつつ、次のステップに繋がる形で作業を区切る事が出来ます。
でわでわ。。。
関連ページ
Java Basic
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- 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">