2015年4月15日水曜日

1chipMSX改でブロック崩しをつくる プログラムの作り方 高速化 ブロック崩しの先には(謎)

 「こんにちわマイコン」(すがやみつる)のマンガでスカッシュゲームの
プログラムを作るという内容を何度も見た記憶があります。
最初にスカッシュゲームを完成させてブロック崩しを作ってみました。
 最初に壁判定をして、後でブロック判定を加えてみました。



画面はクラッシックなイメージで作りました!
SCREEN5で作っているので、もっとブロックをカラフルにすることもできます。
まず、POINT関数で灰色(14)のボールの軌跡を黒にしてボールが動くように
しています。バーを速く動かすにはX=X+3というふうに3ドットごとの移動に
します。そして、バーが動いていても、止まっている時も必ず
ボールの1ドット移動処理を加えながら、POINT関数の色を拾っていきます。
これを繰り返していきます。

次に衝突処理です。POINT関数からバーの白(15)になったら、IFで分岐して


 記憶ではHOというのが玉の向きの変数にするという場面が印象深かったので、
X=+1、Y=+1を1、X=-1、Y=+1を2というふうにして4方向を
1,2,3,4と返値を出して、玉を跳ね返す処理を作ります。壁(3?)も同様です。
 これでスカッシュができます。

次はブロック作成です。画面作成で壁枠を表示したところにブロックを加えていきます。
まず、赤のブロックの左上座標を設定します。次に赤の左のブロックの左上までの
ステップ値を出します。BOXはこのステップ値-1でメッシュのようになります。
例えばX=2、Y=10でステップ値を8とすると*8で0、8、16、24...となり
xは0+2、8+2、16+2、24+2というふうになりますね。
C=8で赤を塗りつぶします。1段目が終わればY=Y+10というふうに
2段目に移動させます。今回はまだブロックをパターン化していません。
ただブロックを並べただけです。

このブロックは使用している15,3、14以外の色を使っています。 次は判定です。
赤(8)のブロックと黄色(10)のブロックと深い緑(12)のブロックの場合は
PAINTで塗りつぶす処理をします。そして、ボールの方向を変えるのですが、
今のところは上下の反転は正常で、左右の反転の不具合です。これはブロックの向きを
出して判定することにしています。

というわけで、ゲームはできるけど動きが変だよ~程度までできました。(パチパチ)
1日後…
ブロック判定を直してできあがりました。何度もプレイしているのですが、
ボールの動きが遅いですね。ここで終わるわけにはいきません。


では3倍速に高速化テクニックをやってみます。
実は1ドットずつボールを移動しているので、遅くなります。これを3ドットずつ移動させれば
どうでしょうか?3倍速になると思いませんか?

そこで、全ての1の数値を3に変えて、バーと壁を3倍太くします。
これで、判定は正常になります。さらにバーの速度を6倍速に上げます。
実際は壁の中で判定^^になってしまいますが、そんなに違和感がありません。
 MSX2で動作するプログラムになっているので、turboRで動作させると
超高速になりゲームにならないかもしれません(>_<)。改の高速では何とか遊べます。

1chipMSXを楽しもう:http://www.geocities.jp/fullmsx2/enjoy-1chipmsx.html

でも、ブロック崩しができても、まだ途中の段階です。




0 件のコメント:

コメントを投稿