HSP3 ゲームのプログラミング | |
シューティング・ゲーム制作 |
(7) 得点等情報表示
ゲームタイトル、スコアー、残り自機などのゲームに関する情報は、表示領域(画面右側)に表示する。
No. 内容 表示するタイミング サブルーチン名 1 ゲームタイトル ゲームの始めに一度だけ、変化なし title_disp 2 スコアー 敵機爆破ごとに変化する score_disp 3 ハイスコアー・リスト ゲームオーパ時 (後で作成) 4 自機残数 自機爆破ごとに変化する jiki_disp
表のように、表示するタイミングがそれぞれ違う。それぞれについて表示するサブルーチンを作成することにする。
ゲームタイトルの表示のサブルーチン
;タイトル表示 -----
*title_disp
xcls1 ;表示領域全消去
font "MS ゴシック", 18, 3 ;フォント設定
pos (winx + 1) * mm + 2, 1 * mm + 2
color 100, 100, 0
mes "シューティング・ゲーム" ;影
pos (winx + 1) * mm, 1 * mm
color 200, 200, 0
mes "シューティング・ゲーム" ;本体
return
ゲームの始めに一度だけ表示するだけなので、表示領域全体をxcls1(#defineで定義した命令)で消去している。コピーモード設定の後にもxcls1があるが不要であるので削除し、次の命令を追加する。
title "シューティング・ゲーム" ;タイトルバー設定
同じ文字列「シューティング・ゲーム」を二度表示している。一つ目でx方向、y方向ともに2ドットずらして影として表示している。
タイトル表示のサブルーチンは、ゲームの始めで呼び出す。
自機の残り機数の表示のサブルーチン
自機の残りは変数jikiに格納されている。
;自機残り表示 -----
*jiki_disp
if jiki <= 0 : return ;残り0なら戻る
color 0, 30, 50 ;表示領域の色
boxf (winx + 4) * mm, 55 * mm ;自機消去
repeat jiki - 1
pos (winx + 4 + cnt * 4) * mm, 55 * mm
gcopy 1, 0, 0
loop
return
自機の残りを数字で表示するのではなく、画像で表示している。
残り表示のサブルーチンは、ゲームの始めと自機が爆破するごとに呼び出す。
スコアーの表示のサブルーチン
まだ、スコアーをカウントしていないので、その処理を追加する必要がある。
スコアーは変数tokutenにカウントしていくことにする。敵機1機につき( )点とする。
;得点表示 -----
*score_disp
color 0, 30, 50 ;表示領域の色
boxf (winx + 2) * mm, 5 * mm, (winx + 28) * mm, 7 * mm ;スコアー消去
font "MS ゴシック", 18, 1 ;フォント設定
color 255, 0, 255 ;スコアーの文字色
pos (winx + 2) * mm, 5 * mm
mes strf("スコアー:%06d", tokuten)
return
スコアー表示のサブルーチンは、ゲームの始めと敵機が爆破するごとに呼び出す。
strf関数の%06dは、変数tokutenの値を0付き(0)、6けた(6)、整数(d)にする書式指定である。書式の指定はC言語printf関数と同じである。
(shoot66.hsp)
「ゲームタイトル表示」、「自機残数表示」、「スコアー表示」の処理を追加する。
・それぞれのサブルーチン呼び出しを適切な位置に追加する。
gosub *title_disp ;タイトル表示 … 1カ所
gosub *jiki_disp ;自機残り表示 … 2カ所
gosub *score_disp ;得点表示 … 2カ所
・スコアーカウントは、自玉で敵機が爆破したときに行う。自機と敵機が爆破したときはカウントしない。
tokuten = toukuten + 10 ;得点加算
(8) 自玉と敵機の衝突判定2(爆破アニメーション)
ここでは判定ではなく、自玉が衝突したとき自機と同じように敵機が爆破するようにする。
自機の爆破アニメーションは、繰り返しと時間待ち(wait)で画像の切り替えを調整して行ったが、爆破アニメーションの間は、敵機や自玉がすべて停止している。したがって、敵機の爆破アニメーションでは同じ処理は使えない。
敵機が1回移動するごとに爆破の画像を切り替えるようにする。実際には、次のようにする。
;敵機爆破アニメーション
if tkb(cnt) >= 1 {
pos tkx(cnt) * mm , tky(cnt) * mm
gcopy 1, (4 - tkb(cnt)) * 32, 32
tkb(cnt) = tkb(cnt) - 1
if tkb(cnt) = 0 : tkb(cnt) = -1
}
(shoot67.hsp)
自玉が敵機に当たったとき爆破アニメーションを表示する処理を追加する。
(9) ハイスコアー
得点のベスト5を記録していき、情報表示領域に得点と名前を表示するようにする。
詳しくは、「ブロック・ゲーム制作 (7) ハイスコアー」を参照にすること。
ハイスコアーの表示処理を次に示す。
;ハイスコアー表示 -----
*hiscr_disp
color 0, 30, 50 ;表示領域の色
boxf (winx + 2) * mm, 12 * mm, (winx + 28) * mm, 23 * mm ;ハイスコアー表示領域消去
font "MS ゴシック", 18, 1 ;フォント設定
color 255, 255, 255 ;ハイスコアーの文字色
pos (winx + 2) * mm, 12 * mm
repeat length(scr) - 1
mes strf("第%d位 ", cnt + 1) + strf("%06d ", scr(cnt)) + namae(cnt)
loop
return
(shoot68.hsp)
ハイスコアーの処理を追加する。
シューティング・ゲーム制作 | |
2007 © Hiroshi Masuda |