STGをやってみた
んで、やってみた。
仕様
素材を用意してないので、文字列スプライトで代用。「@」が自機、「●」が敵。自弾は「■」で。
自機の大きさは見かけに関係なく1ドットを想定している。実は自分と敵との接触判定を入れてないから意味がないんだが。
敵は逆に「●」にもかかわらず24ドット四方の正方形の判定を持っていて、自弾も同様。
まあ、暇だったらやるだけやってみて。
敵の動き方のアルゴリズムがタコなので、自機の手前で止まってしまうのはご愛嬌。
スクリプト
*define numalias x,100 numalias y,101 numalias sp,102 numalias on,103 numalias status,104 for %0 = 100 to 200 dim ?%0[100] next defsub abs game *start saveoff ; グラフィックの設定 lsph 0,":s/32,32,0;#FFFFFF@",0,0 lsph 1,":s/32,32,0;#FFFFFF■",0,0 lsph 2,":s/32,32,0;#FFFFFF●",0,0 lsph 3,":s/32,32,0;#FFFFFF*",0,0 lsph 4,":s/32,32,0;#FFFFFF・",0,0 ; 自分の設定 mov ?x[0],320 mov ?y[0],320 mov ?on[0],1 mov ?sp[0],0 *main *main_my ; 自分の位置を決定 getmousepos %0,%1 mov ?x[0],?x[0]+(%0-?x[0])/5 mov ?y[0],?y[0]+(%1-?y[0])/5 ; 射撃中かどうか決定 isdown %0 if %0=0 goto *main_brid_move mov %50,0 ; 弾番号 *main_brid inc %50 if %50>50 goto *main_brid_move if ?on[%50]=1 goto *main_brid mov ?on[%50],1 mov ?x[%50],?x[0] mov ?y[%50],?y[0] mov ?sp[%50],1 ; 弾の移動 *main_brid_move for %50=1 to 50 if ?on[%50]=0 goto *main_brid_move_next mov ?y[%50],?y[%50]-32 if ?y[%50]<0 mov ?on[%50],0 *main_brid_move_next next *main_enemy ; 敵の発生 for %50=51 to 100 if ?on[%50]=1 goto *main_enemy_next rnd2 %0,1,100 if %0>1 goto *main_enemy_next mov ?on[%50],1 mov ?sp[%50],2 rnd2 %0,0,639 mov ?x[%50],%0 mov ?y[%50],0 *main_enemy_next next ; 敵の移動 *main_enemy_move for %50=51 to 100 if ?on[%50]=0 goto *main_enemy_move_next mov ?x[%50],?x[%50]+(?x[0]-?x[%50])/30 mov ?y[%50],?y[%50]+(?y[0]-?y[%50])/30 *main_enemy_move_next next ; 自分の弾と敵の接触判定 *main_brid_enemy for %50=1 to 50 if ?on[%50]=0 goto *main_brid_enemy_1 for %51 = 51 to 100 if ?on[%51]=0 goto *main_brid_enemy_2 abs %0,?x[%50]-?x[%51] if %0>32 goto *main_brid_enemy_2 abs %0,?y[%50]-?y[%51] if %0>32 goto *main_brid_enemy_2 mov ?on[%50],0 mov ?on[%51],0 break *main_brid_enemy_2 next *main_brid_enemy_1 next ; 全体の表示 *main_print drawclear for %50=0 to 100 if ?on[%50]=0 goto *main_print_next drawsp2 ?sp[%50],0,255,?x[%50],?y[%50],100,100,0 *main_print_next next draw goto *main *abs getparam i%150,%151 if %151<0 mul %151,(-1) mov %%150,%151 return