敵弾の処理を改良する(3/3)

 まとめますと、今回の処理は以下のようになります。
shotdata.as
	; 敵の弾のデータ
	

	; 動きのパターン
	dim batangle,20,64
	dim dbatangle,20
	dim nbat,20
	dim nbatshot,20
	dim batdir,20
	dim btwtime,20
	dim afttime,20
	dim shotspeed,20

	; パターン0 自機に向けて単発
	batangle.0.0=0
	dbatangle.0=0
	nbat.0=1
	nbatshot.0=1
	batdir.0=1
	btwtime.0=0
	afttime.0=64
	shotspeed.0=5

	; パターン1 真下に3wayを単発
      ・
      ・
      ・
enedata2.as
	; 敵のデータ
	

	; 弾のパターン
	dim shotpat,8,4
	dim bfrtime,8

	; 敵0 ザコ 茶
	shotpat.0.0=0
	shotpat.0.1=-1
	bfrtime.0=8

	; 敵1 ザコ 紫
      ・
      ・
      ・
sample17.as
	; プログラム起動時の初期設定
	#include "enedata2.as"
	#include "shotdata.as"

	; 敵の変数宣言
	dim fstx,10:dim fsty,10
	dim fstangle,10

	; 敵弾の出現
	repeat 10
		k=enekind.cnt
		l=32*(eneclass.k+1)
		if ((enemyf.cnt=1)|(enemyf.cnt=2))&(enemyx.cnt>=0)&(enemyx.cnt<=(xsize-l))
			&(enemyy.cnt>=0)&(enemyy.cnt<=(ysize-l)) {
			n=cnt
			f=0
			i=0
			s=bfrtime.k
			if enemycnt.n<s { continue }
			repeat
				p=shotpat.k.i
				repeat nbatshot.p
					if enemycnt.n=s {
						f=1
						j=cnt
						break
					}
					if enemycnt.n<s {
						f=2
						break
					}
					if cnt!(nbatshot.p-1) { s=s+btwtime.p }
				loop
				if f!0 { break }
				s=s+afttime.p
				i=i+1
				if shotpat.k.i=-1 { i=0 }
				if shotpat.k.i=-2 { break }
			loop
			if f!1 { continue }
			if j=0 {
				fstx.n=enemyx.n+((l-8)/2)
				fsty.n=enemyy.n+((l-8)/2)
				if batdir.p=0 {
					fstangle.n=64
				}
				else {
					ematan r,playerx+12-fstx.n,playery+12-fsty.n
					fstangle.n=(192-r)&255
				}
			}
			m=0
			repeat 100
				if (eshotf.cnt=0)&(m<nbat.p) {
					eshotf.cnt=1
					eshotx.cnt=fstx.n
					eshoty.cnt=fsty.n
					smeshotx.cnt=eshotx.cnt<<8
					smeshoty.cnt=eshoty.cnt<<8
					r=(fstangle.n+batangle.p.m+(dbatangle.p*j))&255
					smeshotdx.cnt=shotspeed.p*vcos.r
					smeshotdy.cnt=shotspeed.p*vsin.r
					m=m+1
				}
				if m=nbat.p { break }
			loop
		}
	loop

実行画面
敵弾の改良


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


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