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回移動するごとに爆破の画像を切り替えるようにする。実際には、次のようにする。

  1. 自玉と敵機が当たりと判定されたとき、配列tkbに3を格納する。
  2. 敵機移動の後、次の条件で処理をする。
    ・配列tkbが3であれば、爆破画像の1枚目を表示し、配列tkbから1を減じる。
    ・配列tkbが2であれば、爆破画像の2枚目を表示し、配列tkbから1を減じる。
    ・配列tkbが1であれば、爆破画像の3枚目を表示し、配列tkbから1を減じる。配列tkbが0であれば配列tkbを-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

 

 

inserted by FC2 system