📄 unit1.pas
字号:
end;
if (bally[ballch]>1) and (ysteps[sstt1]=1) then begin
if ballx[ballch]>1 then begin
image1.Canvas.ellipse(x1[xsteps[sstt1]-1,ysteps[sstt1]],y1[xsteps[sstt1]-1,ysteps[sstt1]],x1[xsteps[sstt1]-1,ysteps[sstt1]]+32,y1[xsteps[sstt1]-1,ysteps[sstt1]]+16);
end;
end;
// if (ballx[ballch]=1) or (bally[ballch]=1) then track1:=1;
ballshrx[ballch]:=ballshrx[ballch]+xstep;
ballshry[ballch]:=ballshry[ballch]+ystep;
if scount>=4 then begin
ballmx[ballx[ballch],bally[ballch]]:=0;
ballx[ballch]:=xsteps[sstt1];
bally[ballch]:=ysteps[sstt1];
ballmx[ballx[ballch],bally[ballch]]:=ballch;
sstt1:=sstt1+1;
xstep:=0;
ystep:=0;
zstep:=0;
balltag[ballch]:=4;
track1:=1;
if sstt1>=sstt+1 then begin
//ballrx[ballch]:=x1[ballx[xdest],bally[xdest]]-((tlwidth-ball1[ballch].Width) div 2);
//ballry[ballch]:=y1[ballx[ydest],bally[ydest]]-(ball1[ballch].height-(tlheight div 2));
by1:=ballry[ballch];
balltag[ballch]:=6;
end;
end;
end;
if balltag[ballch]=6 then begin
//image1.Cursor:=crArrow;
for i:=1 to tilen do begin
for j:=1 to 4 do begin
disx[i,j]:=0;
disy[i,j]:=0;
end;
end;
//checking balls to eliminate by X axis
discount[1]:=1;
i:=1;
while i <= tilen do begin
if (ballmx[i,bally[ballch]]>0) and (balltype[ballmx[i,bally[ballch]]]=balltype[ballch]) then begin
disx[discount[1],1]:=i;
disy[discount[1],1]:=bally[ballch];
discount[1]:=discount[1]+1;
end
else begin
if discount[1]<6 then begin
for j:=1 to discount[1] do begin
disx[j,1]:=0;
disy[j,1]:=0;
end;
discount[1]:=1;
end
else i:=tilen;
end;
i:=i+1;
end;
discount[1]:=discount[1]-1;
if discount[1]<5 then begin
for i:=1 to 20 do begin
disx[i,1]:=0;
disy[i,1]:=0;
end;
//form1.Caption:='no X';
end;
//else balltag[ballch]:=7;
/////
//checking balls to eliminate by Y axis
discount[2]:=1;
i:=1;
while i <= tilen do begin
if (ballmx[ballx[ballch],i]>0) and (balltype[ballmx[ballx[ballch],i]]=balltype[ballch]) then begin
disx[discount[2],2]:=ballx[ballch];
disy[discount[2],2]:=i;
discount[2]:=discount[2]+1;
end
else begin
if discount[2]<6 then begin
for j:=1 to discount[2] do begin
disx[j,2]:=0;
disy[j,2]:=0;
end;
discount[2]:=1;
end
else i:=tilen;
end;
i:=i+1;
end;
discount[2]:=discount[2]-1;
if discount[2]<5 then begin
for i:=1 to 20 do begin
disx[i,2]:=0;
disy[i,2]:=0;
end;
//form1.Caption:='no';
end;
//else balltag[ballch]:=7;
/////
if ballx[ballch]<bally[ballch] then begin
a:=1;
b:=bally[ballch]-ballx[ballch]+1;
c:=tilen-b+1;
end
else begin
a:=ballx[ballch]-bally[ballch]+1;
b:=1;
c:=tilen-a+1;
end;
//form1.Caption:=inttostr(a)+', '+inttostr(b);
discount[3]:=1;
i:=1;
while i <= c do begin
if (ballmx[a,b]>0) and (balltype[ballmx[a,b]]=balltype[ballch]) then begin
disx[discount[3],3]:=a;
disy[discount[3],3]:=b;
discount[3]:=discount[3]+1;
end
else begin
if discount[3]<6 then begin
for j:=1 to discount[3] do begin
disx[j,3]:=0;
disy[j,3]:=0;
end;
discount[3]:=1;
end
else i:=c;
end;
a:=a+1;
b:=b+1;
i:=i+1;
end;
discount[3]:=discount[3]-1;
if discount[3]<5 then begin
for i:=1 to 20 do begin
disx[i,3]:=0;
disy[i,3]:=0;
end;
//form1.Caption:='no';
end;
////
if ballx[ballch]<tilen-bally[ballch]+1 then begin
a:=1;
b:=bally[ballch]+ballx[ballch]-1;
c:=b;
end
else begin
a:=ballx[ballch]-(tilen-bally[ballch]+1)+1;
b:=tilen;
c:=tilen-a+1;
end;
discount[4]:=1;
i:=1;
while i <= c do begin
if (ballmx[a,b]>0) and (balltype[ballmx[a,b]]=balltype[ballch]) then begin
disx[discount[4],4]:=a;
disy[discount[4],4]:=b;
discount[4]:=discount[4]+1;
end
else begin
if discount[4]<6 then begin
for j:=1 to discount[4] do begin
disx[j,4]:=0;
disy[j,4]:=0;
end;
discount[4]:=1;
end
else i:=c;
end;
a:=a+1;
b:=b-1;
i:=i+1;
end;
discount[4]:=discount[4]-1;
if discount[4]<5 then begin
for i:=1 to 20 do begin
disx[i,4]:=0;
disy[i,4]:=0;
end;
//form1.Caption:='no';
end;
////
if discht=0 then begin
newtag:=1;
end
else begin
newtag:=0;
discht:=1;
end;
//discht:=0;
for i:=1 to 4 do begin
if discount[i]>=5 then begin
score:=score+discount[i];
disptag:=1;
newtag:=0;
end;
end;
//making balls disappear
{for i:=1 to 4 do begin
if discount[i]>=5 then begin
for j:=1 to discount[i] do begin
ballshow[ballmx[disx[j,i],disy[j,i]]]:=false;
ballmx[disx[j,i],disy[j,i]]:=0;
if(disx[j,i]=1) or (disy[j,i]=1) then image1.Canvas.Rectangle(x1[disx[j,i],disy[j,i]]-16,y1[disx[j,i],disy[j,i]]-16,x1[disx[j,i],disy[j,i]]+16,y1[disx[j,i],disy[j,i]]+16);
for a:=disy[j,i]-1 to disy[j,i] do begin
for b:=disx[j,i]-1 to disx[j,i] do begin
if (b>0) and (b<=tilen) and (a>0) and (a<=tilen) then begin
image1.Canvas.Draw(x1[b,a]-round(tlwidth/2),y1[b,a],floor1);
if ballmx[b,a]>0 then begin
image1.Canvas.Draw(ballshrx[ballmx[b,a]],ballshry[ballmx[b,a]],ballsh[ballmx[b,a]]);
end;
end;
end;
end;
for a:=disy[j,i]-1 to disy[j,i]+1 do begin
for b:=disx[j,i]-1 to disx[j,i]+1 do begin
if (b>0) and (b<=tilen) and (a>0) and (a<=tilen) then begin
if ballmx[b,a]>0 then begin
image1.Canvas.Draw(ballrx[ballmx[b,a]],ballry[ballmx[b,a]],ball1[ballmx[b,a]]);
end;
end;
end;
end;
end;
end;
end;}
balltag[ballch]:=0;
ballch:=0;
end;
end;
if ballch=0 then begin
if ballch1>0 then begin
if(ballx[ballch1]=1) or (bally[ballch1]=1) then image1.Canvas.Rectangle(ballrx[ballch1],ballry[ballch1]-5,ballrx[ballch1]+ball1[ballch1].width,ballry[ballch1]+ball1[ballch1].height);
ballry[ballch1]:=by1;
for i:=bally[ballch1]-1-track2 to bally[ballch1]+track1 do begin
for j:=ballx[ballch1]-1-track2 to ballx[ballch1]+track1 do begin
if (j>0) and (j<=tilen) and (i>0) and (i<=tilen) then begin
image1.Canvas.Draw(x1[j,i]-round(tlwidth/2),y1[j,i],floor1);
if ballmx[j,i]>0 then begin
image1.Canvas.Draw(ballshrx[ballmx[j,i]],ballshry[ballmx[j,i]],ballsh[ballmx[j,i]]);
end;
end;
end;
end;
for i:=bally[ballch1]-1-track2 to bally[ballch1]+1+track1 do begin
for j:=ballx[ballch1]-1-track2 to ballx[ballch1]+1+track1 do begin
if (j>0) and (j<=tilen) and (i>0) and (i<=tilen) then begin
if ballmx[j,i]>0 then begin
image1.Canvas.Draw(ballrx[ballmx[j,i]],ballry[ballmx[j,i]],ball1[ballmx[j,i]]);
end;
end;
end;
end;
balltag[ballch]:=0;
ballch1:=ballch;
end;
end;
//Making balls disappear
if disptag=1 then begin
dispfc:=dispfc+1;
for i:=1 to 4 do begin
if discount[i]>=5 then begin
for j:=1 to discount[i] do begin
image1.Canvas.Draw(ballrx[ballmx[disx[j,i],disy[j,i]]],ballry[ballmx[disx[j,i],disy[j,i]]],dispic[dispfc]);
end;
end;
end;
if dispfc>4 then begin
dispfc:=0;
disptag:=2;
end;
end;
if disptag=2 then begin
for i:=1 to 4 do begin
if discount[i]>=5 then begin
for j:=1 to discount[i] do begin
ballshow[ballmx[disx[j,i],disy[j,i]]]:=false;
ballx[ballmx[disx[j,i],disy[j,i]]]:=0;
bally[ballmx[disx[j,i],disy[j,i]]]:=0;
ballmx[disx[j,i],disy[j,i]]:=0;
if(disx[j,i]=1) or (disy[j,i]=1) then image1.Canvas.Rectangle(x1[disx[j,i],disy[j,i]]-16,y1[disx[j,i],disy[j,i]]-16,x1[disx[j,i],disy[j,i]]+16,y1[disx[j,i],disy[j,i]]+16);
for a:=disy[j,i]-1 to disy[j,i] do begin
for b:=disx[j,i]-1 to disx[j,i] do begin
if (b>0) and (b<=tilen) and (a>0) and (a<=tilen) then begin
image1.Canvas.Draw(x1[b,a]-round(tlwidth/2),y1[b,a],floor1);
if ballmx[b,a]>0 then begin
image1.Canvas.Draw(ballshrx[ballmx[b,a]],ballshry[ballmx[b,a]],ballsh[ballmx[b,a]]);
end;
end;
end;
end;
for a:=disy[j,i]-1 to disy[j,i]+1 do begin
for b:=disx[j,i]-1 to disx[j,i]+1 do begin
if (b>0) and (b<=tilen) and (a>0) and (a<=tilen) then begin
if ballmx[b,a]>0 then begin
image1.Canvas.Draw(ballrx[ballmx[b,a]],ballry[ballmx[b,a]],ball1[ballmx[b,a]]);
end;
end;
end;
end;
end;
end;
end;
//drawing score
scores:='0000';
scores1:=inttostr(score);
j:=1;
for i:=5-length(scores1) to 4 do begin
scores[i]:=scores1[j];
j:=j+1;
end;
for i:=1 to 4 do begin
scorex:=image1.Width-10-((5-i)*tlheight);
image1.Canvas.Draw(scorex,10,scorepic[strtoint(scores[i])]);
end;
////
disptag:=0;
if discht=2 then discht:=1;
end;
//end;
//putting new bals;
if newtag=1 then begin
//checking if there is enough space to put three balls
k:=0;
for i:=1 to tilen*tilen do begin
if ballshow[i] then k:=k+1;
end;
if tilen*tilen-k>=3 then k1:=3
else k1:=tilen*tilen-k;
newtag:=2;
end;
if newtag=2 then begin
for i:=1 to k1 do begin
k:=1;
while k<=tilen*tilen do begin
if not ballshow[k] then begin
newbind[i]:=k;
ballshow[k]:=true;
k:=tilen*tilen;
end;
k:=k+1;
end;
end;
for i:=1 to k1 do begin
ballpl:=false;
while not ballpl do begin
ballpl:=true;
ballx[newbind[i]]:=random(tilen)+1;
bally[newbind[i]]:=random(tilen)+1;
for k:=1 to tilen*tilen do begin
if (ballshow[k]) and (newbind[i]<>k) then begin
if (ballx[newbind[i]]=ballx[k]) and (bally[newbind[i]]=bally[k]) then ballpl:=false;
end;
end;
end;
ballmx[ballx[newbind[i]],bally[newbind[i]]]:=newbind[i];
balltype[newbind[i]]:=newbtype[i];
ball1[newbind[i]]:=ballt[balltype[newbind[i]]];
ballrx[newbind[i]]:=x1[ballx[newbind[i]],bally[newbind[i]]]-((tlwidth-ball1[newbind[i]].Width) div 2);
ballry[newbind[i]]:=y1[ballx[newbind[i]],bally[newbind[i]]]-(ball1[newbind[i]].height-(tlheight div 2));
ballshrx[newbind[i]]:=x1[ballx[newbind[i]],bally[newbind[i]]]-16;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -