HSP3 ゲームのプログラミング
 レース・ゲーム制作 目次へ 次へ 

 ウインドウ上のコースをキャラクタがゴールを目指して移動する。ゲームとしては、1番になるキャラクタを当てるものである。キャラクタを車にすれば「カーレース」、人にすれば「陸上競技」、馬にすれば「競馬」、船にすれば「競艇」というように、いろいろなゲームに作り替えていくことができる。

(1) 計画・概要

 円のキャラクタを8台用意して、直線コースを走らせる。
 コースの幅を20ドット、ウィンドウの右から左に走行する。キャラクタは18ドットの正方形に内接する円として、キャラクタ同士がつかないようにする。
 キャラクタの座標は配列chxにx座標、配列chyにy座標を格納する。ただし、この座標はウィンドウ上の座標とは別のものである。つまり、キャラクタはマス目を移動するイメージである。この座標(「マップ座標」と呼ぶことにする)を元に実際の座標を計算する。

xmax xmax-1     2 1 0  
                0
                1
               
                ymax-1
                ymax

 例えば、マップ座標のxmax=99(100マス)、ymax=7(8マス)とする。ウィンドウ上のx座標600から100の間を移動させるとすると、次のような計算になる。

<x座標> 移動量 = 600-100 = 500ドット
マップ座標1当たりのドット数 = 500 ÷ 100 = 5ドット
<y座標> コース幅 = 20ドット
マップ座標1当たりのドット数 = 20ドット

 マップ座標とウィンドウ上の座標の変換式は次のようになる。

ウィンドウ上のx座標 = 600 - chx × 5、 ウィンドウ上のy座標 = chy × 20

 このようにしておけば、ゲームとしてはキャラクタをマップ座標上で移動させるだけである。コースが直線でなくても変換式さえ適切に作れればどのようなコースの形でも対応できる。


 処理の概要

  1. 配列宣言、データの初期化
  2. 画面消去(color 255, 255, 255 : boxf)
  3. コース描画(なくても良い)
  4. キャラクタ描画、キャラクタ移動(chxを増やす)
  5. ゴールか?
     ゴール→おわり。 ゴールでない→2.へ戻る。

サンプル(race01.hsp)
 処理の概要に従ってプログラムする。

;race01.hsp
    screen 0, 640, 480
    ;配列宣言、データ初期化
    char_max = 8
    dim chx, char_max
    dim chy, char_max
    foreach chx
        chx(cnt) = 0
        chy(cnt) = cnt  ;コース
    loop
    repeat
        redraw 0
        color 255, 255, 255 : boxf    ;画面消去
        ;コース描画
        color 0, 0, 0
        repeat char_max + 1
            y = cnt * 20 + 10
            line 100, y, 600, y
        loop
        line 100, 10, 100, 170
        line 600, 10, 600, 170
        ;キャラクタ移動・ゴール判定
        foreach chx
            x = 600 - chx(cnt) * 5 - 20         ;x座標変換
            y = chy(cnt) * 20 + 10              ;y座標変換
            hsvcolor cnt * 23, 255, 255
            circle x + 2, y + 2, x + 18, y + 18         ;キャラクタ描画
            chx(cnt) += 1   ;移動量加算
        loop
        if chx(7) > 99 : break
        redraw 1
        ;if ゴールした : break
        await 200
    loop
    stop

実行8個のキャラクタが並んで進んでいく。

 x方向には5ドット単位で移動させるので、x座標変換の式は、マス目の数(chx)×5で良い。しかし、実際にはx座標が600の位置から100の位置に移動させるので、600, 595, 590, 585…と減らしていかなければならない。そこで、600 - マス目の数×5で計算している。式の最後の-20はキャラクタの大きさ分である。

マス目 chx 0 1 2 3     98 99
chx × 5 0 5 10 15     490 495
600 - chx × 5 600 595 590 585     110 105

 y方向はコースの幅に合わせて、マス目(chy)×20で計算している。

 移動量は1に固定しているので、8個のキャラクタが並んで進んでいく。


 レース・ゲーム制作 目次へ 次へ 
2007 © Hiroshi Masuda 

 

 

inserted by FC2 system