アイテム

 アイテムを出し、それを取ったらオプションが追加される、あるいはボムが増えるようにします。

 1.変数の初期設定
 2.アイテムの出現
 3.アイテムの移動
 4.自機とアイテムの当たり判定
 5.アイテムを描画

 マップ上のある地点に来たらアイテムを出します。アイテムは画面上部に現れ、スクロールと同じ速度でまっすぐ下りていき、下端に達すると消えます。自機がアイテムに当たると(アイテムを取ると)その種類に応じた効果(オプションが追加される、ボムが増える)が表れます。


 1.変数の初期設定

「ゲームスタート時の初期設定」で、オプションの個数を0個にするように修正します。
    noption=0
 アイテムが出現しているかどうかを表す変数itemfを追加します。0は「存在しない」、1は「存在する」です。
「ステージスタート時の初期設定」で、0に設定します。
    itemf=0

 2.アイテムの出現

 mappnt(現在位置)が1024、2048の時にオプション追加用アイテム、3072の時にボム追加用アイテムを出すことにします。4096でボスに到達するので、それぞれ1/4、2/4、3/4の地点です。
 変数itemx , itemyがアイテムの座標を表し、ikindがアイテムの種類を表すものとします。(item kindの略です。)0はオプション追加、1はボム追加とします。
 x座標は画面の真ん中、y座標は−32に設定することにします。
    if (itemf=0)&((mappnt=1024)|(mappnt=2048)|(mappnt=3072)) {
        itemf=1
        if (mappnt=1024)|(mappnt=2048) { ikind=0 }
        if mappnt=3072 { ikind=1 }
        itemx=(xsize-32)/2
        itemy=-32
    }
 アイテムの大きさは32×32ドットです。するとx座標は真ん中なので、(xsize-32)/2となります。

 3.アイテムの移動

 アイテムが存在したら、移動させます。y座標に2足します。画面下端に達したら消します。
    if itemf=1 {
        itemy=itemy+2
        if itemy>=ysize { itemf=0 }
    }

 4.自機とアイテムの当たり判定

 自機とアイテムの当たり判定は、自機が「通常」または「復活中」で、アイテムが「存在する」時に行います。「自機と敵、敵弾の当たり判定」では、自機の真ん中2×2ドットにしか当たり判定がないこととしましたが、アイテムは取りやすい(当たりやすい)方がいいので、32×32ドットで当たり判定を行います。
 当たっていたら、まずそのアイテムを消します。次に、その種類がオプション追加の場合はオプションの数noptionを1つ増やし、ボム追加の場合はボムの数nbombを1つ増やします。
 ただし、オプションは2個までしか増やしません。2個ある状態でオプション追加用アイテムを取ったら、スコアが500点増えることとします。
    if ((playerf=1)|(playerf=2))&(itemf=1)&(playerx<=(itemx+31))
        &((playerx+31)>=itemx)&(playery<=(itemy+31))&((playery+31)>=itemy) {
        itemf=0
        if ikind=0 {
            if noption<2 {
                noption=noption+1
            }
            else {
                score=score+500
                if score>hiscore { hiscore=score }
                if score>=oneup {
                    nplayer=nplayer+1
                    oneup=oneup+100000
                }
            }
        }
        else {
            nbomb=nbomb+1
        }
    }

 5.アイテムを描画

 絵のファイル中の、オプション追加用アイテム(O)とボム追加用アイテム(B)です。
  アイテム
 アイテムを描画する処理は以下の通りです。
    if itemf=1 {
        gdx=itemx:gdy=itemy
        if ikind=0 {
            gdox=$C0:gdoy=$20
        }
        else {
            gdox=$E0:gdoy=$20
        }
        gdw=32:gdh=32
        gosub *Graphic_Draw
    }


 まとめますと、アイテムに関する処理は以下のようになります。

	; ゲームスタート時の初期設定
	noption=0

	; ステージスタート時の初期設定
	itemf=0

	; アイテムの移動
	if itemf=1 {
		itemy=itemy+2
		if itemy>=ysize { itemf=0 }
	}

	; アイテムの出現
	if (itemf=0)&((mappnt=1024)|(mappnt=2048)|(mappnt=3072)) {
		itemf=1
		if (mappnt=1024)|(mappnt=2048) { ikind=0 }
		if mappnt=3072 { ikind=1 }
		itemx=(xsize-32)/2
		itemy=-32
	}

	; 自機とアイテムの当たり判定
	if ((playerf=1)|(playerf=2))&(itemf=1)&(playerx<=(itemx+31))&((playerx+31)>=itemx)
		&(playery<=(itemy+31))&((playery+31)>=itemy) {
		itemf=0
		if ikind=0 {
			if noption<2 {
				noption=noption+1
			}
			else {
				score=score+500
				if score>hiscore { hiscore=score }
				if score>=oneup {
					nplayer=nplayer+1
					oneup=oneup+100000
				}
			}
		}
		else {
			nbomb=nbomb+1
		}
	}

	; アイテムを描画
	if itemf=1 {
		gdx=itemx:gdy=itemy
		if ikind=0 {
			gdox=$C0:gdoy=$20
		}
		else {
			gdox=$E0:gdoy=$20
		}
		gdw=32:gdh=32
		gosub *Graphic_Draw
	}


[プログラム全体と絵をダウンロード]

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