Java プロコンゲーム 〜実装内容履歴〜

プログラミングコンテスト

以前から作成している、プログラミングコンテスト用のゲームです。

早い話が、プログラミングで実行するキャラクター同士を対戦させて勝敗を決するゲームで、プログラミングの技術力を競うものを作成中です。

現状(2020-02-14)の動き

上の動画のようにボタン押下処理を追加しました。
ここから、Startボタンの押下時に参加者のデータを取り込み、Map画面を表示する処理を実装します。

実装内容について

  1. ProConRPGMainから起動
  2. ProConRPGEngineMainServerとアクセスしてきたクライアント(プレーヤー)の処理(ProConServer)を起動する
    3.ProConRPGEngineクラスのアクションやロジック部分を実装するクラスProConRPGLogicで画面の表示処理を行う。このクラスがJavaFXの実装クラスになる(extends Application)、そしてクライアントがアクセスするのを待機する(MainServerが待機する)
  3. クライアントクラスはClientSuperClsに実装する、プロコンクエストの実装完了後はこのクラスを継承したクラスをプレーヤーたちが実装する想定。
  4. タイトル画面の実装がとりあえず完了。

残作業一覧

  1. バトルMap画面の作成(SceneBuilder使用)
  2. プレーヤーキャラクターのMap表示
  3. プレーヤーキャラクターのアクション処理実装
  4. 複数プレーヤーのアクセスに対応する処理が起動するかテストする必要あり

とりあえずはここまでです。

でわでわ。。。

Java プロコンゲーム 〜プレーヤー生成のシュミレーション〜

今回は、プロコンゲーム(プログラミングコンテスト向けゲーム)の作成を続きでプレーヤー生成の設計準備を行います。

くどいようですが、自分の失敗談です。
設計をバカにしてはいけない。。。

プログラムの実装の前に

前回、プロコンアプリを作成した時には、設計を行わないで実装したので、汚いソースができました。これらのコードは Githubにアップしてあります。

以前作成したゲームループ処理の記事もあるので参考にどうぞ。

ゲームループの実装イメージ

プレーヤー生成の手順

プレーヤー生成の手順を考えるのに、占い判定を使用するつもりなので、調査を進めました。

  1. ゲーム作成のための調査 〜占いの項目をリストアップする〜
  2. 四柱推命関連のデータ1〜運命数表、十干十二支など〜
  3. テキストRPGを作る〜数秘術の概要まとめ〜

大まかに、東洋(四柱推命(九星気学))と西洋(数秘術)に関してしべました。

そして、それぞれの占いで使用する項目、具体的に以下のような項目を導きだします。

  1. 十干十二支 => 四柱推命、九星気学
  2. 各数字(普遍数、人格数、ハート数、運命数、意思数、特性数、欠落数、成熟数) => 数秘術

「1」に関して、は導きだした十干十二支(甲子(きのえね)など)から、それらに割り当てたパラメータ(詳細未定)を参照します。

「2」に関しては、導きだした各数字を生命の木に割り当てます。
<イメージ>

そして、割り当てた数字を上の図と関連させて細い線(パス)を導きだします。
「例」
数秘術で算出した数字が「1、4、6」であれば、1〜6の間の線(パス)を取得します。ここに対応するのは「女教皇」なので、ステータス算出に使用する項目は以下のようになります。

  1. 数秘術の数字「1、4、6」(詳細未定)
  2. 女教皇(詳細未定)

数秘術の数字とタロットカードの関連に関してはこちらの記事にまとめています。

プレーヤーステータス計算

前回作成した項目は以下のようになっています。

プレーヤーがプロコンサーバーへアクセスする時に送信する情報の一覧です。

  1. 生年月日
  2. 好きなこと(選択式)
  3. 苦手なこと(選択式)
  4. 得意なこと(選択式)
  5. 性別
    6. 名前(アルファベット)
  6. ID(プロコンサーバーが設定する)

そして、上記で導きだした。値を合計して以下のステータスに割り振ります。

十干十二支の計算

この項目に関しては、算出するパターンが60通りあるので、そのまま算出します。内容に関しては、こちらのページに記載しています。(六十干支参照)

具体的には、
下の指揮で、十干十二支を算出します。計算方法はWikiを参考にしました。
算出した干支より、「⑴各ステータス(詳細未定)」を取得します。

数秘術の計算

詳細は、こちらの記事に記載していますが、以下のものを使用します。

  1. 生年月日(運命数の算出)
  2. 名前(本名を使用、ゲームで表示する名前とは別にする)

ここから以下の数字を導きだします。

  1. 普遍数
  2. 人格数
  3. ハート数
  4. 運命数
  5. 意思数
  6. 特性数
  7. 成熟数
  8. 欠落数

そして、これらの数字を生命の木に対応させ、各数字と数字を結ぶ線(パス)を導きだし、それに対応するシンボルを取得します。
シンボルに関してはタロットカード(大アルカナ)の22枚文です。以下に示します。※リンクはWikipediaに飛びます。

  • アレフ (ケテル → コクマー)愚者
  • ベート (ケテル → ビナー)魔術師
  • ギーメル (ケテル → ティファレト)女教皇
  • ダレット (コクマー → ビナー)女帝
  • ヘー (コクマー → ティファレト)皇帝
  • ヴァヴ (コクマー → ケセド)教皇
  • ザイン (ビナー → ティファレト)恋人
  • ヘット (ビナー → ゲブラー)戦車
  • テット (ケセド → ゲブラー)
  • ヨッド (ケセド → ティファレト)隠者
  • カフ (ケセド → ネツァク)運命の輪
  • ラメド (ゲブラー → ティファレト)正義
  • メム (ゲブラー → ホド)吊された男
  • ヌン (ティファレト → ネツァク)死神
  • サメフ (ティファレト → イェソド)節制
  • アイン (ティファレト → ホド)悪魔
  • ペー (ネツァク → ホド)
  • ツァディー (ネツァク → イェソド)
  • コフ (ネツァク → マルクト)
  • レーシュ (ホド → イェソド)太陽
  • シン (ホド → マルクト)審判
  • タヴ (イェソド → マルクト)世界

まとめ

生年月日とプレーヤの名前(本名(ゲームに表示しない))から、以下を導き出す。

  1. 十干十二支
  2. 数秘術の数字からタロットカードの番号(ザ・ワールドなど)
  3. 上記の1と2から六十干支、各カードに対応するステータスを合算
  4. プレーヤーのステータスが算出される

これをプレーヤーのステータス生成の手順にしようと思います。

でわでわ。。。

以下、補足

ゲームの進め方

ゲームは以下のように進めます。

  1. プレーヤー(クライアントプログラム)がアクセス
  2. プレーヤー登録をサーバーが行う
  3. サーバーの画面でスタートボタン押下
  4. Mapの生成とプレーヤー配置
  5. 各キャラクター(プレーヤーなど)の操作
  6. ゲームの結果表示

上記のように進めます。

ゲームの目的

プレーヤーの目的

Map常にある「宝」を取得してスタート地点である「階段」に戻ってくること

ゲームオーバーの条件

  1. プレーヤーが戦闘不能になる時
  2. 指定のターン数内でクリアできない時

ゲームのMap上には、アイテムとか、モンスターとか罠があります。
これらをくぐり抜け、「宝」を取得して持ち帰るのがミッションです。

しかし、通常のRPGと違い、プログラムで実行しなくてはなりません。

なので、ちょっと難しいプログラムになってしまいますが、これをフォローする仕組みを組み込みます。

とりあえずは。。。

プレーヤー生成の処理を設計します。
とりあえずは、下のようなことを考えています。

職業は60種類

実際にある「職種」が大まかに以下の6つ

  1. 営業
  2. IT業務(ホームページなど)
  3. 企画
  4. 専門(各業種に依存する)
  5. 事務
  6. 環境管理(職場の衛生、出勤管理)

そして「業界」が以下の10個

  1. 広告メディア
  2. 教育
  3. 製造
  4. 不動産
  5. 農林水産
  6. 学会
  7. 政界
  8. 運送
  9. 医療
  10. アンダーグランド(グレーゾーンの業界)

ここから、何を実装するか?
とりあえずは、材料が揃ったのでこれをうまく組み込んでやることを考えてやります。

JavaFXの基本的なところ

細かい書き方などは下のリンク先に記載しています。

  1. UML 世界を作る 〜RPGでの世界を作る場合〜
  2. UMLの書き方(読み方)〜概要とクラス図〜
  3. UMLツール Star UML〜ユースケース図を書いて見た〜
  4. UMLツール 〜Star UMLを使う〜

javaFXはフレームワークです。なのでとりあえず下のように作成しました。参考にどうぞ。
JavaFXのパッケージにあるjavafx.application.Applicationを継承して作成します。
ここで、上のクラスを継承して実装することにより、画面表示を行うための細かい処理(Xサーバーへのアクセス及び、描画処理)を自分で作成しなくてよくなります。

つまり、作成するアプリに集中できるわけです。
その代わり、このフレームワークの使用方法を理解する必要があります。「JavaFXの〜」にあるリンクからOracleのドキュメントページに遷移できます。

自分の作成した記事は以下になります。
初心者でもわかる。。。というより作って動かして。。。とやってみるのが一番なのでその手順と実装サンプル、動かしてみたときのイメージを記載しています。

  1. JavaFX チュートリアル〜今度こそ、初めてでも大丈夫:Label〜
  2. JavaFX チュートリアル〜今度こそ、初めてでも大丈夫2:Label〜
  3. JavaFX チュートリアル〜今度こそ、初めてでも大丈夫3:Button〜

プロジェクトの作成方法

  1. プロジェクトエクスプローラーを右クリックします。
  2. JavaFXプロジェクトを作成します。
  3. プロジェクト名をつけます。使用するJDKは1.8です。JShellとか使用する予定がないので。。。

作成したプロジェクトは下のような感じです。

以前追加した、シーンビルダーというプラグインが入っているので、使用します。下は操作したときの動画です。今回作成するものではありませんので。。。

そして、作成したものは、下のような見た目です。

作成したときの動画は以下になります。途中で落ちましたが(笑)とりあえずは、使用するPCのスペックでメモリ不足(だと思う)により落ちる可能性があるので、File -> Save Asなどで時々保存すると良いと思います。

SceneBuilder

SceneBuilderは下のように作成しました。
SceneBuilderのセットアップはこちらを参照ください。

前回SceneBuilderを使用して作成した、FXMLは下のようEclipseのリソースフォルダへコピーしてプログラムから参照できるようにします。

まとめ

今回は、Socketを使用して実装するのにどう処理を行うかを考えました(設計しました)。
実装してみれば、Socket通信に関して理解ができると思います。
そして、低レベルAPIなので現在使用されるほとんどのデータ通信の土台になります。

つまり、ここがわかれば、他も理解できるということです。

今回はここら辺で。。。
でわでわ。。。

関連ページ

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 4Boolean
  5. Java Basic Level 5If 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 9Training 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 〜テストスイートの作り方〜


Java プロコンゲーム 〜プレーヤー生成の設計準備〜

イントロダクション

前回は、Socket通信の実装を行いました。
今回は、プロコンゲーム(プログラミングコンテスト向けゲーム)の作成を続きでプレーヤー生成の設計準備を行います。

くどいようですが、自分の失敗談です。

設計をバカにしてはいけない。。。

<追加>

設計を凝りすぎてもいけない。。。

失敗その2

下の設計は凝りすぎてゲームとして、プレーヤー側に多くの負担をかけることになり。。。まぁ始めるのがとても面倒、かつ、作るのに時間がかかりすぎるということで、仕様変更することにしました。

新しい仕様に関しては後日。。。
まずは、シンプルにテキストRPGのようなところから実装していこうと思います。

プログラムの実装の前に

前回、プロコンアプリを作成した時には、設計を行わないで実装したので、汚いソースができました。これらのコードは Githubにアップしてあります。

以前作成したゲームループ処理の記事もあるので参考にどうぞ。

ゲームループの実装イメージ

プレーヤー設計に向け

プレーヤーの設計→生成処理に向けて設計するための素材をまとめます。

プレーヤー入力

プレーヤーがプロコンサーバーへアクセスする時に送信する情報の一覧です。

  1. 生年月日
  2. 好きなこと(選択式)
  3. 苦手なこと(選択式)
  4. 得意なこと(選択式)
  5. 性別
    6. 名前(アルファベット)
  6. ID(プロコンサーバーが設定する)

これらの情報から以下の項目を設定します。

  1. 職業
    2, ステータス
  2. レベルは1に設定する(固定)
  3. 使用できるコマンド(たたかうetc...)

そして、ゲームの最中に行われる戦闘方法および勝敗判定方法など。。。

ゲームの進め方

ゲームは以下のように進めます。

  1. プレーヤー(クライアントプログラム)がアクセス
  2. プレーヤー登録をサーバーが行う
  3. サーバーの画面でスタートボタン押下
  4. Mapの生成とプレーヤー配置
  5. 各キャラクター(プレーヤーなど)の操作
  6. ゲームの結果表示

上記のように進めます。

ゲームの目的

プレーヤーの目的

Map常にある「宝」を取得してスタート地点である「階段」に戻ってくること

ゲームオーバーの条件

  1. プレーヤーが戦闘不能になる時
  2. 指定のターン数内でクリアできない時

ゲームのMap上には、アイテムとか、モンスターとか罠があります。
これらをくぐり抜け、「宝」を取得して持ち帰るのがミッションです。

しかし、通常のRPGと違い、プログラムで実行しなくてはなりません。

なので、ちょっと難しいプログラムになってしまいますが、これをフォローする仕組みを組み込みます。

とりあえずは。。。

プレーヤー生成の処理を設計します。
とりあえずは、下のようなことを考えています。

職業は60種類

実際にある「職種」が大まかに以下の6つ

  1. 営業
  2. IT業務(ホームページなど)
  3. 企画
  4. 専門(各業種に依存する)
  5. 事務
  6. 環境管理(職場の衛生、出勤管理)

そして「業界」が以下の10個

  1. 広告メディア
  2. 教育
  3. 製造
  4. 不動産
  5. 農林水産
  6. 学会
  7. 政界
  8. 運送
  9. 医療
  10. アンダーグランド(グレーゾーンの業界)

ここから、何を実装するか?
とりあえずは、材料が揃ったのでこれをうまく組み込んでやることを考えてやります。

JavaFXの基本的なところ

細かい書き方などは下のリンク先に記載しています。

  1. UML 世界を作る 〜RPGでの世界を作る場合〜
  2. UMLの書き方(読み方)〜概要とクラス図〜
  3. UMLツール Star UML〜ユースケース図を書いて見た〜
  4. UMLツール 〜Star UMLを使う〜

javaFXはフレームワークです。なのでとりあえず下のように作成しました。参考にどうぞ。
JavaFXのパッケージにあるjavafx.application.Applicationを継承して作成します。
ここで、上のクラスを継承して実装することにより、画面表示を行うための細かい処理(Xサーバーへのアクセス及び、描画処理)を自分で作成しなくてよくなります。

つまり、作成するアプリに集中できるわけです。
その代わり、このフレームワークの使用方法を理解する必要があります。「JavaFXの〜」にあるリンクからOracleのドキュメントページに遷移できます。

自分の作成した記事は以下になります。
初心者でもわかる。。。というより作って動かして。。。とやってみるのが一番なのでその手順と実装サンプル、動かしてみたときのイメージを記載しています。

  1. JavaFX チュートリアル〜今度こそ、初めてでも大丈夫:Label〜
  2. JavaFX チュートリアル〜今度こそ、初めてでも大丈夫2:Label〜
  3. JavaFX チュートリアル〜今度こそ、初めてでも大丈夫3:Button〜

プロジェクトの作成方法

  1. プロジェクトエクスプローラーを右クリックします。
  2. JavaFXプロジェクトを作成します。
  3. プロジェクト名をつけます。使用するJDKは1.8です。JShellとか使用する予定がないので。。。

作成したプロジェクトは下のような感じです。

以前追加した、シーンビルダーというプラグインが入っているので、使用します。下は操作したときの動画です。今回作成するものではありませんので。。。

そして、作成したものは、下のような見た目です。

作成したときの動画は以下になります。途中で落ちましたが(笑)とりあえずは、使用するPCのスペックでメモリ不足(だと思う)により落ちる可能性があるので、File -> Save Asなどで時々保存すると良いと思います。

SceneBuilder

SceneBuilderは下のように作成しました。
SceneBuilderのセットアップはこちらを参照ください。

前回SceneBuilderを使用して作成した、FXMLは下のようEclipseのリソースフォルダへコピーしてプログラムから参照できるようにします。

まとめ

今回は、Socketを使用して実装するのにどう処理を行うかを考えました(設計しました)。
実装してみれば、Socket通信に関して理解ができると思います。
そして、低レベルAPIなので現在使用されるほとんどのデータ通信の土台になります。

つまり、ここがわかれば、他も理解できるということです。

今回はここら辺で。。。
でわでわ。。。

関連ページ

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 4Boolean
  5. Java Basic Level 5If 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 9Training 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 〜テストスイートの作り方〜


Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

イントロダクション

前回作成した、設計をもとに進めます。
今回からは、プロコンゲーム(プログラミングコンテスト向けゲーム)の作成を始めようと思います。

前回作成した、設計(UMLのユースケース図)より順番に作成して行きます。

1.バッチをダブルクリックする

Javaで作成したプログラムは実行するときにコマンドもしくは実行可能JARファイルで実行する必要があります。IDE(開発ツール)からの実行方法以外のアプリケーションの起動方法として、最も標準的な手段としてバッチファイル(シェル(*.sh))を使用する方法があります。
Widnowsでは「バッチファイル」を使用します。

コマンドプロンプトでのコマンド実行をダブルクリックのみで実行する事ができます。

「1.バッチをダブルクリックする」の部分に関しては、作成したプログラムを起動するためのバッチ。。。

Windowsの場合は、「〜.bat」、MacやLinuxの場合は「〜.sh」というファイルで作成したプログラム(JARファイル)を起動することができます。なので作成するのは
最後になりますので今は「こんなのがあるよ~」程度に理解しておいてください。

プレーヤ受付画面

早速、プレーヤ受付画面の作成を始めます。
そして、設計するのにはUMLの「クラス図」を使用します。
細かい書き方などは下のリンク先に記載しています。

  1. UML 世界を作る 〜RPGでの世界を作る場合〜
  2. UMLの書き方(読み方)〜概要とクラス図〜
  3. UMLツール Star UML〜ユースケース図を書いて見た〜
  4. UMLツール 〜Star UMLを使う〜

そして、作成したクラス図は下のようなものです。

起動するメインクラスは、ProconServerクラスです。
そして、このクラスはJavaFXのパッケージにあるjavafx.application.Applicationを継承して作成します。
ここで、上のクラスを継承して実装することにより、画面表示を行うための細かい処理(Xサーバーへのアクセス及び、描画処理)を自分で作成しなくてよくなります。

つまり、作成するアプリに集中できるわけです。
その代わり、このフレームワークの使用方法を理解する必要があります。「JavaFXの〜」にあるリンクからOracleのドキュメントページに遷移できます。

自分の作成した記事は以下になります。
初心者でもわかる。。。というより作って動かして。。。とやってみるのが一番なのでその手順と実装サンプル、動かしてみたときのイメージを記載しています。

  1. JavaFX チュートリアル〜今度こそ、初めてでも大丈夫:Label〜
  2. JavaFX チュートリアル〜今度こそ、初めてでも大丈夫2:Label〜
  3. JavaFX チュートリアル〜今度こそ、初めてでも大丈夫3:Button〜

本題: 受付画面作成

本題に入ります。今回作成するのは、プロコンゲーム(プロコンサーバー)のはじめの画面、プレーヤ受付画面を作成します。
と言っても、順序立ててやって行きます。

とりあえずの見た目を作る

兎にも角にも、入力する部品(ボタンなど)がないと動かすのも、受け付けるのも設計の通りにはいかないので、ここから始めます。
俗にいうモックの作成です。

そして、作成するのに使用するのはEclipseを使用しますのでプロジェクトの作成から入ります。

  1. プロジェクトエクスプローラーを右クリックします。
  2. JavaFXプロジェクトを作成します。
  3. プロジェクト名をつけます。使用するJDKは1.8です。JShellとか使用する予定がないので。。。

作成したプロジェクトは下のような感じです。

以前追加した、シーンビルダーというプラグインが入っているので、使用します。下は操作したときの動画です。今回作成するものではありませんので。。。

そして、作成したものは、下のような見た目です。

作成したときの動画は以下になります。途中で落ちましたが(笑)とりあえずは、使用するPCのスペックでメモリ不足(だと思う)により落ちる可能性があるので、File -> Save Asなどで時々保存すると良いと思います。

今回作成したのは、プレーヤーの受付部分を1行だけ作成しました。とりあえずはプレーヤー1人の受付を実装し、うまくいくのなら他ものもの同様に作成する。。。そんな感じで行こうと思います。

しかし、色々と考えた結果変更する事にしました。
具体的なイメージは下のようなものです。

この部分に関しては、こちらの記事に記載しています。※JavaFX SceneBuilder 使い方~インストールからCSS指定方法など~

ボタンアクションの作成

参考サイト(OracleDoc)

SceneBuilderの右側にある、「Code: Button」にあるController部分を開きます。

そして、OnActionの部分にアクション時に起動するメソッド名を定義します。

注意事項としては、FXMLにボタンActionを定義したのにコントローラークラス(Javaファイル)に対象のメソッドを定義していない場合は、下のようなエラーメッセージが出ます。

Run FxServerjavafx.fxml.LoadException: Error resolving onAction='#startAction', either the event handler is not in the Namespace or there is an error in the script.
/D:/github/ObjectOrientedPrograming/target/classes/views/ProConTitleView.fxml:80

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2597)
    at javafx.fxml.FXMLLoader.access$100(FXMLLoader.java:103)
    at javafx.fxml.FXMLLoader$Element.processEventHandlerAttributes(FXMLLoader.java:610)
    at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:770)
    at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2823)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2532)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
    at jp.zenryoku.procon.ProConRPGLogic.start(ProConRPGLogic.java:102)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$3(WinApplication.java:177)
    at java.lang.Thread.run(Thread.java:748)
Exception in Application start method
Exception in thread "Thread-0" java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$1(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException: Root cannot be null
    at javafx.scene.Scene.<init>(Scene.java:336)
    at javafx.scene.Scene.<init>(Scene.java:194)
    at jp.zenryoku.procon.ProConRPGLogic.start(ProConRPGLogic.java:112)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$3(WinApplication.java:177)
    ... 1 more

今回はここら辺で。。。
でわでわ。。。

次回:Java プロコンゲーム 〜FXMLを読み込んで表示する〜

関連ページ

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 4Boolean
  5. Java Basic Level 5If 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 9Training 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 〜テストスイートの作り方〜


Git リポジトリをフォークする〜U16-プログラミングコンテスト〜

イントロダクション

「フォーク」というのは、Githubのプロジェクト(リポジトリ)からソースを取得します。そして、変更した内容をGithubのリポジトリの所有者に対して変更を依頼する「プルリクエスト」を送信することができます。

「クローン」という操作も「フォーク」と同様に、編集したり自由に扱うことができます。「フォーク」との違いは、「元の上流リポジトリに影響を与えることなしに、プロジェクトに対して自由に変更を加えることができます。」というところです。※引用です。

ちょいと縁があり、北海道は旭川のプログラミングコンテストのプログラムに触れる機会があったのでメモがてらに記載いたします。

インデックス

  1. Gitでフォークする方法
  2. 実際に対象のリポジトリからフォークした時の手順
  3. Mac環境でのC++をコンパイル〜実行

U16-旭川プログラミングコンテストで使用する、GitリポジトリにあるCHaserServerをフォークしてMac用にコンパイル、実行してみようと思います。参照するリポジトリはこちらです。

CHaserサーバー起動画面

Forkする

あまりにも簡単だったので記載することがほとんどないのですが、以下に示します。(ちなみに下の画像はフォーク後です)

<手順>

  1. 一度、自分のGithubにログインしておく
  2. フォークしたいリポジトリへ移動
  3. 下の様な「Fork」と書いてあるボタンを押下する

※フォークした後なので非活性状態になっています。

これだけでフォークされました。

余談

U16-プログラミングコンテストは旭川で行われているという記載がありますが、昨年などは札幌の方で予選を行い、決勝戦を旭川で。。。という様な流れで行われました。

実際に中学生〜高校1年生かな?(16歳以下)が参加して行います。札幌大会の優勝者はハイスペックなパソコンをもらっていました。ちなみに自分はデモンストレーションで、高専の先生とバトルしました。

そして、プログラミングコンテストで使用する。競技用プログラムは「CHaserServer」というサーバーにアクセスしてプログラムでCool,「C」とHot「H」を操作して勝敗をつけます。ちょっとみづらいですが下に「C」と「H」がいます。

サーバーの起動ファイル(Windowsならexeファイル)を実行すると下の様な画面が出てきます。ここの「TCPユーザー」が実際にプレイヤーにあたります。

これを選択した状態で右にある「待機開始」ボタンを押下すると待機が始まります。つまり、クライアントアプリでのアクセスを待ちます。

クライアントアプリを作る

プログラミングコンテストの競技部門では、上記のサーバーを使用して(多分。。。)クライアントアプリでルールに則り勝敗を決します。

まぁダイヤモンドをとったり、相手を壁に挟んだり。。。ってな感じです。

実際のクライアント「H」のプログラムがこちらのZIPファイルです。

こいつをカスタムして、ゲームをやるもよし、競技に出場するのもよし!

そして、サーバーには、データを送信すれば良いので、クライアントアプリはC言語でも、Pythonでもなんでも良いです。自分はJavaで実装しました。

でわでわ。。。