?? main.pas
字號:
AssignPoint(FocusedSprite[1],FocusedSprite1[1]);
if (FocusedSprite[0].ImageID = FocusedSprite[1].ImageID) and not(selfDo) then
begin
if (FocusedSprite[0].ID = - 1) or (FocusedSprite[1].ID = -1) then exit;
getRaodPoint(FocusedSprite[0],FocusedSprite[1],FRoadPoint[0],FRoadPoint[1]);
Dead;
end;
if selfDo then
Dead;
end;
procedure TForm1.InitializeID;
var
i1,j1: integer;
begin
//DXSpriteEngine
for i1 := low(FSprites) to high(FSprites) do
begin
for j1 := low(FSprites[0]) to high(FSprites[0]) do
begin
if not(FSprites[i1][j1].dead) then
with FSprites[i1][j1].MonoSprite do
begin
//IsDead := FSprites[i1][j1].dead;
//FSprites[i1][j1].ImageID := ImageID;
XID := i1;
YID := j1;
//if ImageID > 60 then
//begin
//showmessage('');
//end;
ImageID := FSprites[i1][j1].ImageID;
//FSprites[i1][j1].X := round(X);
//FSprites[i1][j1].Y := round(Y);
end;
end;
end;
end;
procedure TForm1.DrawLine(X1,Y1,X2,Y2: integer;ACanvas: TCanvas;PenColor: TColor);
var
i,j: integer;
temSpriteXY: TSpriteXY;
begin
//Form1.DXInput.Joystick.Effects.Find('eff1').Start;
//ACanvas.Pen.Width := 2;
//FClose := true;
try
for j := 0 to 4 do
begin
try
ACanvas.Pen.Color := PenColor;
//Application.HandleMessage;
ACanvas.Pen.Width := 3;
ACanvas.Pen.Color := PenColor;
except
end;
//ACanvas.MoveTo(FRoadPoint[0].X+FImageW div 2,FRoadPoint[0].Y+FImageH div 2);
//ACanvas.LineTo(FRoadPoint[1].X+FImageW div 2,FRoadPoint[1].Y+FImageH div 2);
ACanvas.Polyline([Point(FRoadPoint[0].X+FImageW div 2,FRoadPoint[0].Y+FImageH div 2)
,Point(FRoadPoint[1].X+FImageW div 2,FRoadPoint[1].Y+FImageH div 2)]);
if FRoadPoint[0].X = FRoadPoint[1].X then
begin
if not(selfDo) then
Application.HandleMessage;
begin
//ACanvas.Pen.Width := 4;
try
ACanvas.Pen.Color := PenColor;
except
end;
if FocusedSprite[0].Y > FocusedSprite[1].Y then
begin
AssignPoint(FocusedSprite[0],temSpriteXY);
AssignPoint(FocusedSprite[1],FocusedSprite[0]);
AssignPoint(temSpriteXY,FocusedSprite[1]);
end;
if FRoadPoint[0].Y > FRoadPoint[1].Y then
begin
AssignPoint(FRoadPoint[0],temSpriteXY);
AssignPoint(FRoadPoint[1],FRoadPoint[0]);
AssignPoint(temSpriteXY,FRoadPoint[1]);
end;
ACanvas.Polyline([Point(FRoadPoint[0].X+FImageW div 2,FRoadPoint[0].Y+FImageH div 2)
,Point(FocusedSprite[0].X+FImageW div 2,FocusedSprite[0].Y+FImageH div 2)]);
ACanvas.Polyline([Point(FRoadPoint[1].X+FImageW div 2,FRoadPoint[1].Y+FImageH div 2)
,Point(FocusedSprite[1].X+FImageW div 2,FocusedSprite[1].Y+FImageH div 2)]);
{
if FRoadPoint[0].Y = Y1 - FImageH div 2 then
begin
ACanvas.MoveTo(FRoadPoint[0].X+FImageW div 2,FRoadPoint[0].Y+FImageH div 2);
ACanvas.LineTo(X1,FRoadPoint[0].Y+FImageH div 2);
end
else if FRoadPoint[0].Y = Y2 - FImageH div 2 then
begin
ACanvas.MoveTo(FRoadPoint[0].X+FImageW div 2,FRoadPoint[0].Y+FImageH div 2);
ACanvas.LineTo(X2,FRoadPoint[0].Y+FImageH div 2);
end;
if FRoadPoint[1].Y = Y1 - FImageH div 2 then
begin
ACanvas.MoveTo(FRoadPoint[1].X+FImageW div 2,FRoadPoint[1].Y+FImageH div 2);
ACanvas.LineTo(X1,FRoadPoint[1].Y+FImageH div 2);
end
else if FRoadPoint[1].Y = Y2 - FImageH div 2 then
begin
ACanvas.MoveTo(FRoadPoint[1].X+FImageW div 2,FRoadPoint[1].Y+FImageH div 2);
ACanvas.LineTo(X2,FRoadPoint[1].Y+FImageH div 2);
end; }
end
end;
if FRoadPoint[0].Y = FRoadPoint[1].Y then
begin
if not(selfDo) then
Application.HandleMessage;
//ACanvas.Pen.Width := 4;
try
ACanvas.Pen.Color := PenColor;
except
end;
if FocusedSprite[0].X > FocusedSprite[1].X then
begin
AssignPoint(FocusedSprite[0],temSpriteXY);
AssignPoint(FocusedSprite[1],FocusedSprite[0]);
AssignPoint(temSpriteXY,FocusedSprite[1]);
end;
if FRoadPoint[0].X > FRoadPoint[1].X then
begin
AssignPoint(FRoadPoint[0],temSpriteXY);
AssignPoint(FRoadPoint[1],FRoadPoint[0]);
AssignPoint(temSpriteXY,FRoadPoint[1]);
end;
ACanvas.Polyline([Point(FRoadPoint[0].X+FImageW div 2,FRoadPoint[0].Y+FImageH div 2)
,Point(FocusedSprite[0].X+FImageW div 2,FocusedSprite[0].Y+FImageH div 2)]);
ACanvas.Polyline([Point(FRoadPoint[1].X+FImageW div 2,FRoadPoint[1].Y+FImageH div 2)
,Point(FocusedSprite[1].X+FImageW div 2,FocusedSprite[1].Y+FImageH div 2)]);
{if FRoadPoint[0].X = X1 - FImageW div 2 then
begin
ACanvas.MoveTo(FRoadPoint[0].X+FImageW div 2,FRoadPoint[0].Y+FImageH div 2);
ACanvas.LineTo(FRoadPoint[0].X+FImageW div 2,Y1);
end
else if FRoadPoint[0].X = X2 - FImageW div 2 then
begin
ACanvas.MoveTo(FRoadPoint[0].X+FImageW div 2,FRoadPoint[0].Y+FImageH div 2);
ACanvas.LineTo(FRoadPoint[0].X+FImageW div 2,Y2);
end;
if FRoadPoint[1].X = X1 - FImageW div 2 then
begin
ACanvas.MoveTo(FRoadPoint[1].X+FImageW div 2,FRoadPoint[1].Y+FImageH div 2);
ACanvas.LineTo(FRoadPoint[1].X+FImageW div 2,Y1);
end
else if FRoadPoint[1].X = X2 - FImageW div 2 then
begin
ACanvas.MoveTo(FRoadPoint[1].X+FImageW div 2,FRoadPoint[1].Y+FImageH div 2);
ACanvas.LineTo(FRoadPoint[1].X+FImageW div 2,Y2);
end; }
end;
end;
//DXDraw.Surface.Canvas.Release;
finally
fClose := false;
end;
end;
procedure TForm1.getXY(Count: integer; var x, y: integer);
var
i,temY,temX,temNum,temNum1,temNum2,temNum3,temNum4: integer;
begin
if Count = 1 then
begin
x := 1;
y := 1;
exit;
end;
y := 1;
temNum2 := Count;
for i := 1 to Count do
begin
temNum := i ;
temNum4 := Count mod i;
temNum1 := Count div i;
if temNum4 = 0 then
begin
temNum3 := temNum1 - temNum;
if (temNum3 >= 0) and (temNum3 <= temNum2) then
begin
temNum2 := temNum3;
temY := temNum;
temX := temNum1;
end;
end;
if (temY > y) and (temY <> y) then
y := temY;
end;
x := temX;
y := temY;
end;
constructor TForm1.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FShowRegTime := 0;
FShowReg := true;
FRanEventID.ID := -1;
FGameState := gtWait;
Language := ltchs;
ChangeLanguge(Language);
FBackMusic := true;
FMusic := true;
FLevel := 1;
FImageW := 50;
FImageH := 38;
FProgressW := 300;
FProgressH := 20;
FProgressT := 10;
FProgressC := CLRed;
//DXWaveList1.Items.Find('backmusic').Play(false);
//DXWaveList1.Items[1].Looped := true;
PlayBackMusic(true);
DXDraw.Top := 0;
end;
procedure TForm1.InitializeSprite;
var
i,j: integer;
begin
for i := 0 to DXSpriteEngine.Engine.Count - 1 do
begin
DXSpriteEngine.Engine[i].Dead;
end;
for i := low(FSprites) to high(FSprites) do
begin
for j := low(FSprites[i]) to high(FSprites[i]) do
begin
FSprites[i][j].dead := false;
FSprites[i][j].MonoSprite := TMonoSprite.Create(DXSpriteEngine.Engine);
with FSprites[i][j].MonoSprite do
begin
Image := ImageList.Items.Find(inttostr(FSprites[i][j].ImageID));
ImageID := FSprites[i][j].ImageID;
ID := FSprites[i][j].ID;
X := FSprites[i][j].X;
Y := FSprites[i][j].Y;
XID := i;//FSprites[i][j].XID;
YID := j;//FSprites[i][j].YID;
Z := 2;
Width := FImageW;// div 2;
Height := FImageH;// div 2
end;
end;
end;
end;
procedure TForm1.Randomsprite;
var
i,j: integer;
m,n,m1,n1: integer;
ImageID: integer;
temSpriteXY1: TSpriteXY;
procedure AssignPoint1(SourPoint: TSpriteXY;
var DesPoint: TSpriteXY);
begin
DesPoint.ID := SourPoint.ID;
DesPoint.ImageID := SourPoint.ImageID;
//DesPoint.XID := SourPoint.XID;
//DesPoint.YID:= SourPoint.YID;
DesPoint.dead:= SourPoint.dead;
DesPoint.show:= SourPoint.show;
//DesPoint.throut:= SourPoint.throut;
//if not(SourPoint.dead) then
try
DesPoint.MonoSprite := SourPoint.MonoSprite;
except
end;
end;
procedure AdjustSprite;
var
i1,j1: integer;
begin
for i1 := low(FSprites) to high(FSprites) do
begin
for j1 := low(FSprites[0]) to high(FSprites[0]) do
begin
begin
if FSprites[i1][j1].dead then continue;
with FSprites[i1][j1].MonoSprite do
begin
X := FSprites[i1][j1].X;
Y := FSprites[i1][j1].Y;
XID := i1;
YID := j1;
//FSprites[i1][j1].ID := ID;
end;
end;
end;
end;
end;
begin
randomize;
//if Washing then exit;
//Washing := true;
try
//DXSpriteEngine.Dead;
for i := low(FSprites) to high(FSprites)*high(FSprites[low(FSprites)])*2 do
begin
randomize;
n := random(high(FSprites)+1);
m := random(high(FSprites[low(FSprites)])+1);
while FSprites[n][m].dead do
begin
n := random(high(FSprites)+1);
m := random(high(FSprites[low(FSprites)])+1);
end;
randomize;
n1 := random(high(FSprites)+1);
m1 := random(high(FSprites[low(FSprites)])+1);
while FSprites[n][m].dead do
begin
n1 := random(high(FSprites)+1);
m1 := random(high(FSprites[low(FSprites)])+1);
end;
if not(FSprites[n][m].dead) and not(FSprites[n1][m1].dead) then
begin
AssignPoint1(FSprites[n][m],temSpriteXY1);
AssignPoint1(FSprites[n1][m1],FSprites[n][m]);
AssignPoint1(temSpriteXY1,FSprites[n1][m1]);
end;
end;
AdjustSprite;
finally
//Washing := false;
end;
end;
procedure TForm1.getRaodPoint(StPoint, EndPoint: TSpriteXY;
var RoadPoint1,RoadPoint2: TSpriteXY);
var
i,j,i1,j1,AX,AY,minX,minY,minX1,minY1,tem,MaxX,MaxY,Addi,Addj: integer;
temPoint,temPoint1: TSpriteXY;
procedure IniPoint;
begin
RoadPoint1.ID := -1;
RoadPoint2.ID := -1;
end;
function getPassX(FromX,ToX: integer;down: boolean=false): boolean;
var
i,j,i1,j1: integer;
begin
result := false;
if down then
for i := ToX downto FromX do //low(FSprites)-1 //high(FSprites)+1
begin
Addi := 0; addj := 0;
if i = stPoint.XID then
Addi := 1
else
Addi := 0;
if i = endPoint.XID then
Addj := -1
else
Addj := 0;
//else Addi := 0;
for j := miny + Addi to MaxY + Addj do
begin
IniPoint;
if (i <> -1) and (i <> high(FSprites)+1) then
begin
if not(FSprites[i][j].dead) then
break;
if (j = MaxY + Addj) then
begin
//get one road
AssignPoint(FSprites[i][stPoint.YID],RoadPoint1);
AssignPoint(FSprites[i][endPoint.YID],RoadPoint2);
end;
end
else if i = -1 then
begin
//get one road
AssignPoint(FSprites[i+1][stPoint.YID],RoadPoint1);
AssignPoint(FSprites[i+1][endPoint.YID],RoadPoint2);
RoadPoint1.XID := -1;
RoadPoint2.XID := -1;
RoadPoint1.X := FSprites[i+1][stPoint.YID].X - FImageH;
RoadPoint2.X := FSprites[i+1][endPoint.YID].X - FImageH;
end
else if i = high(FSprites)+1 then
begin
//get one road
AssignPoint(FSprites[i-1][stPoint.YID],RoadPoint1);
AssignPoint(FSprites[i-1][endPoint.YID],RoadPoint2);
RoadPoint1.XID := high(FSprites)+1;
RoadPoint2.XID := high(FSprites)+1;
RoadPoint1.X := FSprites[i-1][stPoint.YID].X + FImageH ;
RoadPoint2.X := FSprites[i-1][endPoint.YID].X + FImageH;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -