そのコードを見た感じ、dというのは「これまでに入力した最大の値」
ということでいいですか?
またeというのは「戻す」を実行したフラグで、
これが1の時は「戻す」を無効にする、ということでいいですか?
今回の質問の内容は、「戻す」を実行した時に、
dの値も前の状態に戻したいということでしょうか?
(おそらくそれを期待して『独立』なるものをさせたいのだと推察します)
だったら、値を入力した時にdの内容を別な変数に記憶させておき、
「戻す」を実行した時にdをその内容に戻せばいいと思いますが。
以下、これらのことを踏まえて改変してみましたが、これで良いでしょうか?
screen 0,1280,650,0,0,0
onkey *jump //←*jumpの部分はサブルーチンという扱いではなくなったのだから、onkey gosubではなくただのonkeyにすべき
b=0 : c=0 : d=0 //dはこれまでに入力した値の最大値
d_old=0 //d_oldは値を入力する前のdの値
*start
q=0
w=q+20
repeat
circle q,180,-60,180-w
circle 480,-60,480-w,q
circle q,420,-60,420-w
circle 870,-60,870-w,q
color 0,0,0
q=q+200
if q>2000{
break}
loop
objsize 100
pos 0,623
a=0 : input a
objsel stat
if c>999 {
z=20
if c>9999{
z+20
if c>99999{
z+20
}
}
}
font "MS Pゴシック", 180-z, 1
pos 500-(z/2),200+(1*z/3)
mes c
if c>0 and b>0 {
pos 500-(z/3),440+(1*z/3)
mes c/b
}
if c<=0 and b<=0 {
pos 500,440
mes 0
}
font "MS Pゴシック", 180-(2*z/3), 1
pos 900-(z/2),200
mes b
pos 900-(z/2),440
mes d
stop
*jump
if wparam=27 and e=0 and b>=1 {
dialog"戻しますか?",3
if stat=6 {
b=b-1
c=c-ac
e=e+1
d=d_old
cls
goto *start
}
}
if wparam=13 {
if a { //aが0以外の時に以下を実行する
objsel -1
d_old=d //dの値を記憶しておく
if a>d : d=a //最大値を更新
b=b+1
ac=a
c=c+a
e=0
r=9
cls
goto *start
}
}
stop