>ゲームオーバー意外は必ず(C)の位置にくるから(C)で指定しても
>構わないって考えていいんですよね? まだ勘違いですか?
gmさんのスクリプトでは、
; ブロックの処理
の直前に
bk = 0
がありますが、サンプルのソースではありませんでした。
これは、gmさんが追加したと言うことでいいですか?
以下、無修正のサンプルスクリプト。
;
; ブロック崩し(3)
; (ボール・バー・ブロック表示します)
;
x1=0:y1=0 ; 画面左上の座標
x2=480:y2=640 ; 画面右下の座標
clrflag=0 ; クリアフラグ
blsize=16 ; ボールのサイズ
blspd=10 ; ボールのスピード
blx=240:bly=300 ; ボールの座標
bpx=4:bpy=4 ; XY方向のボール座標加算値
bk=0 ; ブロックを崩すフラグ(1=崩す)
mblsize=-blsize
barsize=64 ; バーのサイズ
barx=240:bary=540 ; バーの座標
barhalf=barsize/2
blhalf=blsize/2
wx=0:wy=100 ; ブロックの表示開始位置(左上)
wsx=15:wsy=8 ; ブロックの配置数(X,Y)
wpx=x2/wsx:wpy=16 ; ブロック1個あたりのサイズ
dim wall,wsx,wsy ; ブロックを表示するフラグ
; 0=表示、1=表示しない
screen 0,x2,y2
title "ブロック崩し"
cls 4
*main
redraw 0
gradf 0,0,x2,y2,1,0,128 ; 画面クリア
; バー : マウス座標から位置を決定
barx=mousex-barsize/2
color 255,255,255
boxf barx,bary,barx+barsize,bary+16
; ボール : X方向の移動
blx=blx+bpx
if blx<=x1 : blx=x1 : bpx=-bpx
if blx>=(x2-blsize) : blx=x2-blsize : bpx=-bpx
; ボール : Y方向の移動
bly=bly+bpy
if bly<=y1 : bly=y1 : bpy=blspd : bk=1 : blspd=16
if bly>=(y2-blsize) : goto *gameover
; ボールとバーがぶつかったかどうか調べます
coly=bly+blsize
if (coly>=bary)&(bly<(bary+16)) { ; ボールY座標のチェック
; ボールX座標のチェック
colx=blx+blhalf
x=barx+barhalf
if abs(colx-x)<(barhalf+blhalf) {
bly=bary-blsize : bpy=-blspd
i=(colx-x)/4
if i!=0 : bpx=i
bk=1
if clrflag {
dim wall,wsx,wsy ; ブロックを復活させる
clrflag=0
}
}
}
; ブロックの処理
colx=wpx+bsize
coly=wpy+bsize
left=0
repeat wsy
cy=cnt
y=cnt*wpy+wy
hsvcolor cnt*10,255,255
repeat wsx
cx=cnt
x=cnt*wpx+wx
if wall(cx,cy)=0 {
; ブロックを表示
left++
boxf x,y,x+wpx-2,y+wpy-2
i=blx-x:j=bly-y
if (i>=mblsize)&(i<colx)&(j>=mblsize)&(j<coly)&(bk) {
wall(cx,cy)=1
bpy=-bpy
bk=0
}
}
loop
loop
; ボールを表示
pos blx,bly:color 255,255,255
font msgothic,blsize
mes "●"
redraw 1
await 16
if left=0 : clrflag=1
goto *main
*gameover
objsize 180,32
pos 150,330:button "終わり",*owari
stop
*owari
end
で、元のサンプルスクリプトでは、
bkが1になるのは、ボールが画面上部に接触した場合か、バーに接触した場合です。
次にbkが0になるのは、ボールがブロックに接触した場合です。
つまり、ボールが画面上部 または バーに接触するまで、
複数回ブロックに接触した場合、壊れるのは、
最初に接触したブロックだけということです。
では、(C)にbk=1を追加した場合、
ボールが画面上部 または、バーに接触する しないにかかわらず、
必ず通るので、bkは1となります。
つまり、ボールが画面上部 または バーに接触するまで、
複数回ブロックに接触した場合、
接触したブロック全て壊れると言うことです。
これは、私自身(C)の位置にbk=1を追加して確認しました。
質問の意味が、(C)の位置で指定しても、
元のスクリプトと同じ動作になるということであれば、
間違いですし、勘違いと言うことになります。
複数回ブロックに接触した場合、
接触したブロック全て壊れると言う仕様にしたければ、
(C)の位置で指定するよりも、85行目のif文の条件から
bkを外したほうがいいと思います。
以上、聞きたがっていたことが違っていたらすみません。