移動速度 という変数を買えると黒い箱の移動速度が速く、または遅くなるはずなのですが、プログラムを書いている間にいつのまにか変わらなくなってしまいました。自分では理由がわからないので、わかるかたいませんか。変数移動速度を6以上にするとプログラムを実行したときに止まってしまいます。
//ボンバーマンのようなステージ
箱のサイズ=20
screen_x = 箱のサイズ*10//掛ける数は必ず偶数にする
screen_y = 箱のサイズ*10
screen 0,screen_x,screen_y
control = 0
blackbox_x_p = 0;黒箱の左上座標、黒箱は動かせる
blackbox_y_p = 0
//一番左上の赤箱の左上座標は
dim redbox_x_p,((screen_x/箱のサイズ)/2)-1
for a,0,((screen_x/箱のサイズ)/2)-1
redbox_x_p(a) = 箱のサイズ+1+(2*a*(箱のサイズ+2));赤箱の左上座標、赤箱は動かさない 一番右の数字が赤箱の間の空間
next
dim redbox_y_p,((screen_y/箱のサイズ)/2)-1
for b,0,((screen_y/箱のサイズ)/2)-1
redbox_y_p(b) = 箱のサイズ+1+(2*b*(箱のサイズ+2));赤箱の左上座標、赤箱は動かさない
next
移動速度 = 1 ;衝突判定を飛び越さないようにする工夫が必要
*main
redraw 0 ;仮想画面
color 255,255,255
boxf 0,0,1000,1000
gosub *black_box
gosub *red_box
color 0,0,0
pos 100,0
mes mousex
pos 150,0
mes mousey
redraw 1 ;実際の画面
await 10
goto *main
*black_box
color 0,0,0;黒を指定
boxf blackbox_x_p,blackbox_y_p,blackbox_x_p+箱のサイズ,blackbox_y_p+箱のサイズ;黒箱を表示
gosub *黒箱の移動 ;入力受付
return
*red_box
for b,0,((screen_x/箱のサイズ)/2)-1
for a,0,((screen_x/箱のサイズ)/2)-1
color 255,0,0;赤を指定
boxf redbox_x_p(a),redbox_y_p(b),redbox_x_p(a)+箱のサイズ,redbox_y_p(b)+箱のサイズ;赤箱を表示
next
next
return
*collision
for a,0,((screen_x/箱のサイズ)/2)-1
for b,0,((screen_x/箱のサイズ)/2)-1
if redbox_x_p(a)-箱のサイズ <= blackbox_x_p & blackbox_x_p <= redbox_x_p(a)+箱のサイズ {
//上から当たる場合
if blackbox_y_p+箱のサイズ == redbox_y_p(b) {
blackbox_y_p--
}
//下から当たる場合
if blackbox_y_p == redbox_y_p(b)+箱のサイズ {
blackbox_y_p++
}
}
if redbox_y_p(b)-箱のサイズ <= blackbox_y_p & blackbox_y_p <= redbox_y_p(b)+箱のサイズ {
//右から当たる場合
if blackbox_x_p == redbox_x_p(a)+箱のサイズ {
blackbox_x_p++
}
//左から当たる場合
if blackbox_x_p+箱のサイズ == redbox_x_p(a){
blackbox_x_p--
}
}
//画面から出ないようにするための衝突判定
if blackbox_x_p < 0 : blackbox_x_p++
if blackbox_x_p + 箱のサイズ > screen_x : blackbox_x_p--
if blackbox_y_p < 0 : blackbox_y_p++
if blackbox_y_p + 箱のサイズ > screen_y : blackbox_y_p--
next
next
return
*黒箱の移動
stick control,15;入力受付 1増やすごとに衝突の判定をしないと飛び越してしまう
if control==1{
for a,0,移動速度;移動速度に入れた数値の回数繰り返す
blackbox_x_p--;left
gosub *collision
next
}
if control==2{
for a,0,移動速度
blackbox_y_p--;up
gosub *collision
next
}
if control==4{
for a,0,移動速度
blackbox_x_p++;right
gosub *collision
next
}
if control==8{
for a,0,移動速度
blackbox_y_p++;down
gosub *collision
next
}
return