Takunojiのプログラミング・プレイグラウンド(遊び場)

Javaプログラミングを基本にして、ゲーム作成に必要なことの調査結果、やったら面白そうなことなどを記載します。プログラミングのススメ的なことも記載します。プログラミングで楽しく遊ぶために色々と記載して行きます。

Java Basic オブジェクト指向〜ポリモーフィズム〜

イントロダクション

前回までに作成した、プロパティファイルを参照して…の部分についてちょっと細かく記載します。

つまりは、前回までの補足になります。

http://zenryokuservice.com/wp/2018/06/30/java-basic-gui作成〜まとめ〜/

 

 今回のキモ

プロパティファイルとプログラムの関係です。タイトルの通り、オブジェクト指向の基本的な使い方です。ポリモーフィズムなんて呼ばれています。

この部分を語りたいと思います。

 

ポリモーフィズムとは

はっきり言って「インターフェースの使い方」です。応用範囲が広く最近ではアノテーション「@」なんてのもあります。アノテーションもインターフェースです。後々に記載しようと思います。

まずは基本です。

インターフェース=ポリモーフィズムと言いましたが、まずポリモーフィズムってなによ?と思うでしょう。

ポリモーフィズムは「作成したプログラムを変更しなくても拡張できる仕組み」の事です。

 

インターフェースとの繋がりは?

インターフェースは、カテゴリ別にまとめるためのクラスです。java .utij.Listが分かりやすいと思います。Listを実装したクラスはArrayList、LinkedListなどがあります。

List (Java Platform SE 8)

これらのクラスは必ずadd、getなどのメソッドを持っています。なぜならばインターフェースを実装すると必ず抽象メソッドをオーバーライドしなくてはいけないからです。この仕組みを使ってプログラムを変更しなくても拡張出来るように作ります。詳細はこちらを…

http://zenryokuservice.com/wp/2018/06/01/java-basic-インターフェース・抽象クラスの作り方/

 

どうやるの? 

今回作成した、処理をサンプルに記載します。

java で作った、画面にはテキストエリアが表示されています。そこに入力があった時に動く処理、イベントハンドラを実装しています。

そして、入力をコマンドとして受け取ります。ここからがポイントです。

  1. コマンドをプロパティファイルのキーと同じものにします。
  2. プロパティのキーから完全クラス名を取得します。
  3. 完全クラス名からインスタンスを生成します。
  4. そのインスタンスからメソッドを起動します。

※詳細はこちら

http://zenryokuservice.com/wp/2018/06/30/java-basic-gui作成〜今までのまとめ〜/

メソッド名が違ったら?

それはありません、なぜならここでインターフェースを使うからです。ちなみに名前が違うとオーバーライドではなくなるので、ビルドエラーが出ます。

 

仕組みは以下になります

上のリンクに詳細を記載しましたが

概要として…インターフェースクラス

  1. CommndIFには抽象メソッドexecuteを定義してます。なのでこれを実装する追加クラスは必ずexecuteメソッドを持っている事になります。
  2. コマンドの実行はcommandIf.execute();で呼び出す様に作っているので、次の手順で追加クラスをいくらでも作れます。(メモリとハードディスクに依存)
  3. CommandIFを実装(implements)したクラスを作成、クラス名は任意。
  4. プロパティファイルに「コマンド名=完全クラス名」を記述詳細はこちらです。http://zenryokuservice.com/wp/2018/06/30/java-network-〜プロパティファイルを読む〜/

 

まとめ

これはポリモーフィズムの触りの部分になります。この技術は比較的古いやり方になりますが、基本です。

今や常識となりつつあるDependency Injectionとか、Javaのリモート呼び出し、違う端末で動いているJavaクラスを呼び出す、などはこの技術の延長にあります。リフレクションも似た様な感じだと思う…確証なし…のですが今回はここまで。

でわでわ。。。

 

Java 設計 RPG作成〜フロー整理〜

イントロダクション

テキストRPGを作成するのに以下の様な処理フローを考えています。

  1. 画面の表示(テキストのみ)
  2. コマンドの入力
  3. 処理結果の表示

このフローを繰り返してストーリーを進めて行くイメージですが。

中身としてどんなものを作るか?が決まっていません。

 

朧げなイメージ

タイトルが表示されて、開始すると

  1. ユーザーの情報を入力する様に促す文言を表示して、入力情報よりキャラクター作成を行う。
  2. 物語の冒頭部分を表示して世界観を描く

 

問題点

  • 用意している世界観の、どの部分を冒頭に持って来るか?(出来上がってません)
  • ゲームの展開方法が未定なので進め方も未定

 

じゃあどうするか?

  • ゲームの展開方法を決めないといけないがどう進めようか、わからないので…このまま、世界観をキチンと作るのが、1つ。→小説っぽく世界観作ってます。よかったらどうぞ
  • https://ncode.syosetu.com/n5180et/
  • 実装予定の機能から作り、何か良い方法を思いつくのを待つ →現状この方法です

 

理想としては…

  • なるべく現実にある伝説、英雄譚、言い伝えを引っ張りストーリー展開をしたいので、コマンドでウェブ検索的なことを実行したい。
  • 身近な占いや、パワーストーン、自然科学の情報を一覧したい。

 

結論

ゲーム展開を決定しないと始まらない。

なので、作業を2つに分けて。

  • プログラムは、クローリングの実装をやってコマンドからネット検索を実行できる様にする(GUI作成)
  • ゲームの展開方法をクリアにする
    ※現状としてはコマンド入力によるゲーム展開を考えています。

    f:id:Takunoji:20180630223047p:plain

    ※以下の手順で起動できます。
    •  1.PracticeJava1.jarとresourcesフォルダをダウンロードしてダウンロードしたフォルダにコマンドプロンプトで「java -jar PracticeJava1.jar」を叩く

     

    github.com

     

以上の様な作戦で行くとしよう。
でわでわ。。。

Java Basic GUI作成〜コマンド画面の作成〜

イントロダクション

JavaでのテキストRPGの中身を考えていてもなかなか良いアイディアが浮かばず。。。

結局は、JavaFXを使用して出来ることを増やす形をとりました。
具体的に、コマンドを入力していろんな処理を実装できるように元から作り替えました。

作ったもの

1. テキストエリアを使った偽コマンドプロンプト画面を作成

2. コマンドを入力して、コマンドの実行結果を画面に出力します。

3. 初期表示部分はまだ実装していません。

表示すると下のような感じです。

f:id:Takunoji:20180630223047p:plain

作り直したもの

zenryokuservice.com

上記のサイトにまとめてありますが、ここでは概要を記載したいと思います。

やっていることは以下の通りです。

Java Basic GUI作成〜JavaFXを使用して画面を作る〜 – PGボックス
1. JavaFXを使用して画面を作成

2. テキストエリアを画面一杯に表示

Java Basic JavaFX 〜コマンド画面を作る〜 – PGボックス
3. 入力に対するハンドル操作処理を実装

Java Basic GUI作成 〜コマンド画面 フォーカス移動しない〜 – PGボックス

4. コマンドの切り出し処理

Java Basic GUI作成〜コマンドを入力する〜 – PGボックス

5. コマンドの実行処理

Java GUI作成 〜プロパティファイルを読む〜 – PGボックス

6. プロパティファイルを取得

Java Basic GUI作成〜今までのまとめ〜 – PGボックス

7. コマンドをキーにして実行クラスを取得

8. コマンド処理クラスを実行

9. 実行結果を画面に表示する

10. コマンドの入力待ち状態を表示

11. 「exit」コマンドでアプリケーションを終了

今後の予定

コマンド実行クラスを追加していくが、クローリングの実装を行いたいと思います。

そして、テキストRPGで入力した文言からゲームの展開をしていくようなイメージです。詳細は未定。。。

現状は、入力したキーワードよりインターネット検索を行いそれをまとめた形で出力するような実装を目指しています。

何か良いアイディアはないものか。。。

 

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Git

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFXでハローワールド〜OpenCVまで

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜
 

Java Basic 〜 クラス実装サンプルその2 〜

前置き

前回は、サンプルとして「こんなやり方」
というのを記載いたしました。
つまづいて、転んで、また起きて。。。みたいな
人生もそんな感じでしょう(笑)

まぁ転んでもただは起きないのも世の常
作成したけど中身が決まっていないので本当に
サンプルですが。。。ただでは起きません。
というわけで、今度はJavaの単体画面アプリを
作ってみました。(簡単ですが。。。)

Java Basic JavaFX 〜コマンド画面を作る〜 – PGボックス

今回の記事

JavaFXというものがJDK8以降のJARには含まれています。
早い話が、新しいJavaをインストールしたらJavaFX
付いてくるよ、ということです。
ここで、言いたいのは
Javaって何か作ろうとすると規模がでかくなるんだよなぁ」
ということです。

いや正確には、Webアプリを作成するとでかくなる。。。
ということです。

だから、1人で開発しようとすると大変なことになるので
部分的にしか作れません。(根性のある人はやると思うが。。。)

そこで、見つけたのがJavaFXです。PC上で簡単に起動できます。
WindowsでもMacでも、JavaがインストールしてあればOK!
以下のようにコマンドで「java -jar JARファイル名」で起動

f:id:Takunoji:20180616214159p:plain

ちなみに、Jarファイルの作成方法は、こちら

IntelliJ IDEA Jarファイルを作る – PGボックス

 

関連ページ

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜
 

Java Basic クラス実装サンプル

イントロダクション

今まで、インターフェースだとか、クラスだとか、色々とやって来ました。

これらを組み合わせて何かを作ろうとする時、何から考えらば良いか?

ある意味、永遠のテーマですがサンプルとして自分がやっているパターンを記載したいと思います。

 

ステップ1

初めに、どんなイメージのものを作るか?妄想力を全開にして大雑把なイメージを作り上げます。

ステップ2

大雑把なイメージから、具体的にどんなアプリを作るのか?を決めます。

<例>

・ゲーム

・ツール→3dモデル・ジェネレーター

・何かの部品→計算用の部品(クラス)etc

・ボタン(アナログボタン)を押すと〜するアプリなど…

 

サンプル

今回は、テキストRPGを作ろうと思っています。※始めの部分のみ
なのでゲームの作り方を基本に置き、どの様な処理が必要なのか大雑把なフロー(流れ)を作ります。※LWJGL使用

1.初期処理→リソースの読み込みなど

2.ゲームのループ処理

3.終了処理

 
そして、簡単な画面(テキストで作成)を表示する
プロトタイプまで行かないプロトタイプを作成して見ます。
Javaで作成したので「java -jar CmdRPG.jar」とコマンドプロンプト
に入力してやると実行できます。※上記のリンクよりDL

f:id:Takunoji:20180616214159p:plain

詳細に関しては下のリンク先で説明しています。

追伸、以下の手順で画面の追加と

コマンドの追加ができます。

0.Cmd RPG.jarを参照する

 ※ビルドバスに追加

1.ViewStatusクラスを継承(extends)

2.必要なメソッドをオーバーライド

 ※ビルドエラーがなくなればOK

3.表示するテキストファイルを作成

 ※createViewStrに引数でバスを渡す

 

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

 

そして、チームを作り絵やストーリー、プログラム、マネージャーなどの作業分担が出来ると作成が楽しいと思います。

 

ちなみに自分は1人だけなので自分の出来る事をやり続けております。

つまり、ストーリーの作成とプログラムです。

とりあえず、形あるものを残す事に注力してやってます。

仲間は後から見つかるだろうと思いのんびり構えてます(笑)

 

<関連ページ>

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜

 

 

テキストRPG 作成メモ

躓いた部分

始めのストーリーを描写するのに

文字でストーリーを表示するだけで良いのか?

 

一節毎に区切りストーリー表示

ボードゲームを参考にする

イメージ、ビジュアルはアスキーアート

チュートリアルを作成する

Java Basic ミニゲーム作成 〜画面の状態〜

イントロダクション

前回、タイトル画面の作成、表示をやりました。テキストのみを使ったアプリなので画面と言っても文字のみです。

ステータス管理

ステータスといっても、画面の話です。

用途としては、ステータスによって表示するテンプレートを切り替えます。

今回は、画面の状態(ステータス)の管理Objectの作成と各画面での操作切り替えを行うための処理フローの作成をやります。

 

「必要な技術」

インターフェースの作り方

抽象クラスの作り方 // 上と同じページです

Mapの使い方

 

 

初めに、タイトル画面の表示を行い

「開始」「コンテニュー」をそれぞれ選択
できる様にします。

なので、タイトル画面の管理Object

はコマンドの入力を受けて
対象のコマンドを実行する形を
作成する必要があります。
詳細はコードを見ていただきたく。。。

PracticeJava1/Step3_3.java at master · ZenryokuService/PracticeJava1 · GitHub

今までやってきたものを繋げてやってます。

そして、実装内容に関して以下にまとめました。

Java Basic ミニゲーム作成 〜Step3_2〜 – PGボックス

Java Basic Map インターフェース

ここ最近、テキストRPGの作成を始めました。

 

必要になる技術としては以下の通り

標準入出力

ファイル読み込み

while文の書き方

クラスの書き方

 

始めのタイトル表示までです。

 

ここから、オブジェクト指向な部分に入って行きます。

 

今回は、マップの使い方について

Mapはキーと値をセットにして保存〜取得を行うためのインターフェースです

実体(クラス)はHashMapを使用しました

 

インターフェースは以下の様に作ります

public interface Hoge {

     public abstract void foo();

}

なので、実体がありません。

じゃ、実体はなに?

public class Foo implements Hoge{

    public void foo() {

         System.out.print(“Hoge”);

    }

}

上の様にインターフェースをimplementsしたクラスが実体になります。

abstractがついたメソッドの事を抽象メソッドと呼びimplementsしたクラスでは必ず処理を書かないとなりません。

エラーが発生します。

 

詳細な内容はこちらをご覧ください

 

実体クラスをインターフェースに代入しています。

 

でわでわ

<問題> 
Mapインターフェースを使用して登録(put)した
データ(文字列)を1行でコンソールに出力するプログラムを作成してください。

ヒント:ラムダ式を使用するといけます。

 

<関連ページ>

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜
 

Java Basic ミニゲーム作〜タイトル表示〜

前回、テキストRPGの作成に入りました。大まかな処理をメソッド単位で区切り入力を受け付けて、「bye」と入力したらアプリが終了するものでした。

 

今回は、リソース→テキストファイルを読み込み「タイトル」を表示します。

外部ファイルを読み込む理由は

プログラムの修正をせずに出力するものを変更できます。

つまり、プログラムを書く人と文字でのデザインをする人と分業することが出来ます。

 

この仕組みは、単純にタイトルを出力するときにファイルを読み込み出力するだけなので難しくありません。

ファイルの読み込み方法はこちらです

 http://zenryokuservice.com/wp/2018/05/27/javadoc-読解-〜-filesクラス-〜/

 

 

ゲーム作成に関してはこちら

http://zenryokuservice.com/wp/2018/05/25/java-basic-ミニゲーム作成-〜step3_1〜/

 

 

Java テキストRPG作成 〜タイトルを表示する〜

前回、RPGの作成をどの様にやるかを(仕様を)記載しました。
そして、実装してみましたが。。。

画面のステータスをどの様に管理するか?が課題になっております。

とりあえず、現状のソースをアップします。

github.com

メインメソッド〜クラス生成と少し長いクラスになってしまいました。
メインメソッドで使用するメソッドは「static」がついてます。

RpgMainクラスのコンストラクターからメンバメソッドには「static」が
ついてません。

メインメソッドからstatic メソッド
init() => gameLoop() => terminated()を呼んでます。

メインメソッド内でゲームの概要部分の処理を行なっています。

今度は、メンバメソッドでゲームの表示、入力などの処理を実装しています。

現在、initでタイトル用のテキストファイルを読み「title.txt」
コンソールにタイトルを表示しています。

f:id:Takunoji:20180527215927p:plain

タイトルの表示までできたのですが、まぁ画面ステータスを
どの様に管理するか考え中です。

うーむどうしようか?

ちなみにファイルの読み込みは以下のページを参照してください。

JavaDoc 読解 〜 Filesクラス 〜 – PGボックス

 

<関連ページ>

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜