自機のパワーアップ(1/2)

 1.変数の宣言、初期設定
 2.オプションの移動
 3.オプションを描画
 4.自機爆発中の処理を修正する
 5.自機弾に関する処理を修正する

 一口に自機のパワーアップといっても、いろいろな種類がありますね。

 等々。
 このゲームでは、自機の周囲を回るオプションが2個までつくことにします。オプションは自機と同じように弾を撃ちます。自機が爆発するとオプションは0個になります。
  オプション


 1.変数の宣言、初期設定

 オプションからも自機と同じように弾を出したいのですから、弾に関する配列変数shotx,shoty,shotfが3組あればよいという事になります。そこで、これらを1次元配列から2次元配列に修正します。
    dim shotx,3,4
    dim shoty,3,4
    dim shotf,3,4
 shotx .0 .n (n=0〜3)が自機用、shotx .1 .nが1個めのオプション用、shotx .2 .nが2個めのオプション用です。shoty,shotfについても同様です。

 オプションの座標の配列変数を宣言します。
    dim optionx,2:dim optiony,2
 以上は「プログラム起動時の初期設定」で行います。

「ゲームスタート時の初期設定」で、オプションの個数を設定します。
    noption=2
 本当は最初は0個で、アイテムを取ると1個増えるようにしたいのですが、アイテムの処理をまだ作っていないので、とりあえず2個にしておきます。

「ステージスタート時の初期設定」で、以下を行います。
 自機弾の存在フラグを0に設定する処理を修正します。2次元配列になったので、次のようになります。
    repeat 3
        i=cnt
        repeat 4
            shotf.i.cnt=0
        loop
    loop
 オプション用のカウンターに0を代入します。
    optcnt=0

 2.オプションの移動

 オプションの個数に応じた移動処理を行います。

  オプションの座標

 すると、「オプションの移動」処理は、以下のようになります。
    if (playerf=1)|(playerf=2) {
        repeat noption
            i=(-(optcnt*4)+(128*cnt))&255
            optionx.cnt=playerx+(vcos.i*48>>8)
            optiony.cnt=playery+(vsin.i*48>>8)
        loop
    }
    optcnt=optcnt+1
 この処理は、自機の状態が「通常」または「復活中」の場合に行います。やられたらオプションを失うのであれば、復活中の時はやらなくていいんじゃないの? と思う方がいるかもしれませんが、復活している最中にアイテムを取ることはあり得ます。
 repeat文の引数が0である時、repeatとloopの間にある処理は行われません。ですから、オプションが0個である時、この処理は行われません。
 iはオプションの角度です。1個めの角度は、-(optcnt*4)で求まります。2個めの角度は、それに128を足した値です。"&255"は以前説明した通り、角度を0〜255の範囲に収めるためのものです。
 自機の中心の座標は、playerx,playeryそれぞれに16を足した値です。オプションの中心の座標も同様です。
 半径が48ドットですから、optionxは(playerx+16)+(vcos.i*48>>8)-16となります。つまりplayerx+(vcos.i*48>>8)です。vcos.iは小数部8ビットを含んだ値ですから、整数にするには8ビット右にシフトする必要があります。すると"vcos.i>>8*48"と書いた方が分かりやすいように感じるかもしれませんが、これだと">>8"を行った時点で小数部が切り捨てられてしまいますので、誤差が大きくなります。"*48"を先にやった方が、精度が高いです。(といいますか、"vcos.i>>8*48"の計算結果は、0か48にしかなりません。)
 optionyについても同様です。

 3.オプションを描画

 絵のファイル中の、オプションの座標です。
  オプション
 オプションを描画する処理は以下の通りです。
    if (playerf=1)|(playerf=2) {
        repeat noption
            gdx=optionx.cnt:gdy=optiony.cnt
            gdox=$E0:gdoy=0
            gdw=32:gdh=32
            gosub *Graphic_Draw
        loop
    }

 4.自機爆発中の処理を修正する

 自機がやられたら、オプションの個数を0にするよう、命令を追加します。
    ; 自機爆発中の処理
    if playerf=3 {
        peplcnt=peplcnt+1
        if peplcnt=100 {
            noption=0 ←ここです。
            nplayer=nplayer-1
            if nplayer=0 {
                playerf=0
                govercnt=0
            }
            else {
                playerf=2
                revcnt=0
                playerx=xsize/2-16
                playery=ysize-64
            }
        }
    }


[目次へ][前へ][次へ] inserted by FC2 system