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

📄 main.pas

📁 一般的数据库管理系统 uses Classes, SConnectEx, TltConst, ExtCtrls, MMSystem, Types, windows, TltLogic , Sy
💻 PAS
📖 第 1 页 / 共 3 页
字号:
        Count := 500;
        Center := Point(DXDraw.Width div 2,DXDraw.Height div 2);
        YesRect := Rect(Center.X-45,Center.Y-10,Center.X+45, Center.Y + 10);
        OffsetRect(YesRect, -60,20);
        CancelRect := YesRect;
        OffsetRect(CancelRect, 120,0);
        MSGBoxRect := Rect(DXDraw.Width div 2 - 150,
          DXDraw.Height div 2 - 45,
          DXDraw.Width div 2 + 150,
          DXDraw.Height div 2 + 45);
        //DXDraw.Surface.Canvas.Release;
        with Msgboxbmp.Canvas do
        if DXDraw.CanDraw  then
        begin
          Font.Charset := GB2312_CHARSET;
          Pen.Color := $FD956c;
          Pen.Style := psSolid;
          Brush.Style := bsClear;
          Font.Color := $FD956c;
          Font.Name := '宋体';
          Font.Size := 9;
          DXInput1.Update;
          GetCursorPos(Cursor);
          Cursor := DXDraw.ScreenToClient(Cursor);

          Brush.Style := bsSolid;
          Brush.Color := $555555;
          if PtInRect(YesRect, Cursor) then FillRect(YesRect);
          if PtInRect(CancelRect, Cursor) then FillRect(CancelRect);

          Brush.Style := bsClear;
          with MSGBoxRect do Rectangle(Left, Top, Right, Bottom);
          with YesRect do Rectangle(Left, Top, Right, Bottom);
          with CancelRect do Rectangle(Left, Top, Right, Bottom);
          if PtInRect(YesRect, Cursor) then Font.Color := clWhite else Font.Color := $FD956c;
          TextOut(YesRect.Left+26, YesRect.Top+4, '重  试');
          if PtInRect(CancelRect, Cursor) then Font.Color := clWhite else Font.Color := $FD956c;
          TextOut(CancelRect.Left+26, CancelRect.Top+4, '取  消');
          Font.Color := clWhite;
          TextOut(MSGBoxRect.Left+26, MSGBoxRect.Top+20, '连接服务器失败!');
          Release;
          DXDraw.Surface.Draw(0,0,Rect(0,0,800, 600), Msgboxbmp, false);
          DrawMouse;

          //鼠标被按下
          if isButton1 in DXInput1.Mouse.States then
          begin
            if PtInRect(YesRect, Cursor) then
            begin
              Count := 0;
              Continue;
            end;
            if PtInRect(CancelRect, Cursor) then
            begin
              Break;
            end;
          end;

          //Unlock;
        end;
      end;
      DXDraw.Flip;
    end
    else
    begin
      Messagebox(Handle, '连接失败', '', MB_OK or MB_ICONERROR);
      Application.Terminate;
      Break;
    end;

    Application.ProcessMessages;
    if (GetTickCount-lt)<25 then sleep(GetTickCount-lt);

    while ((GetTickCount-lt)<30) do;
  end;



  ConnectBmp.Free;
  Msgboxbmp.Free;
}
  MainForm.Visible := false;;
  Count := 0;
  while ((not RltConnection.Connected) and (not Application.Terminated)) do
  begin
    inc(Count);
    lt := GetTickCount;
    DXInput1.Update;
    if Count = 1 then RltConnection.Connected := true;
    if (Count <500)  then
    begin
      case (Count div 25)mod 2 of
        0: begin
          ShowLoading('连接服务中...');
        end;
        1: begin
          ShowLoading('连接服务中   ');
        end;
      end;
      if RltConnection.GetLastError <> 0 then Count := 450;
    end
    else
    begin
      if IDYes = MessageBox(Handle, '连接服务器失败,是否重试?','', MB_YESNO or MB_ICONQUESTION) then
      begin
        Count := 0;
        Continue;
      end else
        Break;
    end;

    Application.ProcessMessages;
    if (GetTickCount-lt)<25 then sleep(GetTickCount-lt);
    while ((GetTickCount-lt)<30) do;

    if RltConnection.Connected then
    begin
      TltInterpreter := TrltClientInterpreter(RltConnection.GetInterpreter);
      if TltInterpreter.CallGetCurrentRound.State = rsStop then
      begin
        RltConnection.Connected := false;
      end;
    end;
  end;
  HideLoading;
  if RltConnection.Connected then
  begin
    MainForm.Visible := True;
    rlt.Round.State := rsBeting ;

    TltInterpreter := TrltClientInterpreter(RltConnection.GetInterpreter);
    rlt.TimeSetting :=TltInterpreter.CallGetTimeSetting;

    Level1 := 1;
    InitMidi;
  end else
    Level1 := 255;

end;
var
  Counter : integer = 0;
procedure TMainForm.GameStart;
begin
  rlt.Update;
  rlt.Draw;
  //draw  
end;

procedure TMainForm.StartDemo;
var
  LogoBmp : TDirectDrawSurface;
  Count : integer;
  lt : longint;
//  DDGammaRamp : TDDGammaRamp;
  DDColorControl : TDDColorControl;

  Trans : longint;
begin
  if not DXDraw.CanDraw then Exit;
  LogoBmp := TDirectDrawSurface.Create(DXDraw.DDraw);
//  LogoBmp.GammaControl.SetGammaRamp(0, DDGammaRamp)
  LogoBmp.LoadFromFile(ExtractFilePath(Application.ExeName)+'bmp\logo.bmp');
  DXInput1.Update;
  Count := 0;
  while (Count<100)and(DXInput1.States = []) do
  begin
    inc(count);
    lt := GetTickCount;
    DXInput1.Update;
    DXDraw.Surface.FillRect(Rect(0,0,DXDraw.Width,DXDraw.Height) ,0);
    case Count of
      0..50: Trans := Count * 256 div 50;
      51..99 : Trans := (100 - Count) * 256 div 50;
    end;
    DXDraw.Surface.DrawAlpha(Rect(DXDraw.Width div 2 - 150,
      DXDraw.Height div 2 - 45,
      DXDraw.Width div 2 + 150,
      DXDraw.Height div 2 + 45),
      Rect(0,0,300,90), LogoBmp, true, Trans);
    DXDraw.Flip;
    while ((GetTickCount-lt)<30) do;
  end;


  LogoBmp.Free;

end;

procedure TMainForm.DXDrawInitialize(Sender: TObject);
var
  LightFrame: IDirect3DRMFrame;
  Light, AmbientLight: IDirect3DRMLight;
  MeshBuilder, MeshBuilder2: IDirect3DRMMeshBuilder;
  image1,image2,image3,image4: IDirect3DRMTexture;
  Result : HRESULT;
  //Mesh, NewMesh : IDirect3DRMMesh;
  FaceArray : IDirect3DRMFaceArray;
  VertexArray : IDirect3DRMVisualArray;
  Face : IDirect3DRMFace;
  i : integer;
  V : TD3DRMVertex;
  vertices: TD3DVector;
  ncount: DWORD;
  normals: TD3DVector;
  face_data_size: DWORD;
  face_data: DWORD;

  vCount ,
  fCount, vPerFace,
        fDataSize, fData : DWORD;
  index : TD3DRMGroupIndex;
  returnPtr: TD3DRMVertex;
  IMaterial: IDirect3DRMMaterial;

type
  TArrayVertex = array of TD3DRMVertex;
  PArrayVertex = ^TArrayVertex;
var
  ArrayVertex : array[0..500] of TD3DRMVertex;
  NormalVertex : array[0..500] of TD3DRMVertex;
  buf : array [0..5000] of DWORD;
  groupid : TD3DRMGroupIndex;  
begin
  vCount := 0;
  fCount := 0;
  vPerFace:= 0;

  {  Frame making  }
  DXDraw.D3DRM.CreateFrame(DXDraw.Scene, LightFrame);
  DXDraw.D3DRM.CreateFrame(DXDraw.Scene, MeshFrame);
  DXDraw.D3DRM.CreateFrame(DXDraw.Scene, DyMeshFrame);
  DXDraw.D3DRM.CreateFrame(DXDraw.Scene, BallMeshFrame);

  {  Light setting  }
  DXDraw.D3DRM.CreateLightRGB(D3DRMLIGHT_DIRECTIONAL, 5, 5, 5, Light);
  LightFrame.AddLight(Light);

  DXDraw.D3DRM.CreateLightRGB(D3DRMLIGHT_AMBIENT, 0.5, 0.5, 0.5, AmbientLight);
  DXDraw.Scene.AddLight(AmbientLight);

  {  Frame position and posture setting  }
  //方向光源
  LightFrame.SetPosition(DXDraw.Scene, 0, 240, -300);
  LightFrame.SetOrientation(DXDraw.Scene, -1, -1, 1, 0.0, 1.0, 0.0);
  DXDraw.Camera.SetPosition(DXDraw.Scene, 0, 80, -80);
  DXDraw.Camera.SetOrientation(DXDraw.Scene,  0,-1, 1, 0, 1, 0);

  MeshFrame.SetPosition(DXDraw.Scene, 0, 0, 0);
  MeshFrame.SetOrientation(DXDraw.Scene, 0.0, 1, 0, 0.0, 1.0, 0.0);
  MeshFrame.SetRotation(DXDraw.Scene,  0,1 , 0, 0.05);

  DyMeshFrame.SetPosition(DXDraw.Scene, 0, 0, 0);
  DyMeshFrame.SetOrientation(DXDraw.Scene, 0.0, 1, 0, 0.0, 1.0, 0.0);
  DyMeshFrame.SetRotation(DXDraw.Scene,  0,1 , 0, 0.05);

  BallMeshFrame.SetPosition(DXDraw.Scene, 0, 0, 0);
  BallMeshFrame.SetOrientation(DXDraw.Scene, 0.0, 1, 0, 0.0, 1.0, 0.0);
  BallMeshFrame.SetRotation(DXDraw.Scene,  0,1 , 0, 0.05);


  {  Mesh making  }
  DXDraw.D3DRM.CreateMeshBuilder(MeshBuilder);
  DXDraw.D3DRM.CreateMeshBuilder(MeshBuilder2);

  //if FileName='' then
  FileName := ExtractFilePath(Application.ExeName)+'1.X';
  ChDir(ExtractFilePath(FileName));
  Result := MeshBuilder.Load(PChar(FileName), nil, D3DRMLOAD_FROMFILE, nil, nil);
  MeshBuilder.Translate(15,0,2.5);

  if (Result <> D3DRM_OK) then
  begin
    ShowMessage(IntToHex(Result,2));
  end;

  MeshBuilder.Scale(5,5 , 5);
  MeshBuilder.SetColor(D3DRGB(1, 1, 1));

  DXDraw.D3DRM.LoadTexture(PChar(ExtractFilePath(Application.ExeName)+'bmp\round512.bmp'), image1);
  DXDraw.D3DRM.LoadTexture(PChar(ExtractFilePath(Application.ExeName)+'bmp\edge.BMP'), image2);
  DXDraw.D3DRM.LoadTexture(PChar(ExtractFilePath(Application.ExeName)+'bmp\metal.bmp'), image3);
  DXDraw.D3DRM.LoadTexture(PChar(ExtractFilePath(Application.ExeName)+'bmp\desktop.bmp'), image4);


//  MeshBuilder.SetTexture(image);
//  MeshBuilder.CreateMesh(Mesh);

  VertexCount := MeshBuilder.GetVertexCount;
  FaceCount := MeshBuilder.GetFaceCount;
  MeshBuilder.GetFaces(FaceArray);
  MeshBuilder.GetVertices(vcount, vertices, ncount, normals, face_data_size, face_data);
  MeshBuilder.CreateMesh(Mesh);
  GroutCount := mesh.GetGroupCount;

  DXDraw.D3DRM2.CreateMesh(Mesh0);
  DXDraw.D3DRM2.CreateMesh(Mesh1);
  DXDraw.D3DRM2.CreateMesh(Mesh2);
  DXDraw.D3DRM2.CreateMesh(Mesh3);
  fDataSize := 5000;
  fData := DWORD(@buf);
  Mesh.GetGroupMaterial(0, IMaterial);

  Result :=Mesh.GetGroup(0,vCount, fCount, vPerFace, fDataSize, fData);
  if (Result <> D3DRM_OK) then
  begin
    ShowMessage(IntToHex(Result,2));
  end;

  Result :=  Mesh.GetVertices(0, 0, vCount, PD3DRMVertex(@ArrayVertex)^);
  if (Result <> D3DRM_OK) then
  begin
    ShowMessage(IntToHex(Result,2));
  end;
  Mesh0.AddGroup(vCount, fCount, vPerFace, PDWORD(@buf)^, groupid);
  Mesh0.SetGroupQuality(groupid, D3DRMRENDER_FLAT);
  Mesh0.SetVertices(0,0,vCount, PD3DRMVertex(@ArrayVertex)^);
  Mesh0.SetGroupTexture(groupid, image2);
  Mesh0.SetGroupQuality(0, Mesh.GetGroupQuality(0));
  Mesh0.SetGroupMaterial(0, IMaterial);
//  Mesh0.SetGroupQuality(0, Mesh.GetGroupQuality(0));

  fDataSize := 5000;
  vCount := 0;
  fCount := 0;
  vPerFace:= 0;
  fData := DWORD(@buf);

  Result := Mesh.GetGroup(1, vCount, fCount, vPerFace, fDataSize, fData);
  if (Result <> D3DRM_OK) then
  begin
    ShowMessage(IntToHex(Result,2));
  end;
  Result := Mesh.GetVertices(1, 0, vCount, PD3DRMVertex(@ArrayVertex)^);
  if (Result <> D3DRM_OK) then
  begin
    ShowMessage(IntToHex(Result,2));
  end;

  Mesh1.AddGroup(vCount, fCount, vPerFace, PDWORD(@buf)^, groupid);
  Mesh1.SetGroupQuality(groupid, D3DRMRENDER_FLAT);
  Mesh1.SetVertices(0,0,vCount, PD3DRMVertex(@ArrayVertex)^);
  Mesh1.SetGroupTexture(groupid, image4);
  Mesh1.SetGroupMaterial(0, IMaterial);
  Mesh1.SetGroupQuality(0, Mesh.GetGroupQuality(0));

  fDataSize := 5000;
  Mesh.GetGroup(2, vCount, fCount, vPerFace, fDataSize, fData);
  Mesh.GetVertices(2, 0, vCount, PD3DRMVertex(@ArrayVertex)^);
  Mesh2.AddGroup(vCount, fCount, vPerFace, PDWORD(@buf)^, groupid);
  Mesh2.SetGroupQuality(groupid, D3DRMRENDER_FLAT);
  Mesh2.SetVertices(0,0,vCount, PD3DRMVertex(@ArrayVertex)^);
  Mesh2.SetGroupTexture(groupid, image3);
  Mesh2.SetGroupMaterial(0, IMaterial);
  Mesh2.SetGroupQuality(0, Mesh.GetGroupQuality(0));

  fDataSize := 5000;
  Mesh.GetGroup(3, vCount, fCount, vPerFace, fDataSize, fData);
  Mesh.GetVertices(3, 0, vCount, PD3DRMVertex(@ArrayVertex)^);
  Mesh3.AddGroup(vCount, fCount, vPerFace, PDWORD(@buf)^, groupid);
  Mesh3.SetGroupQuality(groupid, D3DRMRENDER_FLAT);
  Mesh3.SetVertices(0,0,vCount, PD3DRMVertex(@ArrayVertex)^);
  Mesh3.SetGroupTexture(groupid, image1);
  Mesh3.SetGroupMaterial(0, IMaterial);
  Mesh3.SetGroupQuality(0, Mesh.GetGroupQuality(0));


  Mesh.SetGroupTexture(0, image2);
  Mesh.SetGroupTexture(1, image4);
  Mesh.SetGroupTexture(2, image3);
  Mesh.SetGroupTexture(3, image1);
 // Result := Mesh.GetVertices(3, 10, 10, returnPtr);
  if (Result <> D3DRM_OK) then
  begin
    ShowMessage(IntToHex(Result,2));
  end;
  //load ball
  FileName := 'ball.x';
  Result := MeshBuilder2.Load(PChar(FileName), nil, D3DRMLOAD_FROMFILE, nil, nil);
  if (Result <> D3DRM_OK) then
  begin
    ShowMessage(IntToHex(Result,2));
  end;
  MeshBuilder2.Scale(1.4,1.4,1.4);
  MeshBuilder2.SetColor(D3DRGB(1, 1, 1));
  MeshBuilder2.CreateMesh(BallMesh);
//  MeshBuilder2.SetTexture(image1);
  BallMesh.SetGroupTexture(0, image3);
  Result :=  BallMesh.Translate(-2,4.5,24);

  if (Result <> D3DRM_OK) then
  begin
    ShowMessage(IntToHex(Result,2));
  end;

    if (Result <> D3DRM_OK) then
  begin
    ShowMessage(IntToHex(Result,2));
  end;

⌨️ 快捷键说明

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