ブロック崩しを作ろう

以前も書いたような気がしますが、改めてブロック崩しについて考えてみましょう。

ツクガクに来たからにはプログラミングの基本くらいは覚えて卒業したいものです。せっかく通信制高校に入って時間もありますし、ブロック崩しくらいは自力で作れるようになってほいいです。

ブロック崩し準備

ブロック崩しってどうやって作ればいいでしょうか?

生徒用サンプルプログラムのブロック崩し
  • 必要なパーツについて考えてみましょう。
  • 動きを考える。

ぱっと思い浮かぶところはそんなところでしょうか。

ブロック崩しに必要なパーツ

  • ボール
  • パドル
  • ブロック

といったところでしょうか。アイテム、スコアうんぬんはコアができてから。

動きを考える

  • ボールを動かす
  • パドルを動かす
  • ブロックの当たり判定

ボールを動かす

ボールを動かすにも、まずはボールを表示しないことには始まりませんので画面の適当な場所にボールを表示します。本当にただの黄色い(丸)です。HSPでプログラミングしましたが、ただの文字です。

pos ballX,ballY
mes"●"

としてボールを表示します。

余計なことは考えず、右に動かして端についたら戻ってくるようにしてみましょう。

ballXV=1
・・・
ballX=ballX+2*ballXV
if ballX>640-16 ballXV*-1
if ballX<0 ballXV*-1

初期設定やらループやら端折っているのでこのまま書いても動きませんが、こんなような計算式と条件をつけてあげるとボールが左右に行ったり来たりすると思います。

そしたらY座標についても書いてあげると斜めにボールが動くようになり、画面中をボールが飛び回ると思います。飛び方がニュートリノ!じゃないよ(笑)

パドルを動かす

パドルもボールと同様に、まずは表示するところから。


//パドルを描く

color 255,255,255
boxf pad_left,pad_top,pad_right,pad_bottom

初期設定でパドルの位置と大きさを決めます。boxfで描いていますが、画像でもいいし文字でも大きささえわかれば何でもいいと思います。

座標を変数で持たせたのは移動させるときにラクだからです(;^_^A

パドルが描けたら当たり判定をつけてボールが当たったら跳ね返るようにしましょう。

if pad_left < BallX and pad_right > BallX  and pad_top < BallY+16  and pad_bottom > BallY: BallYV = BallYV*-1

パドルの座標とボールの座標の関係を理解しないと描けません。

パドルを動かします。stickでもいいですがなんとなくgetkeyを使いました。深い意味はありません。

//パドルを動かす
getkey  a,'D'
	if a=1:pad_left = pad_left + 10
getkey  a,'A'
	if a=1:	pad_left = pad_left - 10

	pad_right = pad_left + 100

これでパッドでボールを追いかけてスカッシュゲームができるようになったのではないでしょうか?

ブロックの当たり判定

ブロック

まずは適当な場所に1つブロックを置いてみましょう。

パドルの当たり判定が分かったらあとは簡単です。

パドルと同様にボールがブロックに当たった時もボールが跳ね返るようにします。

跳ね返ったら消えてほしいですよね?

初期設定にフラグを立てておきます。

例えばこんな風に。

//初期設定
BlockF=1//フラグ
・・・・・
//ループ内

//ブロックの描画・・フラグが1だったら表示する
if blockF=1:boxf blockX,blockY,blockX+50,blockY+20
//当たり判定・・ボールが当たったらフラグを0にする
if blockF=1 and BallX > blockX and BallX < blockX+50  and BallY > blockY  and BallY < blockY(i)+20{
	blockF=0
	BallYV = BallYV*-1
}

ボールが当たったら当たったら消える処理は消すというより、フラグが1だったら表示するが、フラグを0にすると処理をせず表示しないことを利用します。

するとブロックのエリア内にボールが入るとボールは跳ね返り、あたかもブロックが消えたように見えます。

ブロック1つでも仕方がないので、配列を使って複数のブロックを並べるようにします。

今日は1次元配列でブロックのX座標、Y座標、ブロックのフラグをセットしました。

//初期設定
dim blockX,50
dim blockY,50
dim blockF,50

for i,0,50

//一列目のブロックの座標
	blockF(i)=1
	blockX(i)=i*60+20
	blockY(i)=20
・・・・
next

//ループ内
for i,0,50
	if blockF(i)=1{
	boxf blockX(i),	blockY(i),blockX(i)+50,blockY(i)+20
	}

この書き方は私はあんまりしたことがなかったのですが、初心者にはわかりやすいだろうと思い1次元配列で書いてみました。

X座標の配列、Y座標の配列、フラグの配列として適切な値をそれぞれfor文を使って格納します。

HSPでつくってみたブロック崩し

2次元配列で配置することも可能です。ちょっと難しく感じるかもしれませんが、頑張ってみてほしいところです。のちのち役に立つ力が身に付きます。

ここまでするのに一朝一夕でさらっとというわけにはいきません。十分、基本的な練習を積んだうえで取り組んでみてください。

タイトルとURLをコピーしました