敵の配置データ(2/2)

 まとめますと、今回の処理は以下の通りです。

enemap.as

	; 敵の配置マップ

	sdim enemap,20,3,100

	; ステージ1のデータ
	enemap.0.64="5, , , , , , , , , "
      ・
      ・
      ・
	enemap.0.10=" ,1, , , , , , ,1, "
	enemap.0. 9=" , , , , , , , , , "
	enemap.0. 8=" , , , ,1, , , , , "
	enemap.0. 7=" , , , , , , , , , "
	enemap.0. 6=" , , , , , , , ,0, "
	enemap.0. 5=" , , , , , , ,0, , "
	enemap.0. 4=" , , , , , ,0, , , "
	enemap.0. 3=" , , , ,o, , , , , "
	enemap.0. 2=" ,0, , , , , , , , "
	enemap.0. 1=" , ,0, , , , , , , "
	enemap.0. 0=" , , ,0, , , , , , "

	; ステージ2のデータ
	enemap.1.64="6, , , , , , , , , "
      ・
      ・
      ・
sample18.as
	; プログラム起動時の初期設定
	#include "enemap.as"

	; 敵の出現
	if (mappnt\64=0)&(mappnt<=4096) {
		s=stageno-1
		i=mappnt/64
		itemstr=""
		repeat 10
			k=0
			str k
			strmid k,enemap.s.i,cnt*2,1
			if (k="o")|(k="b") {
				itemstr=k
				itempos=cnt
				continue
			}
			if k!" " {
				int k
				x=cnt
				repeat 10
					if enemyf.cnt=0 {
						enekind.cnt=k
						if eneclass.k=0 {
							enemyx.cnt=x*32
							enelife.cnt=3
						}
						if eneclass.k=1 {
							enemyx.cnt=x*32
							enelife.cnt=20
						}
						if eneclass.k=2 {
							enemyx.cnt=(xsize-96)/2
							enelife.cnt=300
						}
						enemyy.cnt=-32*(eneclass.k+1)
						enedir.cnt=0
						if (enemyx.cnt+(32*(eneclass.k+1)/2))
							>=(xsize/2) {
							enedir.cnt=1
						}
						enemyf.cnt=1
						enemycnt.cnt=0
						break
					}
				loop
			}
		loop
	}

	; アイテムの出現
	if (itemf=0)&(itemstr!"") {
		itemf=1
		if (itemstr="o") { ikind=0 }
		if (itemstr="b") { ikind=1 }
		itemx=itempos*32
		itemy=-32
	}

実行画面
実行画面


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

ひとくちメモ:
・データの冗長性
 今回のデータを見て「なんて冗長なデータなんだ」と思われた方もいるかもしれません。半角スペースだらけですし、","(コンマ)はなきゃないで構いません。ちなみに、無駄な部分が多いことを「冗長である」といいます。冗長であればあるほど、メモリを多く使います。
 例えば、
  " ,0, , ,2, ,0, , ,o" (形式1)
 というデータはもっとコンパクトに
  "012406o9" (形式2)
 と書けます。1番左を0番目として、種類0の敵が1番目、種類2が4番目、種類0が6番目、オプションが9番目にある、という意味です。もちろん、データ形式が違えばそれを読み取る処理も変えなければいけません。
 なぜ形式1のような冗長なデータにしているかというと、ぱっと見て敵の配置が分かりやすいからです。これならファイルを開いて、そのまま打っていけばいいですね。形式2だと、敵の配置データ作成用ツールを自作する必要があるでしょう。
 また、現在のパソコンはメモリが巨大ですから、少々冗長にしたところでたいした影響はありません。1行が20バイトで、3ステージ×100行ですから6000バイト使います。(sdim enemap,20,3,100)
 今のパソコンはメモリが64MBとか、256MBとかあるのですから、全然問題になりません。
 
・「文字が何もない」を入れる?
 ""は、長さが0の(何も含まれない)特殊な文字列です。ヌル(Null)という呼び方をするのが一般的かと思います。空文字列とも言います。「何もない」ものをどうして変数に代入できるのかと思う方がいるかもしれませんが、文字列の""は数値の0に対応するものだと考えられます。「りんごが0個ある」といえば「りんごが1個もない」状態のことですしね。
 


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