イントロダクション
前回は、Socket通信の実装を行いました。
今回は、プロコンゲーム(プログラミングコンテスト向けゲーム)の作成を続きでプレーヤー生成の設計準備を行います。
くどいようですが、自分の失敗談です。
設計をバカにしてはいけない。。。
<追加>
設計を凝りすぎてもいけない。。。
失敗その2
下の設計は凝りすぎてゲームとして、プレーヤー側に多くの負担をかけることになり。。。まぁ始めるのがとても面倒、かつ、作るのに時間がかかりすぎるということで、仕様変更することにしました。
新しい仕様に関しては後日。。。
まずは、シンプルにテキストRPGのようなところから実装していこうと思います。
プログラムの実装の前に
前回、プロコンアプリを作成した時には、設計を行わないで実装したので、汚いソースができました。これらのコードは Githubにアップしてあります。
以前作成したゲームループ処理の記事もあるので参考にどうぞ。
ゲームループの実装イメージ
プレーヤー設計に向け
プレーヤーの設計→生成処理に向けて設計するための素材をまとめます。
プレーヤー入力
プレーヤーがプロコンサーバーへアクセスする時に送信する情報の一覧です。
- 生年月日
- 好きなこと(選択式)
- 苦手なこと(選択式)
- 得意なこと(選択式)
- 性別
6. 名前(アルファベット) - ID(プロコンサーバーが設定する)
これらの情報から以下の項目を設定します。
- 職業
2, ステータス - レベルは1に設定する(固定)
- 使用できるコマンド(たたかうetc...)
そして、ゲームの最中に行われる戦闘方法および勝敗判定方法など。。。
ゲームの進め方
ゲームは以下のように進めます。
- プレーヤー(クライアントプログラム)がアクセス
- プレーヤー登録をサーバーが行う
- サーバーの画面でスタートボタン押下
- Mapの生成とプレーヤー配置
- 各キャラクター(プレーヤーなど)の操作
- ゲームの結果表示
上記のように進めます。
ゲームの目的
プレーヤーの目的
Map常にある「宝」を取得してスタート地点である「階段」に戻ってくること
ゲームオーバーの条件
- プレーヤーが戦闘不能になる時
- 指定のターン数内でクリアできない時
ゲームのMap上には、アイテムとか、モンスターとか罠があります。
これらをくぐり抜け、「宝」を取得して持ち帰るのがミッションです。
しかし、通常のRPGと違い、プログラムで実行しなくてはなりません。
なので、ちょっと難しいプログラムになってしまいますが、これをフォローする仕組みを組み込みます。
とりあえずは。。。
プレーヤー生成の処理を設計します。
とりあえずは、下のようなことを考えています。
職業は60種類
実際にある「職種」が大まかに以下の6つ
- 営業
- IT業務(ホームページなど)
- 企画
- 専門(各業種に依存する)
- 事務
- 環境管理(職場の衛生、出勤管理)
そして「業界」が以下の10個
- 広告メディア
- 教育
- 製造
- 不動産
- 農林水産
- 学会
- 政界
- 運送
- 医療
- アンダーグランド(グレーゾーンの業界)
ここから、何を実装するか?
とりあえずは、材料が揃ったのでこれをうまく組み込んでやることを考えてやります。
JavaFXの基本的なところ
細かい書き方などは下のリンク先に記載しています。
javaFXはフレームワークです。なのでとりあえず下のように作成しました。参考にどうぞ。
JavaFXのパッケージにあるjavafx.application.Application
を継承して作成します。
ここで、上のクラスを継承して実装することにより、画面表示を行うための細かい処理(Xサーバーへのアクセス及び、描画処理)を自分で作成しなくてよくなります。
つまり、作成するアプリに集中できるわけです。
その代わり、このフレームワークの使用方法を理解する必要があります。「JavaFXの〜」にあるリンクからOracleのドキュメントページに遷移できます。
自分の作成した記事は以下になります。
初心者でもわかる。。。というより作って動かして。。。とやってみるのが一番なのでその手順と実装サンプル、動かしてみたときのイメージを記載しています。
- JavaFX チュートリアル〜今度こそ、初めてでも大丈夫:Label〜
- JavaFX チュートリアル〜今度こそ、初めてでも大丈夫2:Label〜
- JavaFX チュートリアル〜今度こそ、初めてでも大丈夫3:Button〜
プロジェクトの作成方法
- プロジェクトエクスプローラーを右クリックします。
- JavaFXプロジェクトを作成します。
- プロジェクト名をつけます。使用するJDKは1.8です。JShellとか使用する予定がないので。。。
作成したプロジェクトは下のような感じです。
以前追加した、シーンビルダーというプラグインが入っているので、使用します。下は操作したときの動画です。今回作成するものではありませんので。。。
そして、作成したものは、下のような見た目です。
作成したときの動画は以下になります。途中で落ちましたが(笑)とりあえずは、使用するPCのスペックでメモリ不足(だと思う)により落ちる可能性があるので、File -> Save Asなどで時々保存すると良いと思います。
SceneBuilder
SceneBuilderは下のように作成しました。
SceneBuilderのセットアップはこちらを参照ください。
前回SceneBuilderを使用して作成した、FXMLは下のようEclipseのリソースフォルダへコピーしてプログラムから参照できるようにします。
まとめ
今回は、Socketを使用して実装するのにどう処理を行うかを考えました(設計しました)。
実装してみれば、Socket通信に関して理解ができると思います。
そして、低レベルAPIなので現在使用されるほとんどのデータ通信の土台になります。
つまり、ここがわかれば、他も理解できるということです。
今回はここら辺で。。。
でわでわ。。。
関連ページ
Java Basic
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜