📄 diablo.dpr
字号:
Monster[a, b].Shadow.Red := 0;
Monster[a, b].Shadow.Green := 0;
Monster[a, b].Shadow.Blue := 0;
Monster[a, b].Shadow.Alpha := 80;
Monster[a, b].Shadow.ImageName := Monster[a, b].ImageName;
Monster[a, b].Shadow.AnimCount := Monster[a, b].FramePerDir;
Monster[a, b].Shadow.AnimSpeed := 0.35;
Monster[a, b].Shadow.AnimLooped := True;
Monster[a, b].Shadow.DoAnimate := True;
Monster[a, b].Shadow.Direction := Monster[a, b].Direction;
Monster[a, b].Shadow.X1 := -(Monster[a, b].PatternWidth div 2) + Monster[a, b].X + 6;
Monster[a, b].Shadow.Y1 := (Monster[a, b].PatternHeight div 2) + Monster[a, b].Y;
Monster[a, b].Shadow.X2 := (Monster[a, b].PatternWidth div 2) + Monster[a, b].X + 6;
Monster[a, b].Shadow.Y2 := (Monster[a, b].PatternHeight div 2) + Monster[a, b].Y;
Monster[a, b].Shadow.X3 := Monster[a, b].PatternWidth + Monster[a, b].X + 6;
Monster[a, b].Shadow.Y3 := Monster[a, b].PatternHeight + Monster[a, b].Y;
Monster[a, b].Shadow.X4 := Monster[a, b].X + 6;
Monster[a, b].Shadow.Y4 := Monster[a, b].PatternHeight + Monster[a, b].Y;
end;
end;
end;
procedure DrawMonsters;
var
a, b: Integer;
begin
for a := 0 to High(Monster) - 1 do
begin
for b := 0 to High(Monster[0]) - 1 do
begin
Monster[a, b].Shadow.DoDraw;
Monster[a, b].Shadow.Move(1);
Monster[a, b].DoDraw;
Monster[a, b].Move(1);
Monster[a, b].Shadow.Direction := Monster[a, b].Direction;
Monster[a, b].Red := 65;
Monster[a, b].Green := 65;
Monster[a, b].Blue := 65;
Monster[a, b].Light.DoDraw;
Finger.Collision(Monster[a, b]);
end;
end;
end;
{
procedure THeroShadow.Draw;
begin
PowerDraw.Device.DrawTransForm(PowerDraw.Images.Image[ImageName],
PatternIndex,
RoundNormal(X1 + OffsetX - Parent.WorldX), RoundNormal(Y1 + OffsetY - Parent.WorldY),
RoundNormal(X2 + OffsetX - Parent.WorldX), RoundNormal(Y2 + OffsetY - Parent.WorldY),
RoundNormal(X3 + OffsetX - Parent.WorldX), RoundNormal(Y3 + OffsetY - Parent.WorldY),
RoundNormal(X4 + OffsetX - Parent.WorldX), RoundNormal(Y4 + OffsetY - Parent.WorldY),
MirrorH, MirrorV,
RGB1(Red, Green, Blue, Alpha), opSrcAlpha or opDiffuse);
end;
}
procedure CreateHero;
begin
Hero := THero.Create(SpriteEngine);
Hero.ImageName := 'Player';
Hero.Width:=Hero.PatternWidth;
Hero.Height:=Hero.PatternHeight;
Hero.X := 320;
Hero.Y := 200;
Hero.FramePerDir := 8;
Hero.AnimSpeed := 0.30;
Hero.DoAnimate := False;
Hero.AnimLooped := True;
Hero.AnimCount := 8;
Hero.Red := 65;
Hero.Green := 65;
Hero.Blue := 65;
Hero.Collisioned := True;
Hero.CollideRadius := 20;
//create hero's shadow
Hero.Shadow := TShadowSprite.Create(SpriteEngine);
Hero.Shadow.DrawMode := 3;
Hero.Shadow.Red := 0;
Hero.Shadow.Green := 0;
Hero.Shadow.Blue := 0;
Hero.Shadow.Alpha := 128;
Hero.Shadow.ImageName := 'Player';
Hero.Shadow.Width:=Hero.Shadow.PatternWidth;
Hero.Shadow.Height:=Hero.Shadow.PatternHeight;
Hero.Shadow.AnimCount := 8;
Hero.Shadow.FramePerDir := 8;
Hero.Shadow.AnimSpeed := 0.30;
Hero.Shadow.AnimLooped := True;
Hero.Shadow.DoAnimate := False;
end;
procedure DrawHero;
begin
Hero.Shadow.DoDraw;
Hero.Shadow.Move(1);
Hero.DoDraw;
Hero.Move(1);
Hero.Shadow.X1 := -(Hero.PatternWidth div 2) + Hero.X - 6;
Hero.Shadow.Y1 := (Hero.PatternHeight div 2) + Hero.Y;
Hero.Shadow.X2 := (Hero.PatternWidth div 2) + Hero.X + 6;
Hero.Shadow.Y2 := (Hero.PatternHeight div 2) + Hero.Y;
Hero.Shadow.X3 := Hero.PatternWidth + Hero.X + 6;
Hero.Shadow.Y3 := Hero.PatternHeight + Hero.Y;
Hero.Shadow.X4 := Hero.X + 6;
Hero.Shadow.Y4 := Hero.PatternHeight + Hero.Y;
Hero.Shadow.Direction := Hero.Direction;
end;
function Angles(X, Y: Integer): Real;
begin
Result := Abs(((Arctan2(X, Y) * 40.5)) - 128);
end;
procedure THero.DoMove(const MoveCount: Single);
var
Directions: Integer;
begin
inherited;
Hero.CollidePos := point2(320 + Engine.WorldX + 70, 200 + Engine.WorldY + 70);
Hero.X := Engine.WorldX + 320;
Hero.Y := Engine.WorldY + 200;
Directions := Round(Angles(trunc(MX) - 320, trunc(MY) - 200));
case Directions of
240..255,
0..15:
begin
Direction := 0;
Engine.WorldY := Engine.WorldY - Velocity1;
end;
16..47:
begin
Direction := 1;
Engine.WorldX := Engine.WorldX + Velocity2;
Engine.WorldY := Engine.WorldY - Velocity2;
end;
48..79:
begin
Direction := 2;
Engine.WorldX := Engine.WorldX + Velocity1;
end;
80..111:
begin
Direction := 3;
Engine.WorldX := Engine.WorldX + Velocity2;
Engine.WorldY := Engine.WorldY + Velocity2;
end;
112..143:
begin
Direction := 4;
Engine.WorldY := Engine.WorldY + Velocity1;
end;
144..175:
begin
Direction := 5;
Engine.WorldX := Engine.WorldX - Velocity2;
Engine.WorldY := Engine.WorldY + Velocity2;
end;
176..207:
begin
Direction := 6;
Engine.WorldX := Engine.WorldX - Velocity1;
end;
208..239:
begin
Direction := 7;
Engine.WorldX := Engine.WorldX - Velocity2;
Engine.WorldY := Engine.WorldY - Velocity2;
end;
end;
SetDirectionAnim;
end;
procedure THero.DoDraw;
begin
inherited;
Red := 65;
Green := 65;
Blue := 65;
Finger.Collision(Hero);
end;
function FrameFunc: Boolean;
begin
HGE.Input_GetMousePos(Mx,My);
if HGE.Input_KeyDown(HGEK_LBUTTON) then
begin
Velocity1 := 2;
Velocity2 := 1.5;
Hero.DoAnimate := True;
Hero.Shadow.DoAnimate := True;
end;
if HGE.Input_KeyUp(HGEK_LBUTTON) then
begin
Velocity1 := 0;
Velocity2 := 0;
Hero.DoAnimate := False;
Hero.Shadow.DoAnimate := False;
end;
case HGE.Input_GetKey of
HGEK_ESCAPE:
begin
FreeAndNil(Canvas);
FreeAndNil(Images);
FreeAndNil(SpriteEngine);
FreeAndNil(Font);
Result := True;
Exit;
end;
end;
Result := False;
end;
function RenderFunc: Boolean;
begin
HGE.Gfx_BeginScene;
HGE.Gfx_Clear(0);
DrawTiles;
DrawMonsters;
DrawHero;
Canvas.DrawEx(Images.Image['Light'],0,250,220,0,0,0.5,0.3,false,false,
$FFFFFFFF,Blend_Light);
Finger.Move(1);
Canvas.Draw(Images.Image['panel1'],0,120, 555, Blend_Default);
Canvas.Draw(Images.Image['panel3'],0, 0, 500, Blend_Default);
Canvas.Draw(Images.Image['panel2'],0,690, 500, Blend_Default);
Finger.DoDraw;
Font.Print(100,100,IntToStr(HGE.Timer_GetFPS));
Font.Print(300,500,'Mouse Down to Walk');
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
Font:=TSysFont.Create;
Font.CreateFont('arial',12,[]);
Images.LoadFromFile('Gfx\Dark Lord.png',54,79);
Images.LoadFromFile('Gfx\Desert Wing.png',98,77);
Images.LoadFromFile('Gfx\Enraged Fallen.png',54,64);
Images.LoadFromFile('Gfx\Enraged Shaman.png',123,111);
Images.LoadFromFile('Gfx\Night Clan.png',46,75);
Images.LoadFromFile('Gfx\Mega Demon.png',171,153);
Images.LoadFromFile('Gfx\Hell Buzzard.png',70,86);
Images.LoadFromFile('Gfx\Player.png',83,108);
Images.LoadFromFile('Gfx\Floor.png',160,80);
Images.LoadFromFile('Gfx\Finger.png');
Images.LoadFromFile('Gfx\Light.png');
Images.LoadFromFile('Gfx\Panel1.png');
Images.LoadFromFile('Gfx\Panel2.png');
Images.LoadFromFile('Gfx\Panel3.png');
CreateTiles(100, 100, -3000, -3000);
CreateMonsters(30, 30);
CreateHero;
Finger := TFinger.Create(SpriteEngine);
Finger.ImageName := 'finger';
Finger.Width:=Finger.PatternWidth;
Finger.Height:=Finger.PatternHeight;
Finger.Collisioned := True;
Finger.CollideRadius := 16;
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 + -