;勝手に歩いているキャラクター
#const tipsize 20 ;マップチップのサイズ
#const movefreq tipsize/4 ;移動時に何ループで行くか(サイズを割りきれるように)
#const movelong tipsize/movefreq;一歩の長さ
#const tipmax 20
#define ch 5 ;キャラクターの数
#define max 100 ;カウントの最大値
#define small 50;カウントの最小値
randomize ;乱数の初期化
dim chmvflg,ch ;キャラの移動フラグ
dim chcnt,ch ;次の移動までのカウント
dim chpx,ch ;キャラクターのマップチップで数えたx座標
dim chpy,ch ;キャラクターのマップチップで数えたy座標
dim chx,ch ;キャラクターのx座標
dim chy,ch ;キャラクターのy座標
dim chmvx,ch ;一回の移動量x
dim chmvy,ch ;一回の移動量y
dim chmvcnt,ch ;移動回数のカウント
repeat ch ;各キャラクターの初期位置をランダム決定
cnt2=cnt
rnd chpx.cnt,tipmax
rnd chpy.cnt,tipmax
re=0
repeat cnt
if (chpx.cnt=chpx.cnt2)&(chpy.cnt=chpy.cnt2) : re=1 : break ;もしその場に他のキャラがいたらやり直す
loop
if re=1 : continue cnt
chx.cnt=chpx.cnt*tipsize
chy.cnt=chpy.cnt*tipsize
rnd chcnt.cnt,max-small ;カウンターの初期数値もランダム指定
chcnt.cnt+small
loop
screen 0,tipsize*tipmax,tipsize*tipmax
*mainloop ;メインループ
redraw 0
gosub *drawmap
gosub *character
redraw
await 1
goto *mainloop
*drawmap ;マップ描画ルーチン
color ,255 : boxf ;またも緑で塗りつぶし
return
*character ;キャラクター関係ルーチン
repeat ch
cnt3=cnt
if chmvflg.cnt=0 {
if chcnt.cnt=0 {
repeat
cnt2=cnt
rnd course,4 ;移動する方向
if course=0 { ;左方向
if chpx.cnt3=0 :break ;マップの端だったら移動しない
arrx=chpx.cnt3-1 ;移動先のx座標
arry=chpy.cnt3 ;移動先のy座標
chmvx.cnt3=-movelong ;移動量x
chmvy.cnt3=0 ;移動量y
}
if course=1 { ;上方向
if chpy.cnt3=0 :break
arrx=chpx.cnt3
arry=chpy.cnt3-1
chmvx.cnt3=0
chmvy.cnt3=-movelong
}
if course=2 { ;右方向
if chpx.cnt3=(tipmax-1) :break
arrx=chpx.cnt3+1
arry=chpy.cnt3
chmvx.cnt3=movelong
chmvy.cnt3=0
}
if course=3 { ;下方向
if chpy.cnt3=(tipmax-1) :break
arrx=chpx.cnt3
arry=chpy.cnt3+1
chmvx.cnt3=0
chmvy.cnt3=movelong
}
bflg=0
repeat ch
if cnt=cnt3 : continue
if (chpx.cnt=arrx)&(chpy.cnt=arry) : bflg=1 : break ;移動先に他のキャラがいたら移動しない
loop
if bflg=1 : break
chmvcnt.cnt3=movefreq ;移動カウンター
chmvflg.cnt3=1 ;移動フラグをONにする
chpx.cnt3=arrx ;移動先の座標へx
chpy.cnt3=arry ;移動先の座標へy
break
loop
rnd chcnt.cnt,max-small ;カウンターを再設定
chcnt.cnt+small
}
chcnt.cnt--
}
if chmvflg.cnt=1 {
chx.cnt+chmvx.cnt ;移動x
chy.cnt+chmvy.cnt ;移動y
chmvcnt.cnt--
if chmvcnt.cnt=0 : chmvflg.cnt=0 ;カウンターが0になったら移動終了
}
font "",tipsize : color 255 : pos chx.cnt,chy.cnt : mes "●"
loop
return
|