Article #692

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.

Pongの開発 (3)

posted by sakurai on November 8, 2023 #692

ブロック図

以下にPongのデモ画面が動作するステートマシンを組み込んだブロック図を示します。

図%%.1
図692.1 Pongブロック図

これらのモジュールのうち、クロック系、デュアルポートRAMを含むグラフィクス系、1チャネルのサウンド系はほぼ流用です。新規設計はGameFSMのみであり、GameFSMとSoundFSMを連結するコマンドバッファもそのまま流用しています。 

完成画面

システムが動作している画面を示します。

図%%.2
図692.2 Pong動作画面

方向制御

パドルの縦位置はボールと同じにしてあるため、必ずボールは打ち返します。パドルでの反射は表692.1のとおり。

表692.1 2種類の乱数とボールの方向
乱数1 bcount 乱数2 dy
0 0 (45°) 0 (dx=1に対して)+1
1 (dx=1に対して)-1
1 3 (18.4°) 0 (dx=3に対して)+1
1 (dx=3に対して)-1

乱数1で傾きの逆数であるbcountを0または3とします。乱数2で方向がプラス+1かマイナスかを決定します。合わせると、bcount=0は右方向の場合速度ベクトルが(+1, +1)または(+1, -1)です。bcount=3の場合速度ベクトルが(+1, +1/3)または(+1, -1/3)です。

オリジナルゲームにはまっすぐ反射する反射もあったのですが、まっすぐ反射してもあまり面白くないので、カットしました。

上下の壁にボールが衝突するとy方向の速度dyの符号を反転させます。一方、左右のパドルに衝突するとx方向の速度であるdxの符号を反転させ、かつ上記の表により方向をランダムに変化させます。


左矢前のブログ 次のブログ右矢

Leave a Comment

Your email address will not be published.

You may use Markdown syntax. If you include an ad such as http://, it will be invalidated by our AI system.

Please enter the numbers as they are shown in the image above.