HSP3 ゲームのプログラミング
 ブロック・ゲーム制作 前へ 目次へ 次へ 

 (5) ブロック配置変更

 最初のブロックをすべて消去したとき、次のブロックの配置を変えて表示する処理を考える。
 2つ目のブロックの配置は「(2) ブロック描画(block12.hsp)」の配置を使用して、最初と2つ目の配置を交互に表示する。どのブロック配置を表示するかを記憶させておく変数bmenを用意する。最初は0で初期化しておく。

 最初のブロック →
  bmen = 0
 2つ目のブロック →
  bmen = 1
 最初のブロック →
  bmen = 0
 2つ目のブロック → …
  bmen = 1

 ブロック初期設定のサブルーチンに2つ目のブロックの初期設定を追加する。

*block_init
    ;ブロック初期設定
    if bmen = 0 {
        foreach bf
            bx(cnt) = (cnt \ 12) * 4 + 6    ;ブロックx座標
            by(cnt) = cnt / 12 * 2 + 4      ;ブロックy座標
            bf(cnt) = 1    ;1:あり/0:なし
        loop
    }
    if bmen = 1 {
        2つ目のブロック初期設定
    }
    return

 変数bmenが0,1交互に値が格納されるように次の式をブロック全消去のときの処理に追加する。

bmen = (bmen + 1) \ 2



課題(block64.hsp)
 ブロックを全部消去したとき、別の配置のブロックを表示するように処理を追加する。


(リスト)新しいウィンドウで開く



(6) ボールとブロックの衝突判定 2

 図のブロックの右側にブロックがあれば、ボールがaの位置で右側のブロックと衝突となり跳ね返る。しかし、右側のブロックがないとき、図のようにブロックと衝突したと判定されずにボールが進む。
 このようなとき、ボールがbの位置で衝突したと判定を追加する。bで衝突したと判定されたときaに移動するようにする。
 ブロックの角1,2,3,4から進入してきたときの衝突判定は次のようになる。

角1 … x0 = bx - 1  &  y0 = by - 1
角2 … x0 = bx - 1  &  y0 = by + 1
 → x0 = bx - 1  &  (y0 = by - 1 | y0 = by + 1)  →    
角3 … x0 = bx + 3  &  y0 = by - 1
角4 … x0 = bx + 3  &  y0 = by + 1
 → x0 = bx + 3  &  (y0 = by - 1 | y0 = by + 1)
→ (x0 = bx(cnt) - 1 | x0 = bx(cnt) + 3)  &  (y0 = by(cnt) - 1 | y0 = by(cnt) + 1)

 リストは次の通りである。

if (x0 = bx(cnt) - 1 | x0 = bx(cnt) + 3) & (y0 = by(cnt) - 1 | y0 = by(cnt) + 1) {
    dx0 = -dx0    ;方向反転
    dy0 = -dy0    ;方向反転
    bf(cnt) = 0   ;ブロックなし
    tokuten = tokuten + 10    ;得点加算
    gosub *joho   ;情報領域表示
}

課題(block65.hsp)
 ブロックの角からボールが進入してきたときの衝突判定の処理を追加する。


(リスト)新しいウィンドウで開く


 ブロック・ゲーム制作 前へ 目次へ 次へ 
2007 © Hiroshi Masuda

 

 

inserted by FC2 system