8 |
Pongの開発 (3) |
ブロック図
以下にPongのデモ画面が動作するステートマシンを組み込んだブロック図を示します。
これらのモジュールのうち、クロック系、デュアルポートRAMを含むグラフィクス系、1チャネルのサウンド系はほぼ流用です。新規設計はGameFSMのみであり、GameFSMとSoundFSMを連結するコマンドバッファもそのまま流用しています。
完成画面
システムが動作している画面を示します。
方向制御
パドルの縦位置はボールと同じにしてあるため、必ずボールは打ち返します。パドルでの反射は表692.1のとおり。
乱数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の符号を反転させ、かつ上記の表により方向をランダムに変化させます。