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

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

Java Basic retry〜基本の復習〜

イントロダクション

以前、初めてJavaを学習する人向けに記事を書いたのですが、正直のところ不親切→分かりづらい文だったのでやり直します。

 

はじめのプログラム

どのプログラム言語でもハローワールドを表示するプログラムを始めに作ります。これは、環境構築の後などにプログラムが動くか?の確認、起動確認に使用します。

プログラムを初めて10年以上経ちますが、今でも「Hello World」は使用しています。

最近はPHPでもやりました(笑)

早速作りましょう

 

これから、Javaを学習するのにどのように学習を進めていくのか?簡単なロードマップを示してあります。そして、世の中、英語も必要な時代なので、英語と日本語で記載しました。

ハローワールドプログラムの詳細は下のページに記載しました。

  1. Java Basic Level 1 〜Hello Java〜

 

そして、プログラムの構造をなんとなくで良いので頭にイメージして下さい。

Javaは全部クラスで動きます

 

でわでわ、Let‘s enjoy java! see you next time. Have a good day!!

 

 

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜
 

プチコン 動かしてみた

イントロダクション

任天堂3ds のゲーム、プチコン3号での実装をやってみました。

Smile Basic

プチコンは上記のような名前のプログラムで動きます。

コードもシンプルで、とても分かりやすいです。そのかわり関数を覚える必要が有ります。ドキュメント片手にやれば問題有りません。

命令表 – SmileBasic

 

実装など詳細はこちら

http://zenryokuservice.com/wp/2018/07/19/プチコン3号-はじめの一歩〜3dsでのゲーム作成/

感想

やってみて、基本的な事がとても大切だと再認識させられました。一旦人のコードを写経してみると理解するスピードが違います。

そして、コードがシンプルな分「設計」に重きが置かれます。

「何を作る?」というのが最大の問題になると思います。大雑把に以下の様なポイントに対する創意工夫を凝らしている作品、製品が多いと思います。

  1. 文学、漫画、映画などストーリー描画に重きが置かれる
  2. 絵画、オブジェ、建築、衣服、小物・雑貨など見た目に重きが置かれる
  3. システム、工具、ツールの類など機能に重きが置かれる

ポイントをまとめると以下のものになると思います。

  1. ストーリー、物語
  2. 見た目
  3. 機能性
  4. 人がハマってしまう要素

早い話が「魅力的で面白いもの」という認識です。

なんか、永遠のテーマだよなぁ…

でわでわ。。。

java discord 〜JavaでBOT作成〜

イントロダクション

最近discord というアプリを見つけチャットや音声データのやり取りにも使える事を知りました。jsやpythonでのアプリ作成が出来、それをBOTと呼びます。

チャットで入力した文字に対応してレスポンスを返す感じのアプリ作成を行いました。

開発環境と実装

開発にはIntelliJ IDEAを使用しました。

詳細は以下です。

http://zenryokuservice.com/wp/2018/07/14/java-discord-セットアップ〜hello-discord〜/

拡張方法

サンプルコードを起動したら、自分で考えて実装したいと思うと思います。

処理の追加方法は以下に記載しました。

http://zenryokuservice.com/wp/2018/07/15/java-discord-ピンポン〜discordプログラム〜/

感想

プログラムをデプロイするわけではないので、自分の端末でアプリを起動しておく必要があるのですが、ちょっと動かすだけなら十分かな?と思います。

 

 

関連ページ一覧

  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連携~

プチコン 任天堂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〜