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

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

プチコン 任天堂3ds 〜スマイルベーシック〜

イントロダクション

任天堂3dsでのゲーム作成ができる、プログラム言語です。シンプルで奥が深いです。プログラム全般に言えることですが…

スマイルベーシックとは

下のサイトに書いてあります

http://smilebasic.com/e-manual/

とりあえず、ds でプログラムが書けるのですが、今度スイッチでもできる様になるらしいです。

2019/5/23 発売されました。

プログラミング BASIC Switch | プチコン4 SmileBASIC

ソース

任天堂3dsリポジトリの様なものはないか?と探したところ…公開キーを使ってダウンロード、アップロードできる様です。詳細は以下のページに掲載してます。

http://zenryokuservice.com/wp/2018/07/16/プチコン-作品の投稿/

 

因みに自分が作ったものは公開キー「RRTEE23V」で、FIRST_PRGというプロジェクトです。

自分勝手な妄想

プチコンはきっかけで良いのですがプログラムを作る工程の中で子供達や若い人達に以下の様な事を学んで欲しいなと思っています。

追伸:システム屋は関係ありません…

 

1.絶対に無理だー!とか思ってもへこたれない根性。システム屋は根性がないと勤まりません(笑)

 

2.問題発生した時にどう対処するのか?を判断する、判断力

 

3.知らない物事を鵜呑みにせず、自分の中でちゃんと「理解」して良い事と悪い事を判別する知恵。

 

4..仲間に考えを、伝える為の国語力と仲間を大切にする事。人間1人では大した事は何も出来ません。1人でやろうとするとロクな目に会いません。

と…脱線しましたが

レッツ!プチコン

結構すごいです。インターネット接続〜赤外線通信、ジャイロセンサー(平行センサ)、歩数カウントなどDSに搭載されている機能は使用できるのでアイデアで面白いものが出来そうです。

 

でわでわ。。。

Java ゲーム作成 〜DiscordでJavaコード〜

イントロダクション

最近知ったのですが、Discordなるものが世に出回り、ゲーム作成に必要な機能をいい感じで提供してくれるアプリがあるということで、JavaでDiscordできないか試してみました。

Discord

 SNSの様にユーザー同士のやりとり(チャットや音声通信)ができるアプリです。スマホ版のものと、ブラウザ版のものがあり両方併用できます。

初心者のためのDiscordガイド

今回は、Javaを使用してプログラムでログイン〜ユーザーの入力に対するレスポンスを返す。ハローワールド的な実装をやりました。

このプログラムの用途

このプログラムは、ユーザーの入力→プログラムのレスポンスというシンプルなやりとりを実装しています。

つまり、これを改造すれば「自分用の入力」=「コマンド」に対する処理を実装できます。そしてインターフェースクラスを使用した、ポリモーフィズムの実装を行いましたので自分好きなコマンドを好きなだけ作る事が可能です。

PGボックス〜ゲームとプロジェクトとプログラミング基礎〜

 

結果は以下に。。。「ping」と入力すると「pong」と返却するアプリです。

f:id:Takunoji:20180715162855p:plain

実行手順

1.開発環境のセットアップ

Java Discord セットアップ〜Hello Discord〜 – PGボックス


2.Discordのページに登録する

discordapp.com


3.Javaでプログラムを作成する

Java Discord ピンポン〜Discordプログラム〜 – PGボックス

 

4.実行したらDiscordサーバー上でアプリケーションが動いているのでコマンドを入力してみてください。下の様にコマンドに対応した返答が表示されるはずです。

 f:id:Takunoji:20180715162855p:plain

感想

Discordを使用してコマンド入力→レスポンスという流れを簡単に実装できるのでWeb経由により多人数で、やれるゲーム(テキストベース)は簡単?に作れそうだ。

ストーリや展開など難しい部分は腐るほどあるので、イチからゲームを作成するという観点で比較的簡単に作成することができると思います。

今後

ある程度の環境を作成したり、サードパーティを使用したり(TensorFlowとかOpenCvとか)もできそうなので試してみたいと思います。OpenCvはjarファイルをビルドパスに繋げるだけで使用できたような記憶があるのですが。。。確証はありません。。。

でわでわ。。。

 

関連ページ一覧

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

IntelliJ IDEA

  1. IntelliJ IDEA 環境構築 〜インストールと起動〜
  2. IntelliJ IDEA GitGitリポジトリからクローン〜
  3. IntelliJ IDEA 使い方〜Git接続 Java起動 etc
  4. IntelliJ IDEA Jarファイルを作る
  5. IntelliJ IDEA 使い方〜Maven Projectの作成〜
  6. IntelliJ IDEA 使い方〜Mavenでライブラリを追加する〜
  7. IntelliJ IDEA 使い方〜Javaのコンパイルレベル設定〜
  8. IntelliJ IDEA Gradleセットアップ〜コマンド入力部の表示〜
  9. IntelliJ IDEA Discord Botを作る〜Gradle環境のセットアップ〜

Eclipse

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. Eclipse Meven 開発手順〜プロジェクトの作成〜
  3. Java OpenCV 環境セットアップ(on Mac)
  4. Eclipse SceneBuilderを追加する
  5. JavaFX SceneBuilder EclipseSceneBuilder連携~

 

 

TensorFlow環境構築 〜C++API, JavaAPI〜

TensorFlow for Java

これで開発するための環境構築です。

インストールするのはMavenとTensorFlowです。詳細は下のリンク先に記載しています。

ここでは、用途とか自分の意図などを記載したいと思います。

なぜ?TensorFlow?

皆さんご存知の人口知能です。でも本当は機械学習処理のフレームワークがこれです。

そして、これができたおかげで、統計学の考え方で、写真や音声など、昔は人間でないと区別できなかった情報を区別できるようになりました。

音声データの事はよくわからないので記載しませんが、画像に関しては基本的な事だけわかるので記載します。

画像データ?

これは、内訳(生のデータ)は数字の配列になります。50x50ピクセルの画像であれば、数値の2次元配列が50x50で並んでいるデータです。

これを、統計学を使って「この並びはXXの可能性が.....」という計算をするのですが機械学習により「....」の部分をより100%に近づける事が出来ます。

早い話が、画像や、音声の識別が出来るという事です。

開発環境セットアップ

PGボックス〜ゲームとプロジェクトとプログラミング基礎〜

Mavenインストール方法

PGボックス〜ゲームとプロジェクトとプログラミング基礎〜

TensorFlowクラッシュコース

ドキュメントがC++, Pythonの方に集約されているので JavaでやるのはC++, Pythonである程度理解してからやるようだった。

developers.google.com

 

Java Tensorflow 〜セットアップ〜

イントロダクション

前回まで、テキストRPGの作成に取り組み、コマンドで色々な処理を追加できる様になりました。今度は、ウェブクローリングをやろうと思いますが、文書の解析には機械学習を使う方が便利だと判断したのでTensorflowを勉強します。

ウェブクローリング

ネットサーフィンをプログラムでやる事だと思って良いと思います。

文書解析

ネットサーフィンをして、欲しい情報をまとめてレポートするプログラムを作る目的でウェブクローリングをやるつもりなので、以下の手順でウェブクローリングをやるつもりです。

  1. プログラムにHTMLを読ませる
  2. 入力したキーワードの説明文を集める
  3. サンプルなどがあればそのリンクも
  4. 説明文書を学習済み、機械学習APで要約する
  5. MD, HTMLなどにファイル出力

 

tensor flow のセットアップ

今回はJavaでのtensor flow をセットアップします。チュートリアルによるとMavenでインストールしてお終い。という事ですが、とりあえずやってみます。

 

IntelliJ IDEAでやる

 実際にやってみました。

結果は下のページに記載しました。

 http://zenryokuservice.com/wp/2018/07/05/java-tensorflow-機械学習を始める〜/

 

ダウンロードに時間がかかったけどMavenだからXMLにサイトにあるXMLタグを追加するだけでセットアップできました。

 

実際にMavenのタグをどの様に追加すればいいか分からない人向けにXMLタグの追加方法を記載しました。※上のリンクです。

 

Exlipseの場合

IntelliJの場合は簡単だけどEclipseの場合はpomを右クリックしてMaven instalを実行してやる必要があります。

 

ちなみにJavaでやろうとしたけれどドキュメントの内容が理解できず…

pythonでやってみました

PGボックス〜ゲームとプロジェクトとプログラミング基礎〜

でわでわ…

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 作成メモ

躓いた部分

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

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

 

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

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

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

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