コンピューターゲームは、次の無限ループです。
- 更新:ゲームの状態を1つの小さなタイムスライス(1/80秒など)進めます。
- 現在のゲームの状態をペイントします。
これらのバリエーションがあります。ゲームによっては、各ペイントの間に更新が追加されたり、異なるマシンでゲームの流れが等しくスムーズになるように変更したりできます。しかし、それは技術的な詳細です。
1秒間に50〜100回発生する更新フェーズ(そうなることが多い)は、次のことを行います。
- ゲームの物理を更新します。俳優に速度があるとしましょう。この更新により、彼が正しい方向に少し移動するはずです。また、物理エンジンを使用する場合、他のアクトまたは障害物との衝突をチェックする必要があります。
- ゲームのルールを更新します。これが物理実験ではなくゲームになります。弾丸がプレーヤーの俳優に当たったとしましょう。ゲームのルールでは、プレイヤーにXポイントのヘルスを差し引き、弾丸を消すように指示しています。
- AIの更新。時々、コンピューター制御のアクターが何をすべきかを決定する必要があります。左か右に行きますか?素敵な場所への道を見つけましょう。武器を発射します。
- 入力制御。キーボードで押されたボタンに応じて、プレーヤーアクターを更新します。
- シーングラフを更新します。これは、アニメーションを1ステップ進めたり、GUIを更新して、プレーヤーのヘルスが10ポイント減少したことを示すことができます。唯一の目的は、ゲームの外観と雰囲気を良くすることです。
どこから始めますか?
グラフィカルゲームの基本的な要件は、グラフィックをプログラムすることです。必ずウィンドウを開いて、その中にボールを描いてください。
何らかのクラスを作成できると思います。Ballクラスを作成します。次のメンバーがあります:x、y、deltaX、deltaY。すべて整数で、ピクセル単位です。次に、このループを記述します。
forever, do this {
start measure time (in milliseconds)
//physics part
add deltaX to x
add deltaY to y
if x is bigger than the screen width, assign -deltaX to deltaX
if y is bigger than the screen height, assign -deltaY to deltaY
if x is less than 0, assign -deltaX to deltaX
if y is less than 0, assign -deltaY to deltaY
//paint
paint the ball at x, y
stop measuring time, assign this to workTime
make the thread sleep for (25 - workTime) milliseconds
}
これにより、ボールがウィンドウの境界で跳ね返ります。まだゲームではなく、物理的なシミュレーションです。ボールクラス内でボールの物理更新を記述する場合、いくつかのボールを簡単に追加できます。それらをリストに保存し、フレームごとに更新してペイントします。
パドル(物理学をシミュレートし、マウスまたはキーボードで制御可能にする)と、ボールが左壁に到達するのを止めるなどのゲームの目的を追加できます。時間の経過とともにゲームがますます多くのボールを追加する場合、難易度は増加します。ゲームがあります。
なぜ(25-workTime)ミリ秒スリープするのですか?このようにすると、シミュレーションは毎秒40回の更新とペイントの一定のペースで実行されます。かなりスムーズになります。スリープ部分をスキップすると、アニメーションはぎくしゃくして100%CPUを占有します。また、ボールの速度は、ボールを実行するマシンの速度に依存します。現在、ボールの垂直速度は40 * deltaYピクセル/秒です。