-----> システム仕様書 (System Specification) 当システムは横スクロール2Dアクションゲームの基盤。 下記は一から隅々までのシステム仕様と説明。 ----> 実現 (Implementation) ---> ハードウェア (Hardware) PC用実現。(いわゆるx86) 32ビット・64ビット可。 --> ディスプレイ (Display) グラフィック出力デバイス。解像度自由。 --> スピーカー (Speaker) 音声出力デバイス。 --> キーボード (Keyboard) ゲーム入力と文字入力デバイス。 --> ゲームパッド (Gamepad) 例えばPS2コントローラーでUSBアダプター使用。キーボード代わりにゲーム入力デバイス。 --> マウス (Mouse) 文字入力に伴うデバイス。 ---> ソフトウェア (Software) --> 対応オペレーティングシステム (Target Operating System) Windows (XP~7) --> 開発言語 (Development Language) C++。実行の素早さ、デファクトであることに基づく。 exe形式。 --> 使用ライブラリー (Library Usage) -> DirectX 9 グラフィック出力、音声出力。 多少3Dグラフィカルエフェクトを仕組める可能。 -> GMP 任意精度演算。 基本の変数は数値と精度に制限無し。 ----> 実行 (Execution) ---> システム流れ (System Flow) 実行の開始から解除までの全体流れ。 --> システム的初期設定 (System Initialization) ウィンドウ作成等を行う。 --> ゲーム的初期設定 (Game Initialization) ゲームの最初メニューや最初のレベルを構成する。 --> システムループ (System Loop) 「システムフレーム」実行の繰り返し。 --> システム解除 (System Deinitialization) 「リプレイファイル」を保存する等を行う。 ---> システムループ (System Loop) ボードゲームやターンで決まるゲームと違って、リアルタイムで行う。 道理で相応しく細かい間に 1)物理計算 2)グラフィック表示 3)音声出力 等を繰り返す。 このためのシステムループ。ループの反復は「システムフレーム」(System Frame)または「フレーム」と呼ばれる。 フレームは指数で叙する。一番目はフレーム0、次はフレーム1等。 フレーム1以降に「フレーム時差」(Frame Time Difference)または「時差」がある。フレーム0の始まりからフレーム1の始まりまでの現実時差を示す。 フレームの処理量、外部の処理落ちが原因で時差がフレームによって異なる。 *なので一定的なフレームレートはない。 ---> フレーム進行型 (Frame Progression Model) 現実で流れてる時間とゲーム内の時間、入力裁き、処理落ち対策等を合わす工夫が要る。 その工夫はいくつかあって、すなわち「フレーム進行型」または「進行型」と呼ばれる。 フレーム時差と伴い、「フレーム進行時差」(Frame Progress)または「進行時差」(Progress)もある。ゲーム内の時間は進行時差に限って流れる。 *ゲーム内の時間と時点は単に「時間」と「時点」と呼ばれ、現実時間と現実時点に結ばれてない。 *ただし、「時差」は現実時差を指し、ゲーム内の時差は「進行時差」と呼ばれる。 時差から進行時差を計算する関数と、「フレーム末尾動作」(Frame Tail Operation)または「末尾動作」で進行型が決まる。 --> 進行時差関数 (Progress Function) -> 一定 (Constant) f(t) = N 時差が何はともあれ、進行時差が一定な数値になる。 処理的に一番安い関数。 時差が割りに一定でないと現実時間とずれる。 -> 線形 (Linear) f(t) = k*t 時差に応じて進行時差が線形的に計算される。 このままだと、突然な時差ギャップが入ると厄介な干渉になる。 例えば、平均の時差が0.04秒であって、いきなり1秒の時差でその間に画面が停止され、元に戻ると大事なポイントが失われる可能性がある。 対策は制御を導入すること。 k*L, L >= t f(t) = k*t, L > t > U k*U,      t >= U 制御される場合は現実時間とずれるが、上記の干渉を避けられる。 --> 末尾動作 (Tail Operation) フレームの最後に行われることを示す。 -> 無 (Null) 何もしない。 一番高いフレームレートを達する動作。 早速次のフレームに入るからマルチタスク製に”100%CPU”状態が行われる可能性がある。 -> 待機 (Suspend) ある期間にプログラムの実行を停止させる。 フレームレートは無動作より下がる。 100%CPU状態を避けられる。 ある時差が理想より低い場合は、待機期間を相応しく選べることによってある程度は訂正できる。 -> V-Sync 基本的にディスプレイのリフレッシュレートはゲームのフレームレートと結ばれてない。このせいで「Tearing」という現象が発生される可能性があって、対策はフレームレートをリフレッシュレートに即すこと。すなわち「V-Sync」である。 ----> 基本 (Fundamentals) ---> 時間 (Time) 時間の単位は現実の秒である。 現実時間の時間単位(分、時)も変換で使える。 フレーム0の時点は0秒であって、時点はつまりフレーム0から経った時間を示す。 ---> システムイベント (System Event) 「システムイベント」または「イベント」とは、とある時点で起こる事である。 イベント内容はその種類による。 --> イベント集合 (Event Set) システムに「イベント集合」がある。この集合にあるイベントの追加・削除が自由。 進行によって、集合にあるイベントを実行し集合から消される。 ---> システム空間 (System Space) 「システム空間」または「空間」とは、システムにある二次元で無限に広がる空間を示す。 +y                  |                  |                  | 2                  |                  |                  | 1 . (2, 1)                  |                  | ----------------------------------- +x -3   -2   -1   | 1 2 3                  |                  | -1                  |                  |   . (-3, -2)     | -2                  |                  | 二つの数値で空間にある位置を示せる。 空間の数値単位は「システム空間単位」(System Space Unit)または「空間単位」(Space Unit)と呼ばれる。 あくまで作為的な単位で、紛らわしそうな所で使う。 ---> システム体 (System Body) 「システム体」または「体」とは、システムに根本となる”物”です。 体には二つの種類、「点体」と「連続体」がある。 --> 点体 (Point Body) -> 位置 ベクトル「r」 空間にある位置。 --> 連続体 (Continuous Body) -> 位置二つ (Two Positions) ベクトル「r,s,r≠s」 異なった位置を二つ持っている。 等しく、ベクトル「r,s-r,r≠s」との表記がある。 この際はベクトル「s-r」が「体大きさ」(Body Size)または「大きさ」(Size)と呼ばれる。 -> 限界性 (Boundedness) rからsの間に連続体が存在している。 どっちの位置に限界性がある。 限界があると、体の存在がその点で止まる。 限界がないと、体の存在がその点の後にも続く。 --> 体速度 (Body Velocity) ベクトル「dr/dt=ds/dt,(d^2)r/(dt^2)=0」 一定である速度。 体は線形的な動きに限っている。 --> 体集合 (Body Set) システムに「体集合」がある。この集合に体の追加・変更・削除が自由。 進行によって、集合にある体を速度に沿って動かし、体が当たる時点で体種類による「衝突イベント」(Collision Event)または「衝突」(Collision)が行われる。 ----> 入力 (Input) ---> キーボード (Keyboard) --> キー入力 (Key Input) ゲームの基本操作でキーボードのキー入力で出来る。 キーダウンは一つのイベントを発生し、キーアップも一つのイベントを発生する。 --> 文字入力 (Character Input) 未定。 ---> ゲームパッド (Gamepad) 未定。 ---> 入力遅延 (Input Delay) 未定。 ----> グラフィック (Graphics) ---> 入力 (Input) --> ファイル形式 (File Format) PNG専用。可逆な形式であり、デファクトでもある。 ---> 出力 (Output) グラフィック出力の数値は RGBA色空間で32ビット式。 グラフィカル「点」、「線」、「三角形」、「四角形」を出力できる。 ---> テキスチャ (Texture) 未定 --> アニメーション (Animation) 未定 --> 投影図 (Projection) 3Dグラフィックの基盤であるグラフィックシステムを利用して、「正投影図」(Orthographic Projection)を採用して2Dグラフィックを表示している。 投影図で ----> 音声 (Audio) ---> 入力 (Input) --> ファイル形式 (File Format) OPUS専用。非可逆であるが、リアルタイムに合ってるらしい。 ---> 出力 (Output) ストリーム製も一発製で出力できる。 --> サンプリング周波数 (Sampling Rate) 48000Hzに限る。 --> エフェクト (Effect) リアルタイムで下記の音声エフェクトをかけれる。 -> ボリューム変更 (Volume Adjustment) ボリュームを上げたり下げたりするエフェクト。 -> パン (Panning) 左チャネルか右チャネルのボリューム調整。 -> 水内エフェクト (Underwater Effect) 未定。 ----> グラフィカル記述 (Graphical Description) グラフィック情報で記述にも使える。 ----> システム実態 (System Being) 「システム実態」または「実態」とはシステムに根本的なオブジェクトである。 ----> 応用 (Application) ---> 加速 (Acceleration) 未定 ---> Damped Movement 未定 ---> レイトレーシング (Ray Tracing) 未定 ---> 回転実態 (Rotating Being) 未定 ----> セーブ (Save) 未定 ----> リプレイ (Replay) 未定 ---> 動画・音声出力 (Video/Audio Output) 未定 ----> ネットワーキング (Networking) 未定