📄 unit1~1.~pa
字号:
ball1[i]:=ballt[balltype[i]];
ballrx[i]:=x1[ballx[i],bally[i]]-((tlwidth-ball1[i].Width) div 2);
ballry[i]:=y1[ballx[i],bally[i]]-(ball1[i].height-(tlheight div 2));
ballshrx[i]:=x1[ballx[i],bally[i]]-16;
ballshry[i]:=y1[ballx[i],bally[i]]+8;
ballsh[i].Canvas.CopyRect(rect(0,0,ballsh[i].Width,ballsh[i].Height),floorsh.Canvas,rect((tlwidth-ballsh[i].width) div 2, (tlheight-ballsh[i].height) div 2, (tlwidth-ballsh[i].width) div 2 + ballsh[i].width, (tlheight-ballsh[i].height) div 2 + ballsh[i].height));
ballsh[i].Canvas.draw(0,0,ballshm);
ballsh[i].Transparent:=true;
ballsh[i].TransparentColor:=ballsh[i].Canvas.Pixels[0,0];
balltag[i]:=0;
end;
//drawing balls
for i:=1 to ballnum do begin
image1.Canvas.Draw(ballshrx[i],ballshry[i],ballsh[i]);
end;
for i:=1 to ballnum do begin
image1.Canvas.Draw(ballrx[i],ballry[i],ball1[i]);
end;
////
ballch:=0;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var i,j:integer;
begin
xp1:=x;
yp1:=y;
xp2:=xp1;
yp2:=yp1*2;
////
xp3:=xp2;
yp3:=yp2;
if not ((xp3=xcent) and (yp3=ycent)) then begin
if (xp3-xcent>0) and (yp3-ycent<=0) then ppos:=1
else if (xp3-xcent<=0) and (yp3-ycent<0) then ppos:=2
else if (xp3-xcent<0) and (yp3-ycent>=0) then ppos:=3
else if (xp3-xcent>=0) and (yp3-ycent>0) then ppos:=4;
rad1:=sqrt(sqr(xp3-xcent)+sqr(yp3-ycent));
cos1:=abs((xp3-xcent)/rad1);
if ppos=1 then angrad:=arccos(cos1)
else if ppos=2 then angrad:=pi-arccos(cos1)
else if ppos=3 then angrad:=pi+arccos(cos1)
else if ppos=4 then angrad:=2*pi-arccos(cos1);
xp3:=xcent+round(rad1*sin(angrad+angle1+pi/2));
yp3:=ycent+round(rad1*cos(angrad+angle1+pi/2));
end;
////
if (xp3>=x3[1,1]) and (xp3<x3[tilen+1,1]) and (yp3>=y3[1,1]) and (yp3<y3[1,tilen+1]) then begin
for i:=1 to tilen do begin
if (xp3>=x3[i,1]) and (xp3<x3[i+1,1]) then begin
xind:=i;
end;
end;
for i:=1 to tilen do begin
if (yp3>=y3[1,i]) and (yp3<y3[1,i+1]) then begin
yind:=i;
end;
end;
////////////////
if pushtag>0 then begin
if (xind1<>xind) or (yind1<>yind) then begin
if (xind1<>0) and (yind1<>0) and (ballmx[xind1,yind1]=0) then image1.Canvas.Draw(x1[xind1,yind1]-round(tlwidth/2),y1[xind1,yind1],floor1);
if ballmx[xind,yind]=0 then image1.Canvas.Draw(x1[xind,yind]-round(tlwidth/2),y1[xind,yind],floorsh);
if ballmx[xind,yind]=0 then begin
for i:=yind-1 to yind+1 do begin
for j:=xind-1 to xind+1 do begin
if (j>0) and (j<=tilen) and (i>0) and (i<=tilen) then begin
if ballmx[j,i]>0 then image1.Canvas.Draw(ballrx[ballmx[j,i]],ballry[ballmx[j,i]],ball1[ballmx[j,i]]);
end;
end;
end;
end;
if ballmx[xind1,yind1]=0 then begin
for i:=yind1-1 to yind1+1 do begin
for j:=xind1-1 to xind1+1 do begin
if (j>0) and (j<=tilen) and (i>0) and (i<=tilen) then begin
if ballmx[j,i]>0 then image1.Canvas.Draw(ballrx[ballmx[j,i]],ballry[ballmx[j,i]],ball1[ballmx[j,i]]);
end;
end;
end;
end;
{image1.Canvas.MoveTo(x1[xind1,yind1],y1[xind1,yind1];
image1.Canvas.LineTo(x1[xind1+1,yind1],y1[xind1+1,yind1]);
image1.Canvas.LineTo(x1[xind1+1,yind1+1],y1[xind1+1,yind1+1]);
image1.Canvas.LineTo(x1[xind1,yind1+1],y1[xind1,yind1+1]);
image1.Canvas.LineTo(x1[xind1,yind1],y1[xind1,yind1]);}
end;
end;
////////////////
end
else begin
xind:=0;
yind:=0;
if pushtag>0 then begin
if (xind1<>0) and (yind1<>0) then begin
if ballmx[xind1,yind1]=0 then begin
image1.Canvas.Draw(x1[xind1,yind1]-round(tlwidth/2),y1[xind1,yind1],floor1);
for i:=yind1-1 to yind1+1 do begin
for j:=xind1-1 to xind1+1 do begin
if (j>0) and (j<=tilen) and (i>0) and (i<=tilen) then begin
if ballmx[j,i]>0 then image1.Canvas.Draw(ballrx[ballmx[j,i]],ballry[ballmx[j,i]],ball1[ballmx[j,i]]);
end;
end;
end;
end;
end;
end;
end;
xind1:=xind;
yind1:=yind;
form1.Caption:='X:'+inttostr(xind)+', Y:'+inttostr(yind);
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var i,j:integer;
begin
//pushtag:=-1*pushtag;
if button=mbleft then begin
if pushtag<0 then begin
for i:=1 to ballnum do begin
if (x>=ballrx[i]) and (x<=ballrx[i]+ball1[i].width) and (y>=ballry[i]) and (y<=ballry[i]+ball1[i].height) then begin
ballch:=i;
balltag[ballch]:=0;
pushtag:=1;
end;
end;
end
else begin
if (xind>0) and (yind>0) then begin
if ballmx[xind,yind]=0 then begin
balltag[ballch]:=3;
pushtag:=-1;
end;
end;
end;
end
else begin
pushtag:=-1;
ballch:=0;
end;
{if pushtag>0 then begin
if (xind<>0) and (yind<>0) then begin
image1.Canvas.Draw(x1[xind,yind]-round(tlwidth/2),y1[xind,yind],floorsh);
for i:=1 to ballnum do begin
image1.Canvas.Draw(ballrx[i],ballry[i],ball1[i]);
end;
end;
end;}
if pushtag<0 then begin
if (xind<>0) and (yind<>0) then begin
if ballmx[xind,yind]=0 then image1.Canvas.Draw(x1[xind,yind]-round(tlwidth/2),y1[xind,yind],floor1);
for i:=yind-1 to yind+1 do begin
for j:=xind-1 to xind+1 do begin
if (j>0) and (j<=tilen) and (i>0) and (i<=tilen) then begin
if ballmx[j,i]>0 then image1.Canvas.Draw(ballrx[ballmx[j,i]],ballry[ballmx[j,i]],ball1[ballmx[j,i]]);
end;
end;
end;
{for i:=1 to ballnum do begin
image1.Canvas.Draw(ballrx[i],ballry[i],ball1[i]);
end;}
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var i,j:integer;
begin
//main sicle
if ballch>0 then begin
if balltag[ballch]=0 then begin
bfcount:=0;
by1:=ballry[ballch];
balltag[ballch]:=1;
ballch1:=ballch;
end;
if balltag[ballch]=1 then begin
bfcount:=bfcount-1;
ballry[ballch]:=ballry[ballch]-1;
if bfcount<-4 then balltag[ballch]:=2;
end;
if balltag[ballch]=2 then begin
bfcount:=bfcount+1;
ballry[ballch]:=ballry[ballch]+1;
if bfcount>=0 then balltag[ballch]:=1;
end;
if balltag[ballch]=3 then begin
ballry[ballch]:=by1;
//path code
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 to bally[ballch1] do begin
for j:=ballx[ballch1]-1 to ballx[ballch1] 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 to bally[ballch1]+1 do begin
for j:=ballx[ballch1]-1 to ballx[ballch1]+1 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;
if ballch>0 then begin
if(ballx[ballch]=1) or (bally[ballch]=1) then image1.Canvas.Rectangle(ballrx[ballch],ballry[ballch]-1,ballrx[ballch]+ball1[ballch].width,ballry[ballch]+ball1[ballch].height);
for i:=bally[ballch]-1 to bally[ballch] do begin
for j:=ballx[ballch]-1 to ballx[ballch] 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]]);
//image1.Canvas.Draw(ballrx[ballmx[j,i]],ballry[ballmx[j,i]],ball1[ballmx[j,i]]);
end;
if pushtag>0 then begin
if (xind1=j) and (yind1=i) then begin
if ballmx[xind1,yind1]=0 then begin
image1.Canvas.Draw(x1[xind1,yind1]-round(tlwidth/2),y1[xind1,yind1],floorsh);
end;
end;
end;
end;
end;
end;
for i:=bally[ballch]-1 to bally[ballch]+1 do begin
for j:=ballx[ballch]-1 to ballx[ballch]+1 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]]);
image1.Canvas.Draw(ballrx[ballmx[j,i]],ballry[ballmx[j,i]],ball1[ballmx[j,i]]);
end;
end;
end;
end;
end;
////
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -