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

📄 main.pas

📁 刚从网上找到的连连看的源码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    //showmessage(inttostr(ARegInfo.RunData));
    WriteUserInfo(ARegInfo,ADecKey,TStream(File1),false);
    WriteUserInfo(ARegInfo,ADecKey,TStream(FParentFile),false);
    File1.Free;
  end;
begin
  try
    //if FParentFile = nil then
  except
    //showmessage(ParamStr(2));
    //Application.Terminate;
  end;

  getUserSn(Reginfo);
  if isSameSn(ARegInfo.Sn,Reginfo.Sn) and  ARegInfo.Reged then
    exit;

  if not(isSameSn(ARegInfo.Sn,Reginfo.Sn)) then
  begin
    //showmessage(ARegInfo.Sn[0]+'-'+ARegInfo.Sn[1]+'-'+ARegInfo.Sn[2]+'-'+ARegInfo.Sn[3]);
    AssignSn(ARegInfo,Reginfo.Sn);
    //showmessage(ARegInfo.Sn[0]+'-'+ARegInfo.Sn[1]+'-'+ARegInfo.Sn[2]+'-'+ARegInfo.Sn[3]);
    //ARegInfo.InstallDate := now;
    ARegInfo.Reged := false;
    //showmessage(Reginfo.Sn[0]+'-'+Reginfo.Sn[1]+'-'+Reginfo.Sn[2]+'-'+Reginfo.Sn[3]);
  end;
  getOldUserInfo;
end;
{ TMonoSprite }

procedure TMonoSprite.Click;
begin
  showmessage('');
end;

procedure TMonoSprite.DoDead;
begin
  //Collisioned := False;
  ISDead := true;
  Dead;

  //Image := Form1.ImageList.Items.Find('100');

end;

procedure TMonoSprite.DoMove(MoveCount: Integer);
var
  GammaRamp: TDDGammaRamp;
  i: Integer;
begin
  inherited DoMove(MoveCount);

  if not Collisioned then
  begin
    Inc(FS, MoveCount);
    if FS > 10000 then
      Dead;
  end;


end;

procedure TMonoSprite.Hit;
begin

end;

procedure TMonoSprite.WMLButtonUp(var Message: TWMLButtonUp);
begin
  if PtInRect(ClientRect, SmallPointToPoint(Message.Pos)) then Click;
end;

{ TMyBackGroubd }



procedure TMyBackGroubd.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
  inherited;

end;

procedure TMyBackGroubd.DoMove(MoveCount: Integer);
begin
  inherited;
  //image.Draw(Form1.DXDraw.Surface,100,100,1);
end;

procedure TForm1.Initialize(isStep: boolean = false);
var
  i,j,n,m,k: integer;
  SpriteImageID1: TSpriteImageID;
begin
  //FPaused := false;
  //DXTimer1.Enabled := false;
  case FLevel of
   1 :
    begin
      if FStep > 10 then
      begin
        FStop := true;
        ShowScores(true,FScore);
        FStep := 1;
        DXWaveList1.Items.Find('tada').Play(false);
        if MessageDlg(FStrs[40],
          mtConfirmation, [mbYes, mbNo], 0) = mrYes then
        begin
          {inc(FLevel);
          FSpritesCount := 192;
          ImageCount := 48;}
          NewGame(2);
        end
        else
        begin
          FGameState := gtWait;
          ShowScores(true,FScore);
        end;
       FStop := false;
      end
      else
      begin
        FSpritesCount := 160;
        FSpritesCount2 := 96;
        ImageCount := 24;
        ImageCount2 := 8;
      end;
      OneImageCount := FSpritesCount2 div ImageCount;
      OneImageCount2 := (FSpritesCount- FSpritesCount2) div ImageCount2;
    end;
   2 :
   begin
      if FStep > 10 then
      begin
        FStop := true;
        ShowScores(true,FScore);
        FStep := 1;
        DXWaveList1.Items.Find('tada').Play(false);
        if MessageDlg(FStrs[40],
          mtConfirmation, [mbYes, mbNo], 0) = mrYes then
        begin
          {inc(FLevel);
          FSpritesCount := 240;
          ImageCount := 60; }
          NewGame(3);
        end
        else
        begin
          FGameState := gtWait;
          ShowScores(true,FScore);
        end;
        FStop := false;
      end
      else
      begin
        FSpritesCount := 192;
        FSpritesCount2 := 160;
        ImageCount := 40;
        ImageCount2 := 4;
      end;
      OneImageCount := FSpritesCount2 div ImageCount;
      OneImageCount2 := (FSpritesCount - FSpritesCount2) div ImageCount2;
    end;
   3 :
   begin
      //pass
      if FStep > 10 then
      begin
        FStop := true;
        ShowScores(true,FScore);
        FStep := 1;
        DXWaveList1.Items.Find('tada').Play(false);
        if MessageDlg(FStrs[41],
          mtConfirmation, [mbYes, mbNo], 0) = mrYes then
        begin
          {FLevel := 1;
          FStep := 1;
          FSpritesCount := 160;
          ImageCount := 40;
          FScore := 0; }
          NewGame(1);
        end
        else
        begin
          FGameState := gtWait;
          //ShowScores(true,FScore);
        end;
          FStop := false;
      end
      else
      begin
        FSpritesCount := 240;
        FSpritesCount2 := 192;
        ImageCount := 48;
        ImageCount2 := 8;
      end;
      OneImageCount := FSpritesCount2 div ImageCount;
      OneImageCount2 := (FSpritesCount- FSpritesCount2) div ImageCount2;
    end;
  end;

  FTotleScore := FBaseScore*FLevel*FLevel +  FIniScore*FStep;
  FOneSpriteScore := round(FTotleScore / (FSpritesCount /2));
  FOneTime := round(FTime / (FSpritesCount /2));

  FTime := 420+60*FLevel;

  if FGameState = gtWait then exit;

  washing := false;

  getXY(FSpritesCount,Ax,Ay);

  setlength(FSprites,Ax);
  for i := low(FSprites) to high(FSprites) do
  begin
    setlength(FSprites[i],Ay);
  end;

  n := 1;
  k := 0;
  m := 0;

  w := (DXDraw.width - Ax*FImageW) div 2;
  if IS800x600 then
    h := (DXDraw.height - Ay*FImageH) div 2+FImageH
  else
    h := (DXDraw.height - Ay*FImageH) div 2;

  SpriteImageID1 := [];
  for i := low(FSprites) to high(FSprites)  do
  begin
    for j := low(FSprites[i]) to high(FSprites[i]) do
    begin
      with FSprites[i][j] do
      begin
        ImageID := n;
        ID := k;
        inc(k);
        inc(m);
        if k = FSpritesCount2 then
        begin
          OneImageCount := OneImageCount2;
          m := 0;
        end;
        if (m mod OneImageCount = 0) then
        begin
          Randomize;
          while n in SpriteImageID1 do
          begin
            n := randomrange(1,100);
          end;
          //inc(n);
          include(SpriteImageID1,n);
        end;
        if n > ImageList.Items.Count then
          n := 1;
        X := w + i*FImageW;
        Y := h + j * FImageH;
        XID := i;
        YID := j;
        Dead := false;
      end;
    end;
  end;



  for i := low(FocusedSprite) to high(FocusedSprite) do
  begin
    FocusedSprite[i].ID := - 1 ;
  end;

  InitializeSprite;
  Randomsprite;
  //DXTimer1.Enabled := true;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  CheckUseInfo(FRegInfo,FDecKey);
  if not(FRegInfo.Reged) and (FRegInfo.RunData >FMaxRunData) then
    fmReg.ShowModal;
  DXDraw.Width := Width;
  DXDraw.height := Height;

  {DXDraw.Display.Width := 1024;
  DXDraw.Display.Height := 768;
  DXDraw.Display.BitCount := 32;
  DXDraw.Options := DXDraw.Options + [doFullScreen];
  DXDraw.Initialize;}
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
var
  i,i1,j1: integer;
  R: TRect;
  procedure DrawRegInfo;
  begin
    if FRegInfo.Reged then exit;
    with DXDraw.Surface.Canvas do
    begin
      Font.Color := clRed;
      Font.Size := 12;
      textout(DXDraw.Surface.Width - textwidth(FStrs[47])-5,20,FStrs[47]);
      textout(DXDraw.Surface.Width - textwidth(FStrs[17]+':'+formatfloat('00',FMaxRunData - FRegInfo.RunData)+
              FStrs[48])-5,40,
              FStrs[17]+':'+formatfloat('00',FMaxRunData - FRegInfo.RunData)+
              FStrs[48]);
      release;
    end;
  end;
begin
  if not(FRegInfo.Reged) and (FRegInfo.RunData >FMaxRunData)
    and (FGameState = gtRuning) then
  begin
    inc(FShowRegTime);
    if (FShowRegTime > (1000 div DXTimer1.Interval)*30) and FShowReg then
    begin
      FShowReg := false;
      fmReg.Close;
      fmReg.Hide;
      fmReg.ShowModal;
      FShowReg := true;
      FShowRegTime := 0;
    end;
  end;

  if FStop or Washing or FClose then
  begin
    DXDraw.Surface.Canvas.Release;
    DXDraw.Flip;
    exit;
  end;
  try
  DXInput.Update;

  try
    DXSpriteEngine.Dead;
    //DXSpriteEngine.
    DXSpriteEngine.Move(LagCount);
  except
  end;

  if (selfDo) and (FGameState = gtRuning) then   //auto
  begin
    inc(incTime3);
    if (incTime3 >= (200 div DXTimer1.Interval)) and not(Washing) then
    begin
      try
      getFirstRaodPoint(FFirstRoadPoint[0],FFirstRoadPoint[1],true);
      except
      end;
      incTime3 := 0;
    end;
  end;
  if Washing then exit;
  //controls
  if isButton5 in DXInput.States then
  begin
    for i := 0 to DXSpriteEngine.Engine.Count - 1 do
    begin
      DXSpriteEngine.Engine[i].Dead;
    end;
    Application.Terminate;
    exit;
  end;

  if isButton7 in DXInput.States then
  begin
  //DXImageList1.Items.Clear;
  if SaveDialog1.Execute then
  begin
    {for i := 1 to 100 do
    begin
      DXImageList1.Items.Add;
      DXImageList1.Items[i-1].Picture.LoadFromFile('E:\my program\link and look\face\QQ1\'+inttostr(i)+' 副本.bmp' );
    end;
    for i := 0 to DXImageList1.Items.Count - 1 do
    begin
      DXImageList1.Items[i].Name := inttostr(i+1);
    end; 
    Back47x37.Items.SaveToFile(SaveDialog1.FileName+'1.dxg');
    Back57x45.Items.SaveToFile(SaveDialog1.FileName+'.dxg'); }
    //DXWaveList1.Items.SaveToFile(SaveDialog1.FileName+'.dxw'); }
  end;
  end;

  if not DXDraw.CanDraw then exit;
  if FGameState = gtWait then
  begin
    DXDraw.Surface.Fill(0);
    Inc(FAngle);
    with DXImageList1.Items.Find('logo') do
    DrawWaveX(DXDraw.Surface, (DXDraw.Surface.Width - width) div 2 - width div 2+20,
          (DXDraw.Surface.Height - Height) div 2 - Height div 2,
          width+width div 2,
          Height + Height div 2,
          0,4,200, FAngle*10);

    DrawRegInfo;

    DXDraw.Flip;
    exit;
  end;

  if FGameState = gtGameOver then
  begin

    if DXDraw.CanDraw then
    begin
      with DXImageList1.Items.Find('gameover') do
      Draw(DXDraw.Surface,
          (DXDraw.Surface.Width - width) div 2,
            (DXDraw.Surface.Height - Height) div 2,0) ;
    end;

    DrawRegInfo;

    DXDraw.Flip;
    inc(incTime1);
     if incTime1 >= (2000 div DXTimer1.Interval) then
     begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -