HSP3 ゲームのプログラミング | |
ブロック・ゲーム制作 |
(1) 計画
ブロック・ゲームとは、ブロック崩しである。図のように、ラケットゲームの画面にブロックを表示して、ボールでブロックを消していくゲームとする。得点は、ブロック1個につき10点とする。
○ ブロックの描画
ブロックは、@画像を用意して、gcopy命令で描画する方法、Aboxf命令で描画する方法、が考えられる。どちらの方法でも、ブロックの配置座標、ブロックの有無を情報として格納する配列が必要である。配置座標をbx,
by、有無をbfとすると次のような描画処理になる。
@gcopy Aboxf 描画 foreach bx
if bf(cnt) = 有り {
pos bx(cnt), by(cnt)
gcopy n, x, y
}
loopforeach bx
if bf(cnt) = 有り {
color rr, gg, bb
} else { なし
color 背景色
}
boxf bx(cnt), by(cnt), xsize, ysize
loop
ダウンロード block1.bmp (8KB) |
ここでは、@の方法でプログラムを作成していく。 画像ファイルが必要になるが、ブロックをいろいろとデザインできる。Aの方法でもline命令など組み合わせて可能であるが処理が面倒になる。 |
ブロックのサイズは4×2(32×16ドット)とし、横(x)方法に12個、縦(y)方向に8個の合計96個のブロックが配置できるようにする。図(1)のように有無bfに変化を付けて配置したり、図(2)のように座標yに変化を付けて配置したりすることができる。
(2) ブロック描画
(block11.hsp)
ブロックを描画する。
dim bx, 96 : dim by, 96 : dim bf, 96 buffer 1 picload "block1.bmp" screen 0 gmode 2, 32, 16 ;ブロックサイズで設定 mm = 8 ;間隔 ;ブロック初期設定 foreach bf bx(cnt) = (cnt \ 12) * 4 + 6 ;ブロックx座標 by(cnt) = cnt / 12 * 2 + 4 ;ブロックy座標 bf(cnt) = 1 ;1:あり/0:なし loop ;画面消去 color 0, 128, 0 boxf 0, 0, winx * mm - 1, winy * mm ;ゲーム領域消去 ;ブロック描画 foreach bf if bf(cnt) = 1 { pos bx(cnt), by(cnt) gcopy 1, 0, 16 } loop stop
横(x)方法に12個、縦(y)方向に8個の合計96個のブロックが描画される。
(block12.hsp)
ブロックを描画する(図(1))。
dim bx, 96 : dim by, 96 : dim bf, 96 buffer 1 picload "block1.bmp" screen 0 gmode 2, 32, 16 ;ブロックサイズで設定 mm = 8 ;間隔 ;ブロック初期設定 foreach bf bx(cnt) = (cnt \ 12) * 4 + 6 ;ブロックx座標 by(cnt) = cnt / 12 * 2 + 4 ;ブロックy座標 loop repeat 8 lp = cnt if lp \ 3 = 0 { repeat 12 np = lp * 12 + cnt if cnt \ 2 = 0 : bf(np) = 1 : else : bf(np) = 0 ;1:あり/0:なし loop } if lp \ 3 = 1 { repeat 12 np = lp * 12 + cnt if cnt \ 2 = 1 : bf(np) = 1 : else : bf(np) = 0 ;1:あり/0:なし loop } if lp \ 3 = 2 { repeat 12 np = lp * 12 + cnt bf(np) = 0 ;1:あり/0:なし loop } loop ;画面消去 color 0, 128, 0 boxf 0, 0, winx * mm - 1, winy * mm ;ゲーム領域消去 ;ブロック描画 foreach bf if bf(cnt) = 1 { pos bx(cnt), by(cnt) gcopy 1, 0, 16 } loop stop
(block13.hsp)
ブロックを描画する(図(2))。
dim bx, 96 : dim by, 96 : dim bf, 96 buffer 1 picload "block1.bmp" screen 0 gmode 2, 32, 16 ;ブロックサイズで設定 mm = 8 ;間隔 ;ブロック初期設定 foreach bf bx(cnt) = (cnt \ 12) * 4 + 6 ;ブロックx座標 by(cnt) = cnt / 12 * 2 + (cnt \ 2) + 4 ;ブロックy座標 bf(cnt) = 1 ;1:あり/0:なし loop ;画面消去 color 0, 128, 0 boxf 0, 0, winx * mm - 1, winy * mm ;ゲーム領域消去 ;ブロック描画 foreach bf if bf(cnt) = 1 { pos bx(cnt), by(cnt) gcopy 1, 0, 16 } loop stop
いろいろなブロック配置のプログラムを作成してみよ。
(block61.hsp)
ラケットのプログラムracket96.hspにブロックの描画block11.hspを追する。
ブロック・ゲーム制作 | |
2007 © Hiroshi Masuda |