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

📄 maplestory.dpr

📁 此為國外大名鼎鼎的2D遊戲引擎HGE的Delphi版本 原官方是C++的,現在完全改為Delphi可使用,另外再增加許多單元與功能 新增的單元有HGEImages,HGECanvas,HGEDef
💻 DPR
字号:
program MapleStory;

{$R *.res}

uses
  Windows, Classes, SysUtils, StrUtils, HGEImages, HGECanvas, HGE,
  HGESpriteEngine;

type
  TMapRec = record
      X, Y, Z: Integer;
      ImageName: string[50];
  end;

var
  HGE: IHGE = nil;
  Images: THGEimages;
  Canvas: THGECanvas;
  SpriteEngine: TSpriteEngine;
  FileSize: Integer;
  MapData: array of TMapRec;
  PosX: Integer;

procedure LoadImages;
var
  FileSearchRec: TSearchRec;
begin
  if FindFirst(ExtractFilePath(ParamStr(0)) + 'Gfx\'+ '*.png', faAnyfile, FileSearchRec) = 0 then
  repeat
    Images.LoadFromFile('Gfx\'+FileSearchRec.Name);
  until  FindNext(FileSearchRec) <> 0;
  FindClose(FileSearchRec);
end;

procedure LoadMap(FileName: string);
var
  Fs: TFileStream;
begin
     Fs := TFileStream.Create(ExtractFilePath(ParamStr(0)) + FileName, fmOpenRead);
     Fs.ReadBuffer(FileSize, SizeOf(FileSize));
     SetLength(MapData, FileSize);
     Fs.ReadBuffer(MapData[0], SizeOf(TMapRec) * FileSize);
     Fs.Destroy;
end;

procedure CreateMap(OffX, OffY: Integer);
var
  I: Integer;
begin
  for I := 0 to FileSize - 1   do
  begin
    if (Leftstr(MapData[I].ImageName, 3) = 'Obj') or
    (Leftstr(MapData[I].ImageName, 4) = 'Tile')  then
    begin
      with  TSprite.Create(SpriteEngine) do
      begin
        ImageName := MapData[I].ImageName;
        Width := PatternWidth;
        Height:= PatternHeight;
        X := MapData[I].X + OffX;
        Y := MapData[I].Y + OffY;
        Z := MapData[I].Z;
        Moved := False;
      end;
    end;
    //
    if  (MapData[I].ImageName = 'MapHelper.img.Portal') then
    begin
       with  TAnimatedSprite.Create(SpriteEngine) do
       begin
         ImageName := MapData[I].ImageName;
         Width := PatternWidth;
         Height:= PatternHeight;
         X := MapData[I].X +OffX;
         Y := MapData[I].Y +OffY;
         Z := MapData[I].Z;
         SetAnim(ImageName, 0, PatternCount, 0.15, True, False, True);
       end;
    end;
  end;

end;

function FrameFunc: Boolean;
begin
  if HGE.Input_GetKeyState(HGEK_UP) then
     SpriteEngine.WorldY := SpriteEngine.WorldY- 3;
  if HGE.Input_GetKeyState(HGEK_Down) then
     SpriteEngine.WorldY := SpriteEngine.WorldY+ 3;
  if HGE.Input_GetKeyState(HGEK_Left) then
     SpriteEngine.WorldX := SpriteEngine.WorldX- 3;
  if HGE.Input_GetKeyState(HGEK_Right) then
     SpriteEngine.WorldX :=  SpriteEngine.WorldX+ 3;
  if  SpriteEngine.WorldX <- 1100 then
      SpriteEngine.WorldX :=- 1100;
  if  SpriteEngine.WorldX > 2480 then
      SpriteEngine.WorldX := 2480;
  if  SpriteEngine.WorldY > -20 then
      SpriteEngine.WorldY := -20;
  if  SpriteEngine.WorldY < -1600 then
      SpriteEngine.WorldY := -1600;
  case HGE.Input_GetKey of
    HGEK_ESCAPE:
    begin
      FreeAndNil(Canvas);
      FreeAndNil(Images);
      FreeAndNil(SpriteEngine);
      Result := True;
      Exit;
    end;
  end;
  Result := False;
end;

function RenderFunc: Boolean;
begin
  HGE.Gfx_BeginScene;
  HGE.Gfx_Clear(ARGB(255,0,150,250));
  Canvas.DrawPart(Images.Image['Back.1'],0, 0, PosX, 0, 1024 + PosX, 579, $FFFFFFFF, Blend_Default);
  Canvas.Draw(Images.Image['Back.5'], 0, 0, 345, Blend_Default);
  Inc(PosX);
  SpriteEngine.Draw;
  SpriteEngine.Move(1);
  HGE.Gfx_EndScene;
  Result := False;
end;

procedure Main;
begin
  HGE := HGECreate(HGE_VERSION);
  HGE.System_SetState(HGE_FRAMEFUNC,FrameFunc);
  HGE.System_SetState(HGE_RENDERFUNC,RenderFunc);
  HGE.System_SetState(HGE_USESOUND, False);
  HGE.System_SetState(HGE_WINDOWED,False);
  HGE.System_SetState(HGE_SCREENWIDTH, 800);
  HGE.System_SetState(HGE_SCREENHEIGHT,600);
  HGE.System_SetState(HGE_SCREENBPP, 16);
  HGE.System_SetState(HGE_TEXTUREFILTER, False);
  HGE.System_SetState(HGE_FPS, HGEFPS_VSYNC);
  Canvas := THGeCanvas.Create;
  Images := THGEImages.Create;
  SpriteEngine := TSpriteEngine.Create(nil);
  Spriteengine.Images := Images;
  SpriteEngine.Canvas := Canvas;
  if (HGE.System_Initiate) then
  begin
    LoadImages;
    Images.LoadFromFile('MapHelper.img.Portal.png', 88, 256);
    LoadMap('Amherst.map');
    CreateMap(3440, 200);
    HGE.System_Start;
  end
  else
    MessageBox(0,PChar(HGE.System_GetErrorMessage),'Error',MB_OK or MB_ICONERROR or MB_SYSTEMMODAL);

  HGE.System_Shutdown;
  HGE := nil;
end;

begin
  ReportMemoryLeaksOnShutdown := True;
  Main;
end.

⌨️ 快捷键说明

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