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 〜テストスイートの作り方〜