; ;画面スクロールのサンプルプログラム ;全体マップの端に行くと某アクションゲームみたいに端っこに自分が移動します ;ESCで終了 ; ; *hajime ;初期設定部 title "test" cls 4 randomize buffer 1,,,1:picload "hai.bmp" buffer 2,,,1:picload "char.bmp" screen 0,640,480,1 palcopy 1 wait 20 wa=20 sscx=10 hanx=250 :hany=240 font "MS ゴシック",20,1 :color 255,255,255 ;1P初期設定 p1x=700:p1y=700 hp1=2000:b1tmax=5 ;雑魚の設定 zako1max=5 repeat zako1max rnd test,1000 :za1x.cnt=test rnd test,1000 :za1y.cnt=test loop *main ;メインループ gosub *haikei gosub *ugoku gosub *zakougoku redraw 1 goto *main *haikei ;背景の表示 redraw 2 gmode 2 color 0,0,0 :boxf 0,0,640,480 if mp=0 { scx=scx+spd1x scy=scy+spd1y if scx>500:scx=0 if scy>480:scy=0 if scy<0:scy=480 if scx<0:scx=500 } if mp=1 { scy=scy+spd1y if scx>500:scx=0 if scy>480:scy=0 if scy<0:scy=480 if scx<0:scx=500 } if mp=2 { scx=scx+spd1x if scx>500:scx=0 if scy>480:scy=0 if scy<0:scy=480 if scx<0:scx=500 } pos 0,0 :gcopy 1,scx,scy,500-scx,480-scy pos 500-scx,480-scy:gcopy 1,0,0,scx,scy pos 0,480-scy :gcopy 1,scx,0,500-scx,scy pos 500-scx,0 :gcopy 1,0,scy,scx,480-scy return *ugoku ;1P動きます await wa ;ウェイト ;時機位置の表示 color 255,255,255 pos 560,100:mes "X "+p1x pos 560,130:mes "Y "+p1y ;画面右下のミニマップ表示 color 255,255,255 :boxf 518,238,622,308 color 0,0,0:boxf 519,239,621,307 color 255,100,100 boxf 520+(p1x/15),240+(p1y/15),520+(p1x/15)+1,240+(p1y/15)+1 ;移動処理&画像の表示 p1x+=spd1x if p1x<10 :spd1x=0 :p1x=10 if p1x>1500 :spd1x=0 :p1x=1500 p1y+=spd1y if p1y<10 :spd1y=0 :p1y=10 if p1y>1000 :spd1y=0 :p1y=1000 ;スクロール関係(表示パターンフラグ設定) fpx=250 :fpy=250 :mp=0 :ep=0 if p1x<250 :fpx=p1x :mp+=1 :ep+=1 if p1y<250 :fpy=p1y :mp+=2 :ep+=2 if p1x>1250 :fpx=p1x-1000 :mp+=1 :ep+=4 if p1y>750 :fpy=p1y-500 :mp+=2 :ep+=8 pos fpx,fpy gmode 2 gcopy 2,0,0,64,64 ;キーの検出 stick k1,15 if k1&1 : spd1x-=1 : if p1x<10 : spd1x=0:p1x=10 if k1&4 : spd1x+=1 : if p1x>1500 : spd1x=0:p1x=1500 if k1&2 : spd1y-=1 : if p1y<10 : spd1y=0:p1y=10 if k1&8 : spd1y+=1 : if p1y>1000 : spd1y=0:p1y=1000 if k1&128 :end ;escで終了 if spd1x<-10 : spd1x=-10 if spd1x>10 : spd1x=10 if spd1y<-10 : spd1y=-10 if spd1y>10 : spd1y=10 return *zakougoku ;雑魚1動きます repeat zako1max ;画面下ミニマップ表示 color 255,255,255 : boxf 520+(za1x.cnt/15),240+(za1y.cnt/15),520+(za1x.cnt/15)+1,240+(za1y.cnt/15)+1 ;移動アルゴリズム rnd test,50 if test=0 { rnd r1x.cnt,1400 rnd r1y.cnt,1000 } za1x.cnt+=spdza1x.cnt za1y.cnt+=spdza1y.cnt ;一匹だけ自分を追っかける if cnt!=0 { if za1x.cnt>r1x.cnt : spdza1x.cnt-=1 if za1x.cntr1y.cnt : spdza1y.cnt-=1 if za1y.cntp1x : spdza1x.cnt-=1 if za1x.cntp1y : spdza1y.cnt-=1 if za1y.cnt6 : spdza1x.cnt=6 if spdza1y.cnt<-6 : spdza1y.cnt=-6 if spdza1y.cnt>6 : spdza1y.cnt=6 ;表示部(表示パターンの検索) if (ep=0)&(za1x.cnt>(p1x-fpx))&(za1x.cnt<(p1x+fpx))&(za1y.cnt>(p1y-fpy))&(za1y.cnt<(p1y+fpy)) { pos za1x.cnt-p1x+fpx,za1y.cnt-p1y+fpy } if (ep=1)&(za1x.cnt<500)&(za1y.cnt>(p1y-fpy))&(za1y.cnt<(p1y+fpy)) { pos za1x.cnt,za1y.cnt-p1y+fpy } if (ep=4)&(za1x.cnt>1000)&(za1y.cnt>(p1y-fpy))&(za1y.cnt<(p1y+fpy)) { pos za1x.cnt-1000,za1y.cnt-p1y+fpy } if (ep=2)&(za1x.cnt>(p1x-fpx))&(za1x.cnt<(p1x+fpx))&(za1y.cnt<500) { pos za1x.cnt-p1x+fpx,za1y.cnt } if (ep=8)&(za1x.cnt>(p1x-fpx))&(za1x.cnt<(p1x+fpx))&(za1y.cnt>500) { pos za1x.cnt-p1x+fpx,za1y.cnt-500 } if (ep=3)&(za1x.cnt<500)&(za1y.cnt<500) { pos za1x.cnt,za1y.cnt } if (ep=6)&(za1x.cnt>1000)&(za1y.cnt<500) { pos za1x.cnt-1000,za1y.cnt } if (ep=9)&(za1x.cnt<500)&(za1y.cnt>500) { pos za1x.cnt,za1y.cnt-500 } if (ep=12)&(za1x.cnt>1000)&(za1y.cnt>500) { pos za1x.cnt-1000,za1y.cnt-500 } gmode 2 gcopy 2,0,0,64,64 loop return