Java Bassic オブジェクト指向 〜サンプルRpgMainクラス〜

オブジェクト指向プログラミングのサンプルとして
テキストRPGを作成しようと思います。

まだ、ゲームの内容が決まっていないので、処理フロー部分のみ
の実装になります。
ソースはこちらになります。

< テキストRPGの処理フロー >
1. 初期処理: リソースの読み込み、ゲームのセットアップ
2. ゲームループ: 入力→描画、データの更新など各処理を行う
3. 終了処理: ゲームを終了する

クラスのアウトライン(RpgMainクラスのプロパティ)

処理を行うメソッド一覧

main(): メインメソッドです、以下のメソッドを呼び出します。

> init(): 初期処理、RpgMainクラスのインスタンスを生成します。
> gameloop(): ゲームのループ(入力→描画など)
> terminated(): 終了処理、読み込んだリソースを解放します。
「処理概要」
上記の様に初期処理〜終了処理を行います。
もし、想定外のエラーがあった場合、例外のレポートを行い
ます(printstackTrace()メソッドを使用)
そして、アプリケーションを強制終了します。
→System.exit(-1); // 異常終了ステータス「-1」を渡します。

init(); 初期処理を行います。

RpgMainクラスのコンストラクタを起動します。
コンストラクタでは、Rpgクラスを生成(インスタンス化)
してフィールド変数「game」に設定(代入)します。
※メインメソッドはJVMより直接呼ばれるので
RpgMainクラスをnewする必要があります。
JVM = Javaを起動する仮想マシン、JavaVirtualMachine
コンストラクタでは、initialize()メソッドを呼び出しています。
initialize()では、ゲームに必要な以下のクラスを生成します。
A1. 標準入力クラス: JavaAPIで提供されるクラスBufferedReader
A2. 初期画面クラス: ViewStatusクラスの子クラス
※今後作成していく段階で必要なクラスを全てここで作成します。
現在は、初期画面と1ステージ画面を「new」しています。
オブジェクト指向的にイマイチな実装なので、今後修正予定です。
「処理概要」
RpgMainクラスのコンストラクタでinitialize()メソッドで
初期処理に必要なリソースの読み込み、クラスの生成などを
実行します。※今後増える予定
標準入力と初期画面クラスを生成します。初期画面クラスは
フィールド変数に代入(設定)します、この変数(プロパティ)は
画面の状態(初期画面、1ステージ画面)など)を表します。

gameloop(): ゲームループ処理を行います。

無限ループを行います。入力にフィールド変数
TERMINATE_GAME="bye"が入力された時に
ループを抜けます。→終了処理へ
ループ処理は以下の順で処理を行います。
B1. RpgMain#listenInput()でユーザーの入力を受け付けます。
B2. 入力値が"bye"の時にはループを抜けます。
B3. RpgMain#execute()を起動しViewStatusを取得します。
ViewStatus(画面状態)は「execute」メソッドを持っていて
コマンドに対応する処理(execute)の後にViewStatus(画面状態)
を返却します。
フィールド変数のViewStatusクラス(画面状態)が切り替わり
ゲームが進行します。

ソースを見ながら説明します。※ソース

「フィールド変数」

このクラスで使用するプロパティ(フィールド変数)です。
game: このクラス、自分自身になります。
TERMINATE_GAME: ゲーム終了コマンドです。
read: ユーザーの入力を受け付けるクラスです。
status: 画面状態クラスです。タイトル、1ステージetc...

「メインメソッド(main)」:staticメソッドです。

上記で説明した通りです。
インスタンス・メソッド→RpgMainクラスに呼ばれる
とスタティック・メソッド→JVMに呼ばれる
を区別するために両方実装しました。

「初期処理メソッド(init)」: staticメソッドです。

RpgMainクラスのコンストラクタを呼び出します。
コンストラクタは、initializeメソッドを実行します
このメソッドはゲームで実行するリソースの読み込み
使用するクラスのインスタンス取得などを行います。

「ゲームループ(gameloop)」: 入力→データの更新→描画を行います。

フィールド変数の標準入力よりユーザーの入力を受けます。
「bye」が入力された時にループを抜ける。
画面状態の「execute」メソッドを実行する。
また戻って同じ処理を行う。

とりあえず、表面的な処理を説明しました。
詳細は今後作りながら解説していきます。

画面の作成

Java Basic ミニゲーム作成 〜コンソールゲーム〜