ionicを試す 21日目 ゲームブック処理の流れ
まずコンストラクタでは、Book.jsonを読み込み、そのデータからゲームブックの表紙を表示します。
表紙からは、ゲームブックを始めるボタンがあり、押下して第一回目はPage.jsonにエラーが無いかを確認し、エラーがあれば表示してそれ以上処理しません。
(作成者レベルでのみ起きる話ですね)
エラーが無ければ、1ページ目を読み込み表示します。
各ページには以下のページタイプがあります。
・'Select':選択肢を選んで次のページを決める
・'Judgement':サイコロを振り、基準値との大小比較で次のページが決まる
・'Multiple':サイコロの出目により、それぞれ次のページが決まる
・'Attack':”敵”と戦い、その勝敗により次のページが決まる
・'Flagcheck':所持しているフラグの有無により次のページが決まる
・'Statuscheck':HP、AP、GPの値と基準値を比較して次のページが決まる
・'Ending':エンディング。1ページ目に戻るのみ可能。
またどのページで有っても、任意のフラグ一つをセットでき、またステータスの変更が行えます。
(表示された時点ではフラグやステータスのセット・変更はすでに行われています)
'Flagcheck'と'Statuscheck'はチェックの結果、条件に合う次のページに移行するので、表示されることはありません。
ページの移動は以下のような処理で行っています。
・ThisPage と言う変数に移動するページをセット(例えば"21")
・fnSetPropValFromPage();と言う関数でThisPageをキーにしてページデータを内部変数にセット
(Angularの機能でこれだけでHTMLの大半は埋まる)
・fnDispThisPage();と言う関数でページタイプ別の処理を行う。
ページタイプ別の処理をもう少し見ていきます。
'Select':選択肢タイプ
このタイプは、ページデータの読み込みだけでほぼ完了です。
文章と1つあるいは複数の選択肢、そして次のページへ飛ぶボタンのみがあります。
ページを開いた段階では、複数の選択肢のいずれも選択されていません。(一つしかない場合は、それが選択済みになっています)
選択肢の選択されていない状態で、ページ移動のボタンを押下するとエラーメッセージが表示されます。
選択されているならば、それに対応するページに移動します。
'Judgement':サイコロによる判定タイプ
このタイプもページデータの読み込みだけでほぼ完了です。
文章の下に2つのサイコロが表示され、その下にサイコロを振るように指示するボタンがあります。
このページには基準値が設定され、その値よりもサイコロの合計が大きければ成功、さもなければ失敗扱いです。
サイコロを振ると、成功・失敗それぞれ用の結果画面が表示され、そこの次へボタンを押下して対応ページに移動します。
'Multiple':サイコロによる判定タイプ2
このタイプもページデータの読み込みだけでほぼ完了です。
文章の下に2つのサイコロが表示され、その下にサイコロを振るように指示するボタンがあります。
このページには基準値はありません。
2~12の出目すべてに対応するページが設定されています(同じページがあっても構わない)
成功・失敗それぞれ用の結果画面も表示されませんので、たとえ2つの行き先しか無くても'Multiple'を使うべき場面はあるかもしれません。
サイコロを振ると出目が表示され、サイコロを振れボタンが次のページへボタンに変更されます。
(内部的には2つのボタンが用意され、片方を非表示にしています)
次へボタンの押下で対応ページに移動します。
'Attack':”敵”と戦い、その勝敗により次ページが決まる
このタイプも・・・どのページもデータの読み込みだけで表示はほぼ完了ですが、このタイプは自身と戦う相手のHP(MAXと現在のHP)が横棒グラフとして表示されます。
サイコロが2つ表示なのは2つの判定タイプと共通ですが、押下するボタンは3つ用意されています。
ボタンの表示は変数AttackPhaseで制御しています。(ページ表示時に0をセット)
・AttackPhase = 0 :先攻・後攻を決めるボタン AttackPhase = 1
基準値(Page.jsonのCheckCube)と比較して大きければ先攻
・AttackPhase = 1 :戦闘中、攻撃された相手へのダメージを決めるボタン
片方のHPが0以下になれば、AttackPhase=2
・AttackPhase = 2 :戦闘結果に従い、次のページへ移動するボタン
勝敗がついた段階で表示される次へ移動ボタン押下で対応ページに移動します。
'Flagcheck':フラグによるページ遷移制御
このタイプはページ表示を行いません。
最大10のフラグを順にチェックして、オンのフラグがあれば対応するページに移動します。
いずれにも該当しない場合は、NextPage11に設定されているページに移動します。
'Statuscheck':ステータスによるページ遷移制御
このタイプもページ表示を行いません。
タイプは
・StatusCheckHP
・StatusCheckAP
・StatusCheckGP
の3種類あり、それぞれの現在の値と基準値(Page.jsonのCheckCube)を比較して
・小さい時
・等しい時
・大きい時
により移動するページが変わります。
'Ending':エンディング。1ページ目に戻るのみ可能。
表示のみのページです。
ボタンはありますが1ページに移動する事しか出来ません。
以上、各ページタイプによる処理を簡単に説明しました。
書きながら、ソースコードを再確認していたところ、幾つか手直しが必要な部分が出てきました。
(ステータス変更のパターンが足りない。最大値の変更なども必要か)
次回は多少遅れるかもしれませんがAndroidStudioのインストールおよび関連設定について書きたいと思います。




