Handel-Cを用いた レトロな 「よけゲー」 の設計

Handel-Cを用いた
ちょっとレトロ な
「よけゲー」 の設計
ゲームの仕様
• プレイヤーは8×11マスをゲームパッドの操作によ
りマス単位で移動する
• 落ちてくる箱をよけながらゴール(旗)を目指す
• 箱や壁がある方向には進めない
• 箱にあたるとゲームオーバー
• ゲームオーバーになるかゴールするとリセットされる
• ライフ等はなし(1回きりのゲーム)
落ちてくる箱の制御1
• 落ちてくる箱の位置は配列に記憶
• その配列をもとに箱を表示する
<例>
Block[0] = 1;
Block[1] = 2;
Block[2] = 0;
落ちてくる箱の制御2
• 箱の位置をずらすために一定時間ごとに
Block[n] = Block[n-1];
という代入操作を行う
さらに Block[0] には乱数を代入する
乱数を代入
代入
代入
基本的な動作
プレイヤーの移動
箱の移動
入力待ち
待ち
移動先の入力
移動先に箱 or 壁がある?
YES
NO
一定時間
の経過
箱の移動
プレイヤーの移動
移動先にプレイヤーがいる?
移動先がゴール?
YES
GOAL!!
NO
YES
GAMEOVER…
NO
まとめ
苦労した点
画像の表示は1クロックごとに行わなければならな
いため、並列処理をうまく使い設計した
工夫した点
ハードウェアソースが限られているために画像を数
倍に拡大して表示し、画像に使う容量を減らした
以下質問用
乱数について
• 乱数には線形合同法を使用
• 初期値は時間関数からとってくる
• 線形合同法は下位ビットのランダム性が低い
ため、上位ビットをビット抽出して使用
<例>
Random = 1933 *Random + 34259;
Block[0] = Random[12:10];
ビット抽出
(10bit~12bit)
画像の表示
画像を0と1で表現し、配列に入れる
配列:Man_Image[Y座標 @ X座標]でアクセス