ソフトウェアと言うのはユーザーが何かをすることで
機能するもの及び、目的が、そうしたユーザーが何かを
するための物である場合と、バッチ処理などのように自
動で動くものがあります。
そして、見えている状態で判断するそれと、実際に動
かす場合の処理が異なる場合があります。
とりあえず、人が操作する条件が存在する物における
操作と処理の際について少し触れておこうかなと思いま
す。
まず。単純な、数値を入力してそれの演算子が出る
特定のの数式を自動処理で行う物を想定した場合、人の
作業は入力のみで、演算子を出す場合において、その
処理をボタンで出すと仮定すると、
【 人の作業 】
■ 数値の入力
■ ボタンのクリック
になります。では、この時のプログラムは何をしている
のか?というと、
■ 入力待ち
( 数値の入力がされる )
■ 入力された数値をメモリーに格納
■ ボタンのクリックによる処理待ち
(ボタンのクリック)
■ 演算処理
■ 演算結果の表示
になります。簡素な処理でも人の操作と内部処理では
全く異なる物が必要だという事が理解できると思いま
す。
こうした処理ですが、HTMLのマウスアクションでも
同じで、カーソルの状態でも変わってきます。
マウスと言うと
■ OnClick
■ mouseover
■ MouseOut
の処理がありますが、最初のが、クリックによる処理で
マウスが特定のオブジェクトに重なった場合とそれから
外れた場合の処理がそれになります。
つまり、
【 マウスが重なると何かのアクションが発生し、ク
リックで別のイベントが起きるような構造物の場
合、操作をしてる人から見た場合、二つの処理し
か起きていない用のに見える物の実際には、Mou
seOverイベントとま別にMoseOffのイベントを
用意してそれ以外の通常時の処理も必要 】
になります。
JavaScriptでWEBページをコントロールするような場
合で、リアクション御身を用意する場合、ここに変数は
存在しませんから、そのまま処理しますが、ゲームなど
の場合、数値の変動が発生します。
例えば、RPGなどで、エンカウントをする場合、プレイ
ヤーにはいつエンカウントをするのかと言うタイミングは
全くわかりませんが、その処理は存在しています。
つまり、キー判定でキャラが動いているわけですが、こ
の時にエンカウント判定と言うプレイヤーに解らない変数
が存在し、それの判定を行っています。
つまり、見えている処理と挙動以外の変数の処理が行わ
れているので、プログラムの場合、見えているモノのみと
言う訳ではありません。
これが、RPGの場合、
■ シナリオ上で存在するフラグ
■ 特定の処理をした時の判定
においても変数による判定が存在するため、結果的に、キャ
ラの操作とは全く違う処理が当たり前に存在するわけです。
その為、
【 プレイヤーの操作系以外の処理を設計段階で
用意する必要がある 】
事になります。
変数を使うような内容を少し考えてみると、ゲームにおけ
る戦闘シーンなどで考えてみると、キー操作と座標変動だけ
ではどうしようもない物があります。
例えば、戦闘中のメニュー操作ですが、これは、
■ シンプルな縦移動のメニュー
■ アイコンが移動するスタイル
などがありますが、この場合の、アイコンと命令の処理と言う
のは、どういう相関関係であれば処理できるでしょうか?
この場合、カーソル移動だけでは条件判定は出来ません。
そうした場合、選択する対象を変数化し、その条件で条件
判定をする方法があります。
例えば、
■ 物理
■ 魔法
■ 道具
■ 逃げる
の選択肢があったとします。この場合、1-4までの数値を選択す
る条件年、その操作に対して、数値変動をレ遠景させるようにす
れば、代入を行う条件は完成します。
1 物理
2 魔法
3 道具
4 逃げる
変数への数値の代入の条件をボタンのアクション及びキー操作
と連動させた場合、カーソル移動中という数値選択時には、変数
は初期値のカーソルの位置に合わせた1になります。
つまり、その条件で、仮にaと言う変数を用意して、1-4の数値
を代入するようにしたとします。それ以降の挙動の選択を、この
変数参照にするわけです。そうなると
【 ナビゲーションのコントロール用の処理 】
【 変数処理 】
の粗油法を用意し、それを動かすことになります。つまり、コマン
ドを選んで、実行すると別のアクションが起きると言うのは、完全
に条件式ですが、内容的にはSelectCaseのようなものになります。
つまり、縦に並んだメニューの場合、カーソルのコントロールは
縦の座標移動のみになります。
ゲームエンジンではコリジョン判定で接触をさせると言う条件や
マウス主体のナビゲーションの場合、処理が異なるのですが、そう
ではなく、キー操作やコントローラーの操作の場合、変数で制御し
なければ、その移動した条件とその見えている、プレイヤーの条件
と、処理におけるその状態の際の検知が出来ません。
こうした場合、何かしらの変数参照をしてそれを対象にしていく必
要が出てきます。そうした変数を使わない場合、座標の数値を利用
するなどの方法もあるのですが、管理しにくいので、変数制御をした
ほうが効率的だと言えます。
コーディングでモノを作る場合、当たり前ですが、コリジョンと言
う概念が使えない場合が多いので、接触判定ではなく、そうしたモ
ノは、変数で処理する事になります。つまり、上記の条件だと、この状態で
【 メニュー呼び出し 】
【 メニュー選択 】
■ 選択1
■ 選択2
■ 選択3
■ 選択4
と言う条件分岐が発生します。つまり、処理の前の段階で
こうしたモノが出来上がります。つまり、これをテキスト
で動かすのか、もっしくは、円形のUIを表示させて、回
転させるか、表示を変更させるかなどのUIデザインの違い
が発生する場合、処理をする上でラジアンを使う事になっ
たり、変数に該当する条件判定で、表示を変更するなどの
の表示のコントロールをすることも可能になります。しか
し、こうした処理方法は個別に設定されているとしてもプ
レイヤーからは見えません。
そして、先頭に関しての挙動も、どう要った振る舞いに
するのか?で変わってきますが、これがドラクエのような
ものだと、素手を前提にすると、
■ 敵へのダメージの計算
■ 攻撃時のアニメーション
■ 敵HP-ダメージ
■ 自分へのダメージ計算
■ 攻撃時のアニメーション
■ 自分のHP-ダメージ
と言う処理が発生します。しかし、これは1度ループしたの
ちにコマンド選択になります。
つまり、【 ターンの概念を入れておく 】必要があるの
でこれも変数で処理させたほうが都合がよくなります。
とちあえず、その条件で処理が変わるわけですが、文字の
表記と演算処理ン尾差異だと、魔法と物理の差は参照するパ
ラメーターと表記の違いになります。
逃げる場合はパラメーター参照+乱数で処理させるとして、
条件判定をするとして、その判定での文字の表記と、判定に
よって、先頭の終了処理を入れる事になります。
アイテムの場合には、ウインドウを表示させる必要がある
為、それは異なる訳ですが、最初の三つと異なり、
【 アイテムの選択 】
が発生します。つまり、これもメニューの構成がどうなっ
ているかで変わるわけですが、多くの場合、画像表記にし
てもテキスト表記にしてもリスト型になっています。その
為、ここでも、戦闘メニューの選択のような処理が発生し
ます。
当然、これは、変数の設定がアイテム単位になるので、
通常はデータべ-スで管理して処理する事になります。つ
まり、【 アイテム名:数量 】と言う型式のモノを複数
管理することになるので、この場合、データベースと同様
に
1:アイテム名:数量
2:アイテム名:数量
のように、番号管理をすることになります。これをどうレイ
アウトするのか?も含めて考える事になります。
つまり、アイテム数で管理する事で、選択においての状況
変化を与える事が可能になります。
以前書きましたが、このアイテムの変数をIとした場合、
”名称”+ i +"png"
などで画像を呼び出せますが、画像をアイテムとの関連付けを
する場合にはそうした手法を使う事もできます。
とりあえず、戦闘シーンにおいて文字だけで処理するにして
も、アイテムの項目があれば、別途メニューのUIと処理を考
える必要があります。
つまり、戦闘シーンにおいて、キャラクターモーションなど
を追加して処理をする場合には、別途、そのモーションの呼び
出しをする必要性が出てきます。つまり、物理にしても魔法に
しても、その発生処理の後の振る舞いを構築する必要性が出て
きます。
この戦闘シーンと言うのが、メインのマップ上での処理とは
異なる処理ですから、エンカウント処理の後のものとなります。
つまり、そうしたシステムを作る必要性があるのですが、こ
うした処理もバックグラウンドでの処理は、プレイヤー側では
見えて居ません。
数値の増減ですが、変数の推移と同じなんですが、これは外
部のデータベースや変数の山を用意してそれを変更して調整す
る事になる訳ですが、これはメニュー処理よりも多くの数値の
処理が発生します。つまり、この場合、用意したアイテム数分
だけ選択が発生します。
これと類似するのが、魔法の数を複数増やした場合や、魔道と
統僧侶系で異なる呪文形態を作った場合になります。
つまり、属性で種類を増やした場合、アイテムの処理と同様に
データベースで管理する事になります。
しかし、アイテムにしても前述の魔法にしても、LVと言う変数
で覚えている魔法に差があったり、所有していないアイテムは表
示されないなどの処理が入ります。そうなると、
■ 数値による表示の変更
■ 選択する変数の上限の変更
などが発生します。テキスト表記の場合でもこうした処理が発生
しますが、アイテム管理システムや魔法管理システムと言うのは
ゲームで異なりますが、ディアブロのようなアイテムグリッドが
存在しており、アイテムのサイズがあり、配置の方法がそのサイ
ズに見合わない場合のは配置不能などの仕様だとこの場合、何も
ない場所とアイテムの配置された場所の検知の必要が出てきます。
そのうえで0の条件でその形状が埋まると言う内容が成立した場
合のみ配置可能になるので、SLGなどの移動範囲のような解析が
必要になります。
しあkし、その条件判定処理については、ゲーム中にプレイヤー
では何をしてるのか全く分かりませんが、それを用意しないと機能
はしません。
こうしたリスト処理と、データの管理については、RPGやSLG
では恐ろしい量になるので、単独の変数で用意すするのではな
くデータベースを制作して、データ参照で処理する事になります。
内容ですが、武器の装備とパラメーター変化や、表示の変更な
ども変数参照をすれば、管理しやすくなります。
その為、マップ移動遺体の処理のキャラクターのパラメーター
と戦闘とアイテム管理などに関してもプレイヤーが見えてない部
分での処理が存在しています。
そうした呼び出しも内部のグローバル変数やローカル変数の呼
び出しとは異なる処理で大丈夫な変数の絶対数が少ない物だと異
なるのですが、データベース参照だと処理が少し変わってきます。
基本的にゲームの部分的な部分だけを見ても見える処理とそう
でない部分がっ存在しています。