ゲームのベース部分

まだ自機が動かせるようになった程度の初期段階だけど、ゲームのベースとなる部分を作ってみた。


クラス図


各クラスはこんな感じ。

Game クラス
 ゲーム全体を制御するクラス

Config クラス
 初期設定・構成情報などを保持するクラス

Task クラス
 ゲームに登場するキャラクタの抽象クラス

Mover クラス
 移動するキャラクタの抽象クラス

Ship クラス
 ユーザーがゲームを遊ぶ為に操作する自機クラス

TaskList
 書籍 シューティングゲーム プログラミング におけるタスクシステムを構成するクラス。まだ未使用

Main クラス
 ゲームのエントリポイントとなるクラス


書籍 シューティングゲーム プログラミング とは敢えて異なる、Java 文化的なクラス名をつけた。


Game クラスが Ship クラスに直接依存していたり、これからリファクタリングして改良していかなきゃいけないし、そんな部分は多々ある。


ノープランでこのプロジェクトを始めたが、元のプログラムが DirectX を使用している部分、特に3D関連処理の部分には問題がいっぱいありそう。
JavaFX の3D関連の機能は目下実装途中で、そろそろリリースされるのかまだ暫く先なのか、そこまで調べてないからわからないけど、現在は使えないのでとりあえず、代替案で問題回避するしかなさそう。


それから自機の移動を上下左右の十字キー入力によって行うけど、斜め移動に難あり。
というのは、静止状態から斜め移動する、縦移動あるいは横移動から斜め移動する際、2つのキー(例えば[↑]と[→])をうまく同時に押さないと、斜めに移動できない。
これは例えば、右へ移動中に右下へ移動方向を変えるには、一旦入力をニュートラルにして(つまりキーを押下した状態を放して)から右キーと下キーを同時押ししなければならない。


あと、JavaFX のイベントシステムは二つのキー同時押しを、短い時間間隔で一つずつ交互に発生させる。
例えば[↑]の onKeyPressed イベントが発生し、その直ぐ後に、[→]の onKeyPressed イベントが発生、そしてまた[↑]の onKeyPressed イベントが発生するということを繰り返す。
このようなことをしっかり理解してかないといけない。
これはプラットフォームに関係なく、何でもみんなそうなのかな。


これからは問題をクリアしつつ、キャラクターを追加したり弾を発射できるようにしていく予定。
まあトライ・アンド・エラーでも何でも良いから地道に問題をクリアしながら作り上げて行きまっしょ〜いと。