IMPLEMENTATION NOTES / C++ / SDL2
Pong Game (Multi-ball)
C++とSDL2で実装したクラシックPong。Sanjay Madhav著「Game Programming in C++」を参考に、マルチボール対応を追加。
IMPLEMENTATION / EQUATIONS & SOURCE
入力から出力まで、コードで追う。
各節は「何を計算するか → 数式 → 実際のコード」の順に読めます。コードは動作する実装からの抜粋で、単独実行用ではありません。省略した周辺処理は参照元で確認できます。
01 / 時間刻みの移動とパドル反射
各ボールを配列で管理し、位置へ速度×deltaTimeを足します。フレーム間隔は最大0.05秒に制限。パドル中心とのy距離とx領域で接触を判定し、x速度の符号を反転します。パドル面の手前へ位置を戻す処理はないため、連続フレームでの再反転や高速時のすり抜けは改善の余地があります。
pnext = p + vΔt
|paddley−bally| ≤ paddleHeight/2
vx ← −vx [パドル接触 / paddle contact] Ball& ball = mBalls[i];
ball.pos.x += ball.vel.x * deltaTime;
ball.pos.y += ball.vel.y * deltaTime;
// 左パドルとの衝突判定
float diff1 = fabs(mPaddlePos.y - ball.pos.y);
if (diff1 <= paddleH / 2.0f && ball.pos.x <= (25.0f + thickness) &&
ball.pos.x > 0.0f) {
ball.vel.x *= -1.0f;
}SOURCE / SCOPE
実装の読み方。
各コード抜粋はリンク先の固定コミットから取得しています。数式は該当処理を説明するための表記です。性能や品質の数値は、掲載した計算例を除き新しい実測を行っていません。ビルド手順と依存環境は各リポジトリを参照してください。
リポジトリへ ↗