⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 刚从网上找到的连连看的源码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  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 + -