acsamp.bas 解説

最適化でプログラムを短くしているため内容はやや複雑になっています。

全体の構成

初期化

ループ部
表示 put
判定 hit
移動 move

キャラ追加 cmake
キャラ削除 ckill
各アルゴリズム algo1:~algo4:


256個のスプライトの割り当てを決めておきます。(110行注釈)
自分キャラ0 自分弾1-3 敵キャラ4-19 敵弾20-35 爆発36-43

初期化

100 'action sample.
110 cls 3:'"M0 L1-3 E4-19 B20-35 D36-43"

120 screen 0,0,1,1:priority "TSBG"  スプライトとBG画面を表示ON
130 init"kb:3"  キーはバーチャルPADモード
140 dim cx(64),cy(64),cmx(64),cmy(64),cpt(64),cvt(64),cag(64),cdt(64)
各キャラのxy座標,xy移動量,キャラパターンcpt,残り耐久度cvt,アルゴリズム種cag,データcdt

150 dim rd(10)  このrdは各キャラ移動を一括して処理する時に使います(移動の項目で説明)< br>160lc=0:ec=3:bc=19:dc=35   _cは各キャラ数のカウンタです 各キャラ開始値-1をセット
170rd(0)=lc:rd(2)=ec:rd(4)=bc:rd(6)=dc:rd(8)=43   rdの偶数には上の開始値-1を入れておきます

180mx=128:my=128初期位置 :mpt=8:mvt=8バイタリティ :md=-1左右向き :rv=0表示反転フラグ :ft=44全体アイテムの数
190 sz= min(size(0),size(1))\256:rangesz,1,4   画面サイズに応じて拡大率szを決定します
200 gload "dg1.png",1   バッファにグラフィックデータを読み込みます

210 bg_scale 4,4   BGスケールは4x4画面の構成
220 bg_view (size(0)-256*sz)\2,0,256,256,sz  256x256を基本フィールド視覚サイズにします
230 bg_load "dm1.dat"  エディタで予め作ったBGデータを読み込みます
240 bg_border 2   BGの境界は2、ここが上下移動の梯子のBGチップになります
250 'opengl on  openglモードの時はこれをONにするだけです
260 bg_scene 0,0   最初のBGマップ表示位置0,0

スプライトパターン定義  dg1.pngの画像の並びにそってスプライトパターンを定義します
270 for i=0 to 7:sp_def i,(80+i*16,0),16,16:next
280 for i=0 to 12:sp_def i+8,(i*16,16),16,16:next

衝突判定割り当て
290 sp_target 0,ec+1,dc  自分キャラと敵キャラ&敵弾を設定
300 sp_target 1,ec+1,bc:sp_target 2,ec+1,bc:sp_target 3,ec+1,bc  自分弾3つと敵キャラを設定

マージン(余白)定義 実際の表示スプライトより衝突範囲は小さいのでその余白ピクセル2を設定します
310 sp_margin 0,2
320 sp_on 0,1   自分キャラのスプライトをONにしておく
330 for i=4 to 35: sp_margin i,2:next  敵キャラ、敵弾のマージン設定

340 sp_put 0,(mx,my),mpt,rv:aa=0   自分キャラのスプライトの前置き表示と使用変数割り当て
350 if dir$("acbgm1.ogg")<>"" then play ,,"acbgm1.ogg"  音楽ファイルあるなら演奏
360 '