randomize
dim p1,4 :dim p2,4 :dim p3,2
p1=10,40,50,0 : p2=0,0,50,50 : p3=$0000FF,$000000,$000000,$0000FF
buffer 1 :cls 4 :gsquare -257,p1,p2,p3;カップ作成
screen 0,550,150
dim cx,5;カップのX座標
dim cy,5;カップのY座標
repeat 5
cx(cnt)=cnt*100+50;初期のX座標
cy(cnt)=50;初期のY座標
loop
gmode 2
flg=3;処理を区別
sp=100.0;1度の入れ替えに要するループ回数
repeat
if flg=1{;新しい座標を設定
dim lk,5;新しい座標の重複を防ぐ
dim nx,5;新しい座標
ddim msp,5;カップそれぞれの移動速度
repeat 5
lk(cnt)=-1
loop
repeat 5
lk(cnt)=rnd(5)
cn=cnt
repeat 5
if lk(cnt)=lk(cn) and cnt!=cn{
lk(cn)++
if lk(cn)=5:lk(cn)=0
continue 0
}
loop
nx(cnt)=lk(cnt)*100+50;新しい座標
msp(cnt)=double(nx(cnt)-cx(cnt))/sp;移動速度
loop
flg=2
}
if flg=2{;移動処理
repeat 5
if absf(nx(cnt)-cx(cnt))<absf(msp(cnt)){;移動が終わったかどうか
cx(cnt)=nx(cnt);座標を調整
msp(cnt)=0.0
continue
}
cx(cnt)+msp(cnt)
loop
repeat 5
if msp(cnt)!=0.0:break
if cnt=4:flg=3;全てのカップの移動が終わっているか
loop
}
redraw 0
color 255,255,255:boxf
repeat 5
pos cx(cnt),cy(cnt)
gcopy 1,0,0,50,50;描写
loop
color 0,0,255 : gradf 0,100,550,150,1,$FF0000,$000000;台を描写
redraw 1
if flg=3{;スピード変更
wait 20
flg=1
sp-10
if sp<=0:sp=10.0
title "SP="+sp+""
}
await 20
loop
描写回数を落とさないのであれば
ウェイト数を変更するほかないかもしれません。