Java テキストRPG作成 〜タイトルを表示する〜
前回、RPGの作成をどの様にやるかを(仕様を)記載しました。
そして、実装してみましたが。。。
画面のステータスをどの様に管理するか?が課題になっております。
とりあえず、現状のソースをアップします。
メインメソッド〜クラス生成と少し長いクラスになってしまいました。
メインメソッドで使用するメソッドは「static」がついてます。
RpgMainクラスのコンストラクターからメンバメソッドには「static」が
ついてません。
メインメソッドからstatic メソッド
init() => gameLoop() => terminated()を呼んでます。
メインメソッド内でゲームの概要部分の処理を行なっています。
今度は、メンバメソッドでゲームの表示、入力などの処理を実装しています。
現在、initでタイトル用のテキストファイルを読み「title.txt」
コンソールにタイトルを表示しています。
タイトルの表示までできたのですが、まぁ画面ステータスを
どの様に管理するか考え中です。
うーむどうしようか?
ちなみにファイルの読み込みは以下のページを参照してください。
JavaDoc 読解 〜 Filesクラス 〜 – PGボックス
<関連ページ>
- Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
- ステップアッププログラミング〜Java FxでHelloWorld解説〜
- Java StepUpPrograming〜JavaFX で四則計算〜
- Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
- Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
- Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
- Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
- Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜
Java Basic ミニゲーム作成 〜Step3_1〜
前回は、コンソールに「bye」と入力すると終了する。シンプルなアプリを作りました。
今回は、このアプリを拡張してRPGに仕上げていきたいと思います。
まず、ストーリーとか考えないといけないのですが、ちょいと傍に置いておき…
自分の考えたもので失礼します。
<仕様>
1.タイトル画面が出る
2.スタート、コンテニューの選択
3.スタートを選択するとゲーム開始
まずはここまで、やろうと思います。
コンソールゲームなので、全部文字列で頑張ります。
<前提>
スマホ端末の一番小さいやつ
iPhone5sなどを想定して基準にする
画面サイズは半角文字が32文字分を
画面の範囲とする。
<用意するもの>
・タイトル画面用のテキストファイル
→文字列アートでタイトル画面を作成
・ゲームのイントロダクション(語り)
用のテキストファイル
<基本設計>(外部設計とも言う)
1.リソースを読み込む(*.txt, *.properties)
2.ゲームループの作成
3.終了処理
<詳細設計>(本当はクラス図とか書く)
1.画面の状態管理オブジェクト作成
2.選択→決定の処理
3.イントロダクションの表示処理
まずはここまでやろうと思います。
<前提><用意するもの>はさておき…
<基本設計>から考えるとして
各処理をメソッドに割り当てます
1.リソース読み込み
2. 選択→文字入力で判定
3.ゲームのイントロダクション表示
以上の実装をやっていこうと思います。
そして、以前作ったゲームの流れのみ
を実装したものがあるのでそれを基盤
にしてやります。
※ソースは後からアップします
ゲームの流れは以下の順に処理します
1.init: リソース読み込み
リソース管理Object
画面上に表示するタイトルやストーリー
をリソースとして管理します。
つまり、プログラムを修正せずに
タイトルやストーリーを修正できます
2. gameLoop: 入力〜ゲーム進行の処理
今回はタイトル画面での入力処理に
なります。
そして、ゲームの状態がタイトル→
ストーリーに変わりゲームを開始する
状態に変わります。
3.terminated: 終了処理”bye”と入力して
ゲームを終了します
まずはここまでやってみようと思います
<関連ページ>
- Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
- ステップアッププログラミング〜Java FxでHelloWorld解説〜
- Java StepUpPrograming〜JavaFX で四則計算〜
- Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
- Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
- Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
- Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
- Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜
Java Basic ミニゲーム作成 〜ゲームサンプル(土台)〜
今迄やったことをまとめるのに
コンソールゲームを作ろうと思います。
お題はコンソールゲームです。
処理としては、
標準入力を無限ループして”bye”と
入力した時にアプリを終了する
というものです。
このアプリを基盤にして、コンソールゲームを作成します。
今回の実装は、単純に入力したものを「コマンド: XXXXX」と表示するものです。
ダウンロード〜実行までは下のページを参照してください。
Java Basic ミニゲーム作成 〜コンソールゲーム〜 – PGボックス
Macで実行した時のコンソール画面です。
ゲームアプリケーションでは、入力→表示
→次の入力と画面に表示させます。
中身としては上記の詳細ページに記載していますので
そちらを参照していただきたく。。。
こんな感じで、簡単な処理を作成したところで、
実際にどんなゲームにしようか?を考えて実装して。。。
とやっていこうと思います。
今回は、ゲーム自体の処理を実装しました。
起動するJarファイルはこちらです。
文字化けしたものが表示されたら
ここからダウンロードしてください
https://github.com/ZenryokuService/PracticeJava1/tree/master/PracticeJava1/jars
このファイルをダウンロードして、実行できます。
Windowsの場合は、コマンドプロンプトから
ダウンロードしたディレクトリまで移動、以下のコマンドを叩く
>java -jar ./CmdRpg.jar
これで起動できるはずです。
関連ページ一覧
〜サンプルその1〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜
〜サンプルその2〜
環境構築
- Java Install Eclipse〜開発ツールのインストール〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Eclipse SceneBuilderを追加する
- JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
Eclipse セットアップ
- Java Install Eclipse〜開発ツールのインストール〜
- TensorFlow C++環境〜EclipseにCDTをインストール〜
- Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Eclipse SceneBuilderを追加する
- JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
Git
- Java Git clone in Eclipse 〜サンプルの取得〜
- Eclipse Gitリポジトリの取得 〜GitからソースをPullしよう〜
- IntelliJ IDEA Git〜Gitリポジトリからクローン〜
JavaFXでハローワールド〜OpenCVまで
- Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
- ステップアッププログラミング〜Java FxでHelloWorld解説〜
- Java StepUpPrograming〜JavaFX で四則計算〜
- Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
- Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
- Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
- Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
- Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜
Java Basic インターフェース 〜Step2_3〜
前回はリストについてやりました。
今回は、インターフェースについてやります。
結論から言うと、作ってみるのが一番なので、3種類のデータクラスをリストで表示するプログラムを作ります。
<プレイヤークラス一覧> ※
勇者クラス(プレイヤー:ユーザーが操作する)
モンスタークラス(ノンプレイヤーキャラクタ)
本当はクラスファイル1つにつき1クラスで作成するのが
Javaの標準的な実装ルールですが。
今回は、インナークラスを使用してみます。
public class Sample {
private class InnerClass {
// フィールド・メソッド
}
public String fieldStr;
public void sampleMethod() { XXXXX };
}
上記の様に記述します。
そして、Playerインターフェースを作成(インナーインターフェース?)
してInnerClassにimplementsします。日本語では「実装」と呼びます。
ブログなのでちゃんとコードが書けないため
詳細の方を参照してください。
※下の方にリンク貼りました
上記の様にインターフェース「Player」を使用して
勇者クラスを作成しています。
勇者クラスには「攻撃」と「防御」メソッドが実装されています。
この2つのメソッドは、インターフェース「Player」に
抽象メソッドとして「攻撃」「防御」が定義されていますが
インターフェースのメソッドには中身を書きません。
public interface Player {
/** 攻撃 */
public atack();
}
上の様に定義します。いつも記述している「{」「}」がありません。
これは実装(implements)するクラスで中身を書くために(だと思う)
その様な仕様になっています。(ビルドエラーになります。)
実際の使い方は詳細を参照して見てください。
Java Basic インターフェース 〜Step2_3 〜 – PGボックス
でわでわ
<問題1>
詳細ページにあるクラス、インナークラスを参考に
防御処理を実装してください。
ただしサンプルコードは防御処理をメインメソッドで
実行していません。
<関連ページ>
- Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
- ステップアッププログラミング〜Java FxでHelloWorld解説〜
- Java StepUpPrograming〜JavaFX で四則計算〜
- Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
- Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
- Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
- Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
- Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜
Java Basic API リスト 〜Step2_2〜
前回はクラスと標準入出力についてやりました。
今回から、標準入出力で使用した Java
で提供されているクラス群→JavaAPIに関してやっていきます。
※リンクはJava8のものになります。
よく使うのでListについてやろうと思います。
java.util.Listがクラスのフルネームになります。これを完全修飾名、完全クラス名などと呼びます。
完全修飾名は今後やるDI(Dependency Injection)で使用するので頭の片隅に置いておいてください。
そして、Listはインターフェースクラスです。これからやるポリモーフィズムの基礎となるモノですが普通のクラスを理解する方が先です(笑)
今は、よくわからんがリストクラスはListとして使用出来るんだな!って認識でおっけ🌟
詳細は下のページに記載します。
Java Basic API Listの使い方 〜Step2_2〜 – PGボックス
使い方は以下の様にやります。
List list = new ArrayList();
処理としては、ArrayListのインスタンスを生成してList型の変数に代入してます。これは、ArrayListクラスの定義を見ればわかるのですがいちいち全クラス見てられないので、JavaDoc(Java APIの事)を利用します。
そこには、
「〜クラスを継承して〜」とか
「〜インターフェースを実装〜」など
書いてあります。
前回出てきた「親」に当たるのが
「〜を継承する」の部分です。
「〜実装する」はインターフェースを
implements している事を指します。
ここに関しては別個にやります。
そして、こっからがリストの扱いです。
以前扱った配列をラップ(クラスに)して便利にしたものです。
ArrayList<変数の型> list = new ArrayList<>();
list.add(変数); // リストに追加
変数list.get(0); // リストから取得
の様に使います。
詳細は下のページにて…
Java Basic API Listの使い方 〜Step2_2〜 – PGボックス
でわでわ
<問題1>
リストを使用して十二支の名前を表示するプログラムを作ってください。
ただし、ループを使用すること
【追伸】
開発環境のセットアップはこちらを参照ください。
Java Basic クラスとは InputSreamReader 〜Step2_1〜
前回で基礎文法は大体理解しました。
今回はJavaのクラスについてやります
クラス(class)とは以下のものを親に持ったクラスです。
オブジェクト(Object)クラス、データ型は参照型です。→ つまりは「クラス」Objectクラスの子クラスという事。
具体的には、String, Integer, Double ...などの既に用意されているクラスや、自分で作ったHogeクラスなどは、書いてないけど、Objectクラスを継承しています。こういう時には「暗黙的にObjectクラスを継承している」なんて書き方をする本が多いように思います。
内訳としては、コンパイラがそのように解釈して実行するからです。なので、自作クラスには作っていないメソッド「equals(), getClass() ...」などのメソッドが使用可能です。クラスの中に実装した時は、オーバーライドする事になります。
詳細はこちらです。
Java Basic クラスとは InputSreamReader〜Step2_1〜 – PGボックス
<クラスの持っているもの>
・フィールド変数
・メソッド
※ Javaの場合は全てObjectクラスを
親に持ちます。
「親」という言葉は気にしないで下さい
「よくわからんがとにかく親がObjectクラスなんだな!」って認識でOK🌟
初めに作成したクラスにはフィールドなんて書いてないよ?と疑問に思うかもしれませんが親クラスが持っています。
ここも「よくわからんがとにかく親が持っているんだな!」って認識でOK🌟
写経して、動かして、理解して…このステップを踏む事で使いこなすまでの時間が短くなります。(多分…)
クラス→オブジェクト指向の考え方は
時間かけてゆっくり理解してください。
変に理解すると、プログラムがつまらなくなってしまうかも?
というわけで、こっからが本題になります。
まず、既に提供されている
クラスを使うとこから始めます。
→java.*パッケージのクラスです。
具体的には、java.lang.*(java.langから下のクラス全部の意味)や、java.util.*など、有名というかよく使うクラスから見ていきます。そして、コンソール出力と入力→標準入力、出力は色々と遊べるのでここから見ていこうと思います。
まずは標準入力を受けてそれをコンソールに出力する
プログラムをみてみましょう。
実はこのプログラムはバグがあって
5文字までしか入力が受け付けられません。
緑色が入力した文字です。
1〜6まで入力したのに
コンソールには5までしか表示されません。
これは、上のプログラムでbyte[] moji = new byte[5];
と配列の数を固定しているためです。
なので、入力した分だけの配列を用意しないといけません。
でも、入力した後に配列長を決定することはできないので。。。
じゃーどーするか?→InputSreamReaderを使用します。
Javaでは入力を受け取る処理が実装されていて自分で作らなくても
扱うことができます。標準入力の読み込みを行うためのクラス
それが「InputSreamReaderクラス」と「BufferedReaderクラス」です。
本当は、それ以外にも使用できますが。。。
ここではサンプルということで。。。
こんな感じで使用します。
java.ioパッケージはファイルの読み込みや出力も扱えます。
興味があれあばこちらをどうぞ
でわでわ。。。
標準入力について補足
https://zenryokuservice.com/wp/2018/08/13/java-doc読解-〜system-in〜/
ミニゲームを作ってみた
https://zenryokuservice.com/wp/2018/05/20/java-basic-ミニゲーム作成-〜コンソールゲーム〜/
<問題1>
標準入力を受け取り、コンソールに出力する
プログラムを作成してください。
<問題2>
作成したクラスの構成を考えてイメージ
できれば「絵」にしてください。
【ヒント】
全てのクラスは「Objectクラス」を継承しています。
なので、
「Objectクラス」←「作成したクラス」となります。
そして作成したクラスにはフィールド変数がありますか?
メソッドは何がありますか?
というのを整理してみてください。
Java Basic try catch文 〜Step1_3_3〜
前回は、while文についてやりました。
今回はtry catch文についてやります
まず、try catch文ってなに?
って話ですが…一言で言うと
エラーハンドリング用の書き方です。
じゃ、エラーハンドリングって?
それは「このケースはエラーにしよう」
と決めた時、想定しない値が入った時
など色々ありますが、下に例を示します
(例)
ゲームを起動する時にインターネットに繋がらない時、この時はゲームを起動する事は出来ないのでエラーですよとユーザーに伝えてあげる必要があります。
プログラム的には…
ゲーム起動時にインターネットへアクセスを試みるがアクセスできない場合
この時に JavaはExceptionクラスもしくはErrorクラスを「投げて」来ます。
この「投げる」というのは後でやります
「throw」文の書き方から日本語ではこの様な呼び方になっています。
なので
try {
//Excetionが投げられる可能性のある
//処理
} catch (Exception e) {
//エラーの時の処理(ハンドル)
}
の様に書きます。
上の例では「Exceptionクラス」をキャッチしています。
このクラスは、日本語では「例外クラス」と呼ばれ
想定外の事が起こった時に使用します。
詳細に関しては以下のページを参照してください。
Java Basic try catch文 〜Step1_3_3〜 – PGボックス
具体的には標準入力や外部のネットワークに接続する時
DBへアクセスする時など色々ありますが
「想定外の事象が起こり得る時」にこのクラスを使用します。
実際にはコードを描いてみるとわかりますが
例えば
標準入力を行う時に(起動した後にコンソールから入力)
実装する時に下のような書き方をしたとします。
byte[] b = new byte[5];
System.in.read(b);
System.out.println("入力したのは[" + new String(b) + "]ですね");
この時に赤字の部分では、標準入力からの入力を受けるとき
想定外の事象が起こり得ます。
それは、JavaAPIですでに実装されていて
「IOException」というクラスが投げられるように
処理が記載されています。
詳細は下のページに記載してます。
Java Basic try catch文 〜Step1_3_3〜 – PGボックス
細かい話は詳細部分で記載いたします。
<問題1>
上の例を参考にして、標準入力からの入力を
コンソールに出力するプログラムを作成してください。
<問題2>
標準入力からの例外(Exception)と入力の値により
投げられる例外を別々に定義して
それぞれの例外が投げられた時に別の文言を
コンソールに出力するプログラムを作成してください。
例:
System.in.reaf(inputByte);
String input = new String(inputByte);
// 入力の判定を行いエラー時は
throw new Exception("入力違反です");
でわでわ
Java Basic while 文 〜Step1_3_2〜
前回はfor文をやりました。
今回は、兄弟分のwhile文をやります。
書き方は以下の様に書きます。
while (ループする条件) {
// 処理
}
例1 無限ループしますがiが3になったら
ループを抜けます。
int i = 0;
while (true) {
if (i ==3) {
System.out.println(“The End”);
// ループを抜ける処理
break;
}
i++;
}
例2 例1同じ処理
int i = 0;
while (i <=3) {
if (i ==3) {
System.out.println(“The End”);
break;
}
i++;
}
例3 これも同じ
int i = 0;
do {
if (i ==3) {
System.out.println(“The End”);
}
i++;
} while(i <= 3);
以上の様に書きます。
詳細は、このページに記載します。
例1と2は上にループの条件を書きます
例3は条件を下に書きます
時と場合によって使いやすい方を使えば良いと思います。
が、大半は上に条件を書く方でやっちゃいますね(笑)
詳細は下のページにあります。
Java Basic While文 〜 Step1_3_2〜 – PGボックス
ゲームやサーバーの様に待機状態を作るときに
例1の様な書き方を使います。
あくまでやり方の1つです。タイミングを見て
サーバーの通信処理部分の実装をやろうと
思いますが、その時に上記の「while(true)」
の無限ループを使用します。
サンプルの実装はここからダウンロードできます。
ここまでやったらある程度動くものが作れると思います
でわでわ
<問題1>
while文を使って
int型の配列を初期化して5回ループして
計算式を表示した上で答えを表示して
ください。
例
—————————
1+2+3+4+5は
15です
—————————-
<問題2>
while文を使って
String型の配列を初期化して
配列の中身を全て、ループ文を使い
表示して下さい。→ヒントなし
Java Basic for文 〜Step1_3_1〜
前回は、Boolean型とif文に関してやりました。
今回は
毎度お馴染みループ文に関してやります
詳細はこちらに記載してあります。
そして、難敵→配列が出てきます。
charの配列は → char hako;
intは → int hako;
の様に宣言します。
兎にも角にもまずは(for文の)写経という事で
今回は、自分でクラスを作って下さい
public static void main(String args) {
char moji = { ‘m’, ‘o’, ‘j’, ‘i’};
for (int i = 0; i <= 3; i++) {
// println と違います
System.out.print(moji[i]);
}
}
上記の様なメインメソッドがあり
「for」で始まっている部分がループするところです。
詳細は下のページに記載します、
サンプルコードもダウンロードできます。
Java Basic for文 〜Step1_3_1〜 – PGボックス
上記の書き方は基本的な書き方です。
応用という訳ではないですがこんなのも
String[] hako = {“ひらけ”, "ゴマ"};
for(String nakami : hako) {
System.out.print(nakami);
}
拡張for文というやつです。
他にもループの仕方はありますが今回は
これでおしまいです。
でわでわ…
<問題1>
int型の配列を初期化して5回ループして
計算式を表示した上で答えを表示して
ください。
例
—————————
1+2+3+4+5は
15です
—————————-
<問題2>
String型の配列を初期化して
配列の中身を全て、ループ文を使い
表示して下さい。→ヒントなし
Java LWJGL ゲーム作成 〜ゲームの基本処理フロー〜
前回は、LWJGLの開発環境構築を行いました。
とりあえず(中身の解析は全然できませんでしたが)
「ゲームはプログラム的にどのように動いているの?」
と思う方もいると思います。
自分は下のチュートリアルをやって「ああ、そー?」
という感じでした(笑)。
確かに基本的な処理フローがあってしかるべきです。
というわけでその「基本処理フロー」について記載します。
ゲームの処理フロー
1. ゲームアプリケーションの起動
2. 初期化処理(ゲームに必要なリソース読み込み)
3. ゲームのプレイ(ゲームループ)
4. 終了処理
上記のような処理が基本的なフローです。
チュートリアルでは、ゲームループ(GameLoop)について
記載してありました、その実装をアップロードしました。
処理としては、上記の通りですが「ゲームループ」の部分
が重要、というか一番のポイントになります。
ゲームコントローラーの入力→データ更新
→画面の更新と処理を繰り返しゲームを成立させます。
詳細に関しては、以下のページを参照ください
Java Game作成 〜ゲームの処理フロー〜 – PGボックス
上記のページでは、まだ中身を実装していないので
TODOコメントとFIXMEコメントを記載しております。
はっきり言って、ほぼコードです。
そして、処理の中身を実装していないので
→メソッドの呼び出し順くらいしか書くこと
がありませんでした(笑)
この処理フローの中身を実装することで「ゲーム」が
作れます。
まずは概要を掴むということで。。。
でわでわ今回はこんなもんで
関連ページ一覧
LWJGL
- Chapter1[外枠の表示のみ]
- Chapter2-1〜クラスの構成〜
- Chapter2-2〜インターフェースの使い方と詳細〜
- Chapter2-3〜GameEngineクラス(サンプルクラス)〜/li>
- Chapter2-4〜Windowクラス(サンプルクラス)〜
- Chapter3〜描画処理を読む〜
- Chapter4〜シェーダについて〜
- Chapter5-1〜レンダリングについて〜
- Chapter5-2〜レンダリング詳細〜
- Chapter6〜Projection(投影)〜
- Chapter7-1〜Cubeを作る〜
- Chapter7-2〜Texture〜
- Java 3DGame LWJGL Retry Lv1 〜動かして理解する〜
- Java 3DGame LWJGL Retry Lv2 〜動かして理解する2〜
- Java 3DGame LWJGL Retry Lv3 Texture〜動かして理解する3〜「負け越し」
- Java 3DGame LWJGL Retry Lv4 デバック〜動かして理解する4〜「黒星」
- Java 3DGame LWJGL Retry Lv5 遊んでみる〜動かして理解する5〜「引分け」
- Java 3DGame LWJGL Retry Lv6 遊んでみる2〜動かして理解する6〜「白星」
- ava 3DGame LWJGL Retry Lv7 遊んでみる3〜全部テクスチャにする〜
Eclipse セットアップ
- Java Install Eclipse〜開発ツールのインストール〜
- TensorFlow C++環境〜EclipseにCDTをインストール〜
- Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Eclipse SceneBuilderを追加する
- JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~