ドラクエって実は凄い。

私が駆け出しだからなのかもしれないが、
システムをWebで真似ようとして、そのアルゴリズムを描き出してみると…

単純に描いただけでもこれだけある。


本来はコマンド選択式の戦闘UIなのだけど、
魔法の動作が非常に複雑そうなので、あくまでも今回は基本攻撃だけで計算する流れにした。
これに状態異常が加わるとさらに複雑。
毒や麻痺でHPやコマンドに制御を加えないといけないし、命中率や回避率やクリティカル判定もあるし、
混乱状態になったら味方の攻撃でもダメージが発生して画面をシェイクする関数を呼び出さなければいけない。
私が子供の頃遊んだFF4はAI(AutomaticInterface:この場合戦闘AI)が導入されたとかで当時宣伝してたけど…
戦闘だけでこれだけ複雑なら宣伝したくなるだけのことはあると思う。
RPG構想だけでこの複雑さ。好きなACTゲームを作るんてまだまだ夢の夢やでェ…



できるだけ近しいものにしたいけど、オブジェクト指向も理解したいので必要最小限から作っていこう。
今回は必要なファイルとデータの受け渡しを明確化する。
訓練で勉強したmailformを元に作っていく。
input.php ― input.tpl(form形式)[入力{名前(name):textbox、性別(gender):radio、職業(job):option}、確認画面へのボタン]
   ↓$_POST['name'],$_POST['gender'],$_POST['job']  ↑SESSION['post_data']
confirm.php ― conrifm.tpl[エラーチェック、戦闘開始ボタン]
   ↓
battle.php ― monitor.tpl[とりあえず入力なし、計算が速すぎる場合は時間パラメーターで管理予定]
   ↓
fin.php ― fin.tpl[結果表示、input.phpへ戻るボタン]



定義することが見込まれる変数
input.php {
 $name,$gender,$job…confirmで入力エラー発生し、戻ってきたときに$_SESSIONの値を格納しておく変数。
           $SESSIONはリセットされてはじまるので必要。
}
confirm.php {
 $errors(array)…name,gender,jobの入力エラーの有無+エラーの内容を表すstringをerrflgに格納した配列。
         今回、3要素がそれぞれエラーになるケースは未入力の1通りしかないので、
         エラーの種類を書き込まず、直接bool値を格納するだけで良さそう。
 $errflg(bool)…エラーフラグ。配列の値を論理積のif文で制御するなら、
        この変数をいちいち渡す必要も無い気がするけど…解りづらくなるからかなぁ?
 $_SESSION['post_data']…input.phpから送られてくる入力内容を格納した配列キー。$_POST値をまとめて格納。
      ['input_error']…エラー時にinputへ送る配列キー。
               ユーザーが入力したStringなどが値として入っており、打ち直しの手間を解消する。
}
ここからは全く自信がない…
battle.php {
 $player(array)…プレイヤーのステータスを格納した配列。選択したjobで分岐(固定値)。
 $enemy(array)…敵のステータスを格納した配列(固定値)。
 $daflg(bool)…敵と味方双方の生死をif文で判定する。攻撃時、被撃時一回ずつ判定。
 $status(integer)…HP変化時にif文でチェックし、bool値に似た値を格納する。(0〜3)
          プレイヤー死亡時=赤(0),HP15%未満=オレンジ(1),else正常=白(3)
          jsで画面の色を変更するのに使う。
 $dmg(function)…ダメージ計算式を決定する関数。後でステータスの影響がある計算式に作り変えたい。
         今回は固定値で削りあう(当然結果も固定されてしまう)。
}

ここからは完全に妄想…
ダメージで画面をシェイクするエフェクトを考える。
Webで表示された画面(div#container)のmarginをjQueryで瞬間的に書き換えたい
←8px&&↑5px,  →12px&&↓7px, ←&11px&↓5px,… みたいな感じで。
値はmt_rand()で5〜15pxが出るようにすればなお良いかな?

問題はシェイクが発生する瞬間だ。jsはあくまでもイベントトリガーが必要だ。
confirm.phpの戦闘開始ボタンのonclickイベントというよりも、battle.phpのonloadイベントになりそう?
プレイヤーがphpの計算で出たダメージを受けた瞬間だけjsで画面を制御する。
どう考えたってそれはonloadからの経過時間パラメーターの制御じゃダメだ。…うーんドウシヨウ
phpの計算過程でjsを呼び出したりする制御ってできるのかなあ?ソコが一番の問題だ。
Ajaxっていうのがソレなのかな。使えたらカッコイイなぁ…