ボム(2/2)

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

 自機が爆発して、復活する時にボムの個数を3発に戻します。「自機爆発中の処理」に1行追加します。
    ; 自機爆発中の処理
    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
                nbomb=3 ←ここです。
            }
        }
    }

 7.ボム爆発の描画

 絵のファイルに爆発パターンと、残り数表示用の絵を追加しました。
  ボムの絵
 敵全体にダメージを与えるといっても、画面中を爆煙で埋め尽くすわけではありません。あくまでもそういう雰囲気を出すだけです。そこで、位置をランダムに決めた10個の爆煙を描き、アニメーションさせる、ということを4回繰り返すことにします。すると、bombcntが15の倍数の時に位置を決めなおせばよいということになります。
    if bombcnt!-1 {
        if bombcnt\15=0 {
            repeat 10
                rnd bombx.cnt,xsize-64
                rnd bomby.cnt,ysize-64
            loop
        }
        repeat 10
            gdx=bombx.cnt:gdy=bomby.cnt
            i=bombcnt\15
            if i<5 { gdox=$140 }
            if (i>=5)&(i<10) { gdox=$180 }
            if i>=10 { gdox=$1C0 }
            gdoy=$C0
            gdw=64:gdh=64
            gosub *Graphic_Draw
        loop
    }

 8.ボム残り数表示

 nbombの数だけ小さい爆弾を描きます。左下隅に描くことにします。
    repeat nbomb
        gdx=cnt*16:gdy=ysize-16
        gdox=$70:gdoy=$10
        gdw=16:gdh=16
        gosub *Graphic_Draw
    loop
 nbombが0の時、この処理は行われません。


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

	; プログラム起動時の初期設定

	; ボムの変数宣言
	dim bombx,10:dim bomby,10


	; ゲームスタート時の初期設定
	nbomb=3

	; ステージスタート時の初期設定
	bombcnt=-1

	; ボム爆発中の処理
	if bombcnt!-1 {
		repeat 100
			eshotf.cnt=0
		loop
		bombcnt=bombcnt+1
		if bombcnt=60 { bombcnt=-1 }
	}

	; ボムを爆発させる
	if ((playerf=1)|(playerf=2))&(pskey=0)&(skey=1)&(nbomb>0)&(bombcnt=-1) {
		nbomb=nbomb-1
		bombcnt=0
	}

	; ボムが敵にダメージを与える処理
	if bombcnt!-1 {
		repeat 10
			if (enemyf.cnt=1)|(enemyf.cnt=2) {
				enemyno=cnt
				gosub *Enemy_Dmg
			}
		loop
	}

	; 自機爆発中の処理
	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
				nbomb=3
			}
		}
	}

	; ボム爆発の描画
	if bombcnt!-1 {
		if bombcnt\15=0 {
			repeat 10
				rnd bombx.cnt,xsize-64
				rnd bomby.cnt,ysize-64
			loop
		}
		repeat 10
			gdx=bombx.cnt:gdy=bomby.cnt
			i=bombcnt\15
			if i<5 { gdox=$140 }
			if (i>=5)&(i<10) { gdox=$180 }
			if i>=10 { gdox=$1C0 }
			gdoy=$C0
			gdw=64:gdh=64
			gosub *Graphic_Draw
		loop
	}

	; ボム残り数表示
	repeat nbomb
		gdx=cnt*16:gdy=ysize-16
		gdox=$70:gdoy=$10
		gdw=16:gdh=16
		gosub *Graphic_Draw
	loop

	; キー、ジョイパッドの入力
*In_Key
	pckey=ckey
	pskey=skey
	pukey=ukey
	pdkey=dkey
	plkey=lkey
	prkey=rkey

	ckey=0
	skey=0
	ukey=0
	dkey=0
	lkey=0
	rkey=0

	digetkeystate key,0
	if key&256!0 { ckey=1 }
	if key&1!0 { ukey=1 }
	if key&2!0 { dkey=1 }
	if key&4!0 { lkey=1 }
	if key&8!0 { rkey=1 }

	digetkeystate key,1
	if key&16777216!0 { ukey=1 }
	if key&2!0 { dkey=1 }
	if key&64!0 { lkey=1 }
	if key&1048576!0 { rkey=1 }

	digetkeystate key,3
	if key&(1<<19)!0 { skey=1 }

	if njoy>0 {
		digetjoystate key,0
		if key&16!0 { ckey=1 }
		if key&32!0 { skey=1 }
		if key&1!0 { ukey=1 }
		if key&2!0 { dkey=1 }
		if key&4!0 { lkey=1 }
		if key&8!0 { rkey=1 }
	}

	return

実行画面
実行画面


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

ひとくちメモ:
・ボタンの割り当て
 ボムボタンのすぐ近くにポーズボタンや、強制終了ボタンを配置しているゲームを時々見かけますが、私にはあまりいい事とは思えません。ボムを発射しようとして誤ってそのボタンにさわってしまうことがあるからです。ポーズならまだいいですが、いきなり強制終了されると唖然としてしまいますね。
 ただ、これは人によって考え方が違うと思います。その作者さんの考え方も分かるのです。ポーズをかけようとしてキーボードに手を伸ばしたら、その間にやられちゃった、というふうになったらむかつくじゃないかと。ポーズボタンもジョイパッドにあった方がいいじゃないかと。
 そういう場合、ゲームをする人がボタンの配置を変更できるようにすると親切ですね。
 


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