← 作品一覧

IMPLEMENTATION NOTES / C++ / SDL2

Pong Game (Multi-ball)

C++とSDL2で実装したクラシックPong。Sanjay Madhav著「Game Programming in C++」を参考に、マルチボール対応を追加。

C++SDL2

IMPLEMENTATION / EQUATIONS & SOURCE

入力から出力まで、コードで追う。

各節は「何を計算するか → 数式 → 実際のコード」の順に読めます。コードは動作する実装からの抜粋で、単独実行用ではありません。省略した周辺処理は参照元で確認できます。

01 / 時間刻みの移動とパドル反射

各ボールを配列で管理し、位置へ速度×deltaTimeを足します。フレーム間隔は最大0.05秒に制限。パドル中心とのy距離とx領域で接触を判定し、x速度の符号を反転します。パドル面の手前へ位置を戻す処理はないため、連続フレームでの再反転や高速時のすり抜けは改善の余地があります。

計算式
pnext = p + vΔt
|paddley−bally| ≤ paddleHeight/2
vx ← −vx  [パドル接触 / paddle contact]
src/game.cpp : 140COMMIT ab6d7c3
        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;
        }
該当箇所をGitHubで読む ↗

SOURCE / SCOPE

実装の読み方。

各コード抜粋はリンク先の固定コミットから取得しています。数式は該当処理を説明するための表記です。性能や品質の数値は、掲載した計算例を除き新しい実測を行っていません。ビルド手順と依存環境は各リポジトリを参照してください。

リポジトリへ ↗