沢渡さん、動作確認やアドバイスありがとうございます!
そうです、問題の文前後だけで解決するという考えが甘かったです。
#defcfuncなど確認してみました。やはりエラーは出続けます。
長文になりますが私の力では無理なので助けてください!おねがいします。
#include "hsp3dish.as"
#packopt name "buster"
#packopt xsize 320 ;横サイズ
#packopt ysize 480 ;縦サイズ
;画像の準備
celload "IMG_20201021_204354.jpg",1
celdiv 1,320,480,0,0
celload "IMG_20201021_204354.jpg",2
celdiv 2,64,64,32,32
mmload "bussdora.wav",0
mmload "pichu-n.mp3",1
hi=0
*start
if hi<sc :hi=sc
;タイトル表示
redraw 0
color 0,0,0 :boxf
gosub *score
msg " ",112,216,255
redraw 1
gosub *pause
;変数の設定
bmx=3 :emx=99 ;自機弾数、敵最大数
px=160 :py=320 :pdx=0 :pdy=0
;
dim bx,bmx :dim by,bmx
dim bdx,bmx :dim bdy,bmx
dim ex,emx :dim ey,emx
dim edx,emx :dim edy,emx
dim gcn,emx :dim gx,emx :dim gy,emx
;
repeat emx :ey(cnt)=512 :loop
;メインルーチン
*main
redraw 0
pos 0,0 :celput 1,0 ;背景表示
gosub *score
if gmov>0 {gmov-
if gmov=0 :goto *start
zm=(30.0-gmov)/10+1.0 :title ""+zm
pos px,py :celput 2,3,zm,zm,(1.4+gmov)/10
goto *skip
}
stick mo,256
if mo=256 { mx=mousex :my=mousey
if dist(mx,px,my,py)<48 :pdx=mx-px :pdy=my-py
:else :gosub *myshot
px+=pdx :py+=pdy :pdx=pdx*3/4 :pdy=pdy*3/4
pos px,py :celput 2,0 ;自機表示
*skip
repeat bmx
if by(cnt)>0 { by(cnt)-=bdy(cnt) :bx(cnt)-=bdx(cnt)
pos bx(cnt),by(cnt) :celput 2,1 ;自機弾表示
loop
;スコアアップに応じて敵機数アップ
emc=sc/50+1 :if emc>emx :emc=emx
r=rnd(emc);敵機を新規配置
if ey(r)>511 { ex(r)=rnd(320) :ey(r)=-32
edx(r)=rnd(16)-8 :edy(r)=8+rnd(8)
}
repeat emc
if ey(cnt)<512 { ey(cnt)+=edy(cnt) :ex(cnt)+=edx(cnt)
pos ex(cnt),ey(cnt) :celput 2,2;敵機表示
}
;自機と敵機の当たり判定
if gmov=0 and dist(ex(cnt),px,ey(cnt),py)<48
:gmov=30 :mmplay 1
c=cnt ;自機弾と敵機の当たり判定
repeat bmx
if by(cnt)<0 :break
if dist(ex(c),bx(cnt),ey(c),by(cnt))<48 { sc+=10
:mmplay 1
gcn(c)=8 :gx(c)=ex(c) :gy(c)=ey(c) :ey(c)=512
:by(cnt)=-16 }
loop
if gcn(cnt)>0 :gcn(cnt)- :pos gx(cnt),gy(cnt)
:celput 2,3;敵爆発表示
loop
redraw 1
wait 6
goto *main
;自機弾発射
*myshot
repeat bmx
if by(cnt)<1 { bx(cnt)=px :by(cnt)=py
bdx(cnt)=(px-mx)/8 :bdy(cnt)=32
abs(bdx(cnt)/8)
mmplay 0 :break
}
loop
return
*pause
stick mo :if mo=256 :return
wait 5 :goto *pause
*score
msg "SCORE:"+sc,8,8 :msg "HISCORE:"+hi,160,8
return
;scの定義
#defcfunc sc int _score_
Score+=_score_
if(Score>HiScore):HiScore=Score
return
;moの定義
;gmovの定義
;自機移動
pos jkx * mm , jky * mm
gcopy 1, 0, 0
;キー入力
gosub *key_input
;キー入力 -----
*key_input
stick kk, 5 ;キー入力情報
if kk & 128 : end ;[Esc]
if kk & 1 : jkx = jkx - 2 ;[←]
if kk & 4 : jkx = jkx + 2 ;[→]
jkx = limit(jkx, 0, winx - 4) ;左右の壁の制限
return
;2点間の距離を返す関数の定義
#defcfunc dist int x1,int x2,int y1,int y2
x=x1-x2 :y=y1-y2 :return sqrt(x*x+y*y)
;縁取り文字表示
#deffunc msg str moj,int x3,int y3,int bc
color bc,bc,bc
repeat 9
xx=cnt\3 :yy=cnt/3
pos x3-1+xx,y3-1+yy :mes moj
loop
color 255-bc,25-bc,255-bc
pos x3,y3 :mes moj
return