Java Basic インターフェース・抽象クラスの作り方

やってみた!CommandIFを作る

余計な音が入っています。

インターフェース・クラスの作成方法

/** インターフェースの作成 */
public interface A {
   // 抽象メソッドを定義します。
   public abstract void test01();
   // 上と同様
   public void test02();
   // 引数など書き方は普通のメソッドと一緒
   public String test03(int i);
}

抽象クラスの作成方法

/** 抽象クラスの作成 */
public abstract class A {
    // 抽象メソッドはインターフェースと同じ
    public abstract void test01();
    // 通常のメソッドの実装もOK
    public void test02() {
       System.out.println("Hello");
    }
    public A() {
       // コンストラクタ
    }
}

上の抽象クラスは、親クラスとして定義して、こクラスで似た様な処理
なんども同じ処理を呼び出したいときに使用します。

/** 子クラスサンプル */
public B extends A {
    // 親クラスの抽象メソッドをオーバーライドする必要がある
        @Override
    public void test01() {
                // 親クラスのメソッドを呼び出す
        test02();
    }
    // そのほかのメソッドなど
}

上記の様に親子関係を作成し、「A家」でtest01()の伝統を引き継いでいく・・・
みたいな感じです。
GOFのデザインパターン」などを見ると参考になると思います。

ポリモーフィズム

CommandIF(インタフェース)を使用したポリモーフィズムの実行動画があります。

関連ページ一覧

<Java Basic>

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜「四則計算」
  3. Java Basic Level3 〜About String class〜「Stringクラス」
  4. Java Basic Level 4〜Boolean〜「TrueとFalse」
  5. Java Basic Level 5〜If Statement〜「IF文の書き方など」
  6. Java Basic Summary from Level1 to 5「Level1〜5までの複合技」
  7. Java Basic Level 6 〜Traning of If statement〜「IF文の練習」
  8. Java Basic Level8 〜How to use for statement〜「For文の使い方」
  9. Java Basic Level 8.5 〜Array〜「配列について」
  10. Java Basic Level 10 〜While statement 〜「While文について」
  11. Java Basic Swing〜オブジェクト指向〜「オブジェクト指向の考え方1」
  12. Java Basic Swing Level 2〜オブジェクト指向2〜「同じく、考え方2」

<クラスの種類>

http://zenryokuservice.com/wp/2018/05/14/java-basic-%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A8%E3%81%AF-inputsreamreader%E3%80%9Cstep2_1%E3%80%9C/

<インターフェース>

http://zenryokuservice.com/wp/2018/06/01/java-basic-%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%83%BB%E6%8A%BD%E8%B1%A1%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9/

<実装サンプル>

http://zenryokuservice.com/wp/2018/06/16/java-bassic-%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91-%E3%80%9C%E3%82%B5%E3%83%B3%E3%83%97%E3%83%ABrpgmain%E3%82%AF%E3%83%A9%E3%82%B9%E3%80%9C/

http://zenryokuservice.com/wp/2018/05/20/java-basic-%E3%83%9F%E3%83%8B%E3%82%B2%E3%83%BC%E3%83%A0%E4%BD%9C%E6%88%90-%E3%80%9C%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%82%B2%E3%83%BC%E3%83%A0%E3%80%9C/

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

イントロダクション

コマンドプロンプト(Windows), ターミナル(Mac, Linux)で文字ベースでのゲームを作成しようと試みました。結局ゲームの内容までは届きませんでしたが、入力〜出力までの一連の流れを実装しました。

つまり、ゲームのイメージがあればこのまま完成まで行けるのでは?

別物ですが、こんなものも作ってみました。

Console app sanple....

Introduction

I will create a text based game on terminal or command prompt. But I implemented only from Input to output.

I mean if you have idea then you can implement game?

 

実際に作ったもの

作成したJarファイルはこちらです。
コマンドプロンプトから起動してください。
Macの場合はターミナルです。
ダウンロードしたディレクトリに移動

cd ダウンロードしたディレクトリ
java -jar ./CmdRpg.jar
で起動することができます。
GitからプロジェクトをそのままPullしてきてもおっけ
プロジェクトのPull方法を参照してください。(LWJGLの場合です)

ゲームの処理概要としては以下の様になります。ソースはこちら

/**
 * ゲームを起動する </br>
 * 標準入力の受付、「bye」コマンドでAPを終了する</br>
 *
 * @param args プログラム引数
 */
public static void main(String[] args) {
   // 初期化処理
   init();
   try {
      // ゲーム起動(GameLoop開始)
     gameLoop();
   } catch(IOException ie) {
      ie.printStackTrace();
   }
   // リソースの解放
   terminated();
}

このクラスは、どんどん拡張(追加で実装)できる様に
筆者なりに考えて作成いたしました。
これを土台にするもしないも自由にやってもらって結構です。

一応、記載しておきます。余計であれば読み飛ばしてください。
【考え方】
1.起動するメインメソッド→ゲームを起動する部分だけを記述したい。

1.Execute main method → I would like to write olnly game execution.

  1. メインメソッドから呼び出したい(処理の範囲を切り分け)
    処理を「staticメソッド」で定義。
    →処理を「初期化」「ゲームループ」「終了(リソース解放)」と
    カテゴリ分けをする。

Static method is called by main method → separates implementation as “init”, “game loop”, “terminated”.

3.静的メソッド(メインメソッドを含む)とメンバメソッドを切り分ける→
staticが付いているものとそうでないものを使用方法のサンプルとして記述

Separates static and member method→as sample for use these.

staticはメインメソッドから直接呼べる

メンバメソッドはインスタンスを作ってからでないと呼べない。

 

フィールドとか、クラスなど、実際にはどの様に使うの?
って部分をソースの方に記載しています。
※わかりずらかったらゴメンなさい

private static void gameLoop() throws IOException{
   // mainメソッドと同様にクラスをnewする必要あり
   game = new RpgMain(); // コンストラクタで入力部品を生成
   /*
    *  <ゲームループ>
    *  1.入力
    *  2.データ更新、
    *  3.レンダリング(今回はコマンドなので文字出力)   
    *  4.「bye」コマンドでゲームを終了する
    */
    while(true) {
        String command = game.listenInput();
        // command変数がnullになる可能性があるため定数.equals()の形にする
        if(TERMINATE_GAME.equals(command)) {
             break;
        }
    System.out.println("コマンド入力値: " + command);
    }
}

ゲームを起動して、入力→「コマンド:入力値」を表示する
というシンプルなゲーム?です。
「bye」と入力するとゲーム終了となります。
ここで、コンストラクタを開設いたします。
コンストラクタ→newした時に起動する処理を定義する
メソッドの時と同じ様に引数を与えることができる。

詳細はおいおい理解していきましょう。

今回使用しているのは、
フィールド→staticのものとメンバフィールドがあります。
メソッド   →フィールドに同じ、newしてから使用するのが「メンバ」
メインメソッドから呼ばれているのがstaticです。

ソースに細かいコメントなどをつけております。
参考になればと思います。

カスタムするなら

上記のソース赤字の部分を修正してどの様に入力を受けて何を表示するか?

を自分で考えて作成するのも1つの方法です。

ちなみに、簡単なコンソールゲームを作って見ました。
余計な音が入っています。




プラスαの一覧

JavaDoc

    1. Java Doc 読解〜System.out〜
    2. JavaDoc 読解 〜 Filesクラス 〜
    3. Java Doc読解 BufferedReader
    4. Java Doc 読解〜BufferedWriter〜
    5. Java Doc 読解 List 〜JavaDocList その1〜
    6.  Java Doc 読解 Map

Java Discord

  1. IntelliJ IDEA Discord Botを作る〜Gradle環境のセットアップ〜
  2. Java Discord セットアップ〜Hello Discord〜
  3.  Java Discord ピンポン〜Discordプログラム〜
  4. Java Discord Listener実装〜コマンドを好きなだけ追加しよう〜

JavaFX

  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〜

JUnit関連

  1. Java Basic JUnit 〜テストスイートの作り方〜

Git

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