亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ripple.dpr

?? 此為國外大名鼎鼎的2D遊戲引擎HGE的Delphi版本 原官方是C++的,現在完全改為Delphi可使用,另外再增加許多單元與功能 新增的單元有HGEImages,HGECanvas,HGEDef
?? DPR
字號:
program Ripple;
//---------------------------------------------------------------------------
// Asphyre example application
// Copyright (c) 2000 - 2007  Afterwarp Interactive
//---------------------------------------------------------------------------
// This demo illustrates how to render isometric terrain with variable
// height using Asphyre Compact Framework.
//---------------------------------------------------------------------------
// The contents of this file are subject to the Mozilla Public License
// Version 1.1 (the "License"); you may not use this file except in
// compliance with the License. You may obtain a copy of the License at
// http://www.mozilla.org/MPL/
//
// Software distributed under the License is distributed on an "AS IS"
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
// License for the specific language governing rights and limitations
// under the License.
//---------------------------------------------------------------------------
{$R *.res}

uses
  Windows, Classes, SysUtils, HGEImages, HGECanvas, HGEDef, HGE, HGEFont;

type
 MapRec = record
  Heights: array[0..3] of Byte;
  Light  : array[0..3] of Byte;
 end;

 TLand = class
 private
   Wave: array[0..63, 0..63] of Real;
   function Sine(Value: Real): Real;
   procedure CalculateWave();
   procedure CalculateHeights();
 public
   XView,
   YView,
   Width,
   Height: Integer;
   XViewFloat,
   YViewFloat,
   XViewVel,
   YViewVel: Real;
   Alpha,
   Beta,
   Gamma: Real;
   Grid: Boolean;
   Map: array[0..127, 0..63] of MapRec;
   constructor Create();
   function SquareHeight(Xp, Yp, Corner: Integer): Integer;
   function SquareLight(Xp, Yp, Corner: Integer): Integer;
   procedure Render();
   procedure Process();
 end;

var
  HGE: IHGE = nil;
  Images: THGEimages;
  Canvas: THGECanvas;
  Fnt: IHGEFont;
  Land: TLand;
  P:array[0..3] of TPoint;
  Index: Integer;

const
  Undefined= -1;
  TileWidth = 64;
  TileHeight = 32;

procedure Iso2Line(Xmap,Ymap:Integer;out Xline,Yline:Integer);
begin
  Yline:=(Ymap shr 1)-Xmap;
  Xline:=Xmap+(Ymap and 1)+(Ymap shr 1);
end;

procedure Line2Iso(Xline,Yline:Integer;out Xmap,Ymap:Integer);
begin
  Xmap:=(Xline-Yline) shr 1;
  Ymap:=Xline+Yline;
end;

procedure TileAtCoord(Xcoord,Ycoord,TileWidth,TileHeight:Integer;out Xmap,Ymap:Integer);
var Thh,Twh:Integer;
begin
  Twh:=TileWidth div 2;
  Thh:=TileHeight div 2;
  Ymap:=Ycoord div Thh;
  Xmap:=(Xcoord-((Ymap and 1)*Twh)) div TileWidth;
end;

procedure CoordAtTile(Xmap,Ymap,TileWidth,TileHeight:Integer;out Xcoord,Ycoord:Integer);
var Thh,Twh:Integer;
begin
  Twh:=TileWidth div 2;
  Thh:=TileHeight div 2;
  Ycoord:=Ymap*Thh;
  Xcoord:=(Xmap*TileWidth)+((Ymap and 1)*Twh);
end;

function cGray1(Gray: Cardinal): Cardinal;
begin
  Result:= ((Gray and $FF) or ((Gray and $FF) shl 8) or ((Gray and $FF) shl 16))
   or $FF000000;
end;

constructor TLand.Create();
begin
  inherited;
  FillChar(Map, SizeOf(Map), 0);
  Width:= 64;
  Height:= 128;
  XView:= 1280;
  YView:= 768;
  XViewFloat:= 1280;
  YViewFloat:= 768;
  XViewVel:= 0;
  YViewVel:= 0;
  Alpha:= 0;
  Beta:= 0;
  Gamma:= 0;
  CalculateWave();
  CalculateHeights();
end;

function TLand.Sine(Value: Real): Real;
begin
  Result:= (Sin(Value * pi) + 1) / 2;
end;

procedure TLand.CalculateWave();
var
 i, j: Integer;
begin
  for j:= 0 to 63 do
    for i:= 0 to 63 do
     Wave[j, i]:= Sine((i / 8) + Alpha) + (Sine((i / 4) + Beta) / 2) + (Sine((j / 16) + Gamma) / 2);
end;

procedure TLand.CalculateHeights();
var
 i, j, DeltaX, Value, Light, x, y: Integer;
begin
  for j:= 1 to Height - 2 do
    for i:= 1 to Width - 2 do
    begin
      DeltaX:= 1 - (j and $01);
      Iso2Line(I, j + 64, x, y);
      x:= x - 64;
      if (x >= 0)and(y >= 0)and(x < 64)and(y < 64) then
      begin
        Value:= Round(Wave[y, x] * 96) + 32;
      end else Value:= 0;

      Light:= Value;
      if (Light > 255) then Light:= 255;
      Map[j, i].Heights[0]:= Value;
      Map[j, i].Light[0]:= Light;
      Map[j + 1, i - DeltaX].Heights[1]:= Value;
      Map[j + 1, i - DeltaX].Light[1]:= Light;
      Map[j - 1, i - DeltaX].Heights[2]:= Value;
      Map[j - 1, i - DeltaX].Light[2]:= Light;
      Map[j, i - 1].Heights[3]:= Value;
      Map[j, i - 1].Light[3]:= Light;
    end;
end;

function TLand.SquareHeight(Xp, Yp, Corner: Integer): Integer;
begin
  if (Xp < 0) then Xp:= 0;
  if (Yp < 0) then Yp:= 0;
  if (Xp > Width - 1) then Xp:= Width - 1;
  if (Yp > Height - 1) then Yp:= Height - 1;
  Result:= Map[Yp,Xp].Heights[Corner];
end;

function TLand.SquareLight(Xp, Yp, Corner: Integer): Integer;
begin
  if (Xp < 0) then Xp:=0;
  if (Yp < 0) then Yp:=0;
  if (Xp > Width - 1) then Xp:= Width - 1;
  if (Yp > Height - 1) then Yp:= Height - 1;
  Result:= cGray1(Map[Yp , Xp].Light[Corner]);
end;


procedure TLand.Render();
var
 x, y, Xpos, Ypos, XposAdd, XMap, YMap, TileHWidth, TileHHeight: Integer;
begin
  TileHWidth:= TileWidth div 2;
  TileHHeight:= TileHeight div 2;
  // render tiles
  for Y:= -1 to (600 div TileHHeight) + 14 do
  begin
   Ymap:= (YView div TileHHeight) + Y;
   Ypos:= (Ymap * TileHHeight) - YView - TileHHeight;
   XposAdd:= ((Ymap and $01) * TileHWidth) - XView - TileHWidth;
   for X:= -1 to (800 div TileWidth) + 2 do
    begin
     Xmap:= (XView div TileWidth) + X;
     Xpos:= (Xmap * TileWidth) + XposAdd;

     if (Xmap >= 0)and(Ymap >= 0)and(Xmap < Width)and(Ymap < Height)and(Map[Ymap, Xmap].Light[0] > 0)
        and(Map[Ymap, Xmap].Light[1] > 0)and(Map[Ymap, Xmap].Light[2] > 0)and(Map[Ymap, Xmap].Light[3] > 0) then
      begin
       Canvas.Draw4V(Images.Image['Tile'], Index, Xpos, (Ypos + TileHHeight) - SquareHeight(Xmap, Ymap,0),
                                   Xpos + TileHWidth, Ypos - SquareHeight(Xmap, Ymap, 1),
                                   Xpos + TileWidth, (Ypos + TileHHeight) - SquareHeight(Xmap,Ymap,3),
                                   Xpos + TileHWidth, (Ypos + TileHeight) - SquareHeight(Xmap,Ymap,2),
                                   False,False,
                                   SquareLight(Xmap,Ymap,0), SquareLight(Xmap,Ymap,1),
                                   SquareLight(Xmap,Ymap,3), SquareLight(Xmap,Ymap,2), Blend_Bright);
       end;
    end;{ for X:=-1 to ... }
  end;{ for Y:=-1 to ... }
 // render grid

 for Y:=-1 to (600 div TileHHeight) + 14 do
  begin
   Ymap:= (YView div TileHHeight) + Y;
   Ypos:= (Ymap * TileHHeight) - YView - TileHHeight;
   XposAdd:= ((Ymap and $01) * TileHWidth) - XView - TileHWidth;
   for X:= -1 to (800 div TileWidth) + 2 do
    begin
     Xmap:= (XView div TileWidth) + X;
     Xpos:= (Xmap * TileWidth) + XposAdd;

     if (Xmap >= 0)and(Ymap >= 0)and(Xmap < Width)and(Ymap < Height)and(Map[Ymap, Xmap].Light[0] > 0)
        and(Map[Ymap, Xmap].Light[1] > 0)and(Map[Ymap, Xmap].Light[2] > 0)and(Map[Ymap, Xmap].Light[3] > 0) then
      begin
        P[0]:= Point(Xpos, (Ypos + TileHHeight) - SquareHeight(Xmap, Ymap,0) - 4);
        P[1]:= Point(Xpos + TileHWidth, Ypos - SquareHeight(Xmap, Ymap, 1) - 4);
        P[2]:= Point(Xpos + TileWidth, (Ypos + TileHHeight) - SquareHeight(Xmap,Ymap,3) - 4 );
        P[3]:= Point(Xpos + TileHWidth, (Ypos + TileHeight) - SquareHeight(Xmap,Ymap,2) - 4);
       if (Grid) then
       HGE.Polygon(P,$FFFFFFFF, False);

     end;
    end;{ for X:=-1 to ... }
  end;{ for Y:=-1 to ... }

end;

procedure TLand.Process();
begin
 if (XViewVel > 8) then XViewVel:= 8;
 if (YViewVel > 8) then YViewVel:= 8;
 if (XViewVel < -8) then XViewVel:= -8;
 if (YViewVel < -8) then YViewVel:= -8;

 XViewFloat:= XViewFloat + XViewVel;
 YViewFloat:= YViewFloat + YViewVel;

 if (Abs(XViewVel) < 0.3) then XViewVel:= 0;
 if (Abs(YViewVel) < 0.3) then YViewVel:= 0;
 if (XViewVel > 0) then XViewVel:= XViewVel - 0.5;
 if (YViewVel > 0) then YViewVel:= YViewVel - 0.5;
 if (XViewVel < 0) then XViewVel:= XViewVel + 0.5;
 if (YViewVel < 0) then YViewVel:= YViewVel + 0.5;

 XView:= Round(XViewFloat);
 YView:= Round(YViewFloat);
 
 Alpha:= Alpha - 0.02;
 Beta:= Beta - 0.0257;
 Gamma:= Gamma - 0.033;

 CalculateWave();
 CalculateHeights();
end;

function FrameFunc: Boolean;
begin
  Land.Process;
  if HGE.Input_KeyDown(HGEK_C) then
     Inc(Index);
  if HGE.Input_KeyDown(HGEK_G) then
     Land.Grid := not Land.Grid;
  if Index > 2 then Index:=0;
  if HGE.Input_GetKeyState(HGEK_UP) then
     Land.YViewVel :=   Land.YViewVel- 3;
  if HGE.Input_GetKeyState(HGEK_Down) then
     Land.YViewVel :=   Land.YViewVel + 3;
  if HGE.Input_GetKeyState(HGEK_Left) then
     Land.XViewVel :=   Land.XViewVel - 3;
  if HGE.Input_GetKeyState(HGEK_Right) then
     Land.XViewVel :=   Land.XViewVel + 3;
  case HGE.Input_GetKey of

    HGEK_ESCAPE:
    begin
      FreeAndNil(Canvas);
      FreeAndNil(Images);
      FreeAndNil(Land);
      Result := True;
      Exit;
    end;
  end;
  Result := False;
end;

function RenderFunc: Boolean;
begin
  HGE.Gfx_BeginScene;
  HGE.Gfx_Clear(0);
  Land.Render;
  Fnt.PrintF(250,500, HGETEXT_LEFT, 'Arrow Key: Move Screen',[]);
  Fnt.PrintF(250,530, HGETEXT_LEFT, 'C: Change Texture',[]);
  Fnt.PrintF(250,560, HGETEXT_LEFT, 'G: Show Grid ON/OFF',[]);
  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,32);
  HGE.System_SetState(HGE_TEXTUREFILTER, False);
  HGE.System_SetState(HGE_FPS,HGEFPS_VSYNC);
  Canvas := THGeCanvas.Create;
  Images := THGEImages.Create;
  Land := TLand.Create;
  Land.XViewFloat:=200;
  Land.YViewFloat:=600;
  if (HGE.System_Initiate) then
  begin
    Fnt := THGEFont.Create('Font1.fnt');
    Images.LoadFromFile('Tile.png',64,64);
    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 + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品欧美一区二区三区综合在| av一区二区不卡| 日韩三级精品电影久久久 | 玉足女爽爽91| 色噜噜狠狠成人网p站| 夜夜嗨av一区二区三区网页| 欧美日韩在线播| 青青草成人在线观看| 久久久五月婷婷| 91欧美一区二区| 午夜精品福利久久久| 精品日本一线二线三线不卡| 国产成人精品www牛牛影视| 中文乱码免费一区二区| 色欧美88888久久久久久影院| 亚洲午夜日本在线观看| 欧美一个色资源| 国产.欧美.日韩| 亚洲成在线观看| 国产亚洲欧美日韩日本| 欧美午夜影院一区| 紧缚捆绑精品一区二区| 国产精品久久久久久户外露出| 欧美做爰猛烈大尺度电影无法无天| 亚洲国产精品久久人人爱蜜臀| 日韩欧美国产1| 成人va在线观看| 美日韩一区二区三区| 国产精品久久久一区麻豆最新章节| 欧美天堂亚洲电影院在线播放| 秋霞电影一区二区| 亚洲同性同志一二三专区| 日韩欧美另类在线| 91久久精品一区二区| 国产精品自拍网站| 日本女优在线视频一区二区 | 91网站视频在线观看| 香蕉成人啪国产精品视频综合网| 久久一区二区三区四区| 日本精品免费观看高清观看| 久久成人精品无人区| 夜夜嗨av一区二区三区四季av| www国产成人免费观看视频 深夜成人网| 一本大道久久a久久精二百| 久久99精品国产麻豆婷婷洗澡| 亚洲欧美日韩系列| 国产欧美日本一区二区三区| 日韩欧美激情四射| 欧美日韩日日夜夜| 91免费小视频| 成人av小说网| 国产精品一区二区不卡| 蜜臀av一级做a爰片久久| 一区二区欧美国产| 亚洲欧洲日韩女同| 欧美韩日一区二区三区四区| 91精品国产色综合久久ai换脸| 99re这里都是精品| 风间由美一区二区三区在线观看 | 韩日欧美一区二区三区| 亚洲h在线观看| 一区二区三区在线视频观看58| 欧美国产一区在线| 久久久精品国产99久久精品芒果| 91精品免费在线| 欧美精品三级在线观看| 欧美巨大另类极品videosbest | 一区二区三区在线播放| 久久女同性恋中文字幕| 色综合久久久久久久| av高清不卡在线| 成人免费的视频| 国产成人午夜视频| 成人午夜av电影| 国产一区二区三区久久悠悠色av| 日本午夜精品视频在线观看| 午夜精品成人在线视频| 亚洲一级不卡视频| 亚洲aⅴ怡春院| 奇米影视一区二区三区| 免费成人av在线| 久久国产综合精品| 懂色av中文字幕一区二区三区| 精品一二线国产| 国产在线一区二区综合免费视频| 日韩电影在线一区| 激情综合亚洲精品| 国产精品1区2区3区| 成人黄色片在线观看| 成人深夜视频在线观看| 色综合久久综合网97色综合| 91精品办公室少妇高潮对白| 欧美日韩国产小视频在线观看| 欧美人与z0zoxxxx视频| 欧美肥大bbwbbw高潮| 久久免费午夜影院| 亚洲欧洲国产专区| 水蜜桃久久夜色精品一区的特点 | 成人激情开心网| 91麻豆福利精品推荐| 欧美精品乱码久久久久久 | 播五月开心婷婷综合| 91福利视频在线| 欧美白人最猛性xxxxx69交| 久久久久久久久一| 亚洲欧美福利一区二区| 天堂一区二区在线免费观看| 国产综合久久久久久鬼色 | 国产一区不卡视频| 91麻豆国产在线观看| 91精品国产91久久久久久一区二区| 久久综合九色综合97婷婷女人| 成人免费在线视频| 人禽交欧美网站| 成人h动漫精品一区二区| 欧美日韩亚洲国产综合| 久久伊人中文字幕| 亚洲一区免费在线观看| 国产自产v一区二区三区c| 91玉足脚交白嫩脚丫在线播放| 欧美一区二区免费| 最新欧美精品一区二区三区| 免费成人美女在线观看.| 91网页版在线| 久久久久久9999| 亚洲成av人片观看| 丁香另类激情小说| 欧美精品日韩综合在线| **性色生活片久久毛片| 狠狠色综合播放一区二区| 一本色道久久综合亚洲精品按摩| 欧美va日韩va| 亚洲国产综合在线| 成人蜜臀av电影| 精品国产a毛片| 亚洲成人av一区二区| 成人高清av在线| 久久网站最新地址| 免费人成在线不卡| 91福利在线观看| 综合久久久久久| 高清av一区二区| 久久婷婷国产综合国色天香| 日韩成人午夜精品| 欧美在线视频不卡| 亚洲欧美一区二区久久| 国产a久久麻豆| 精品久久一区二区| 久久不见久久见中文字幕免费| 色哟哟国产精品| 国产色产综合色产在线视频| 日本不卡在线视频| 欧美日韩国产欧美日美国产精品| 亚洲裸体xxx| 日本韩国欧美一区| 亚洲日本va在线观看| 99国产精品视频免费观看| 久久精品日韩一区二区三区| 久久99精品国产麻豆不卡| 欧美一区午夜精品| 日韩在线a电影| 日本久久精品电影| 亚洲一区在线观看免费| 色综合久久六月婷婷中文字幕| 中文字幕av一区二区三区高| 国产一区二区在线视频| 日韩视频永久免费| 91麻豆成人久久精品二区三区| 国产91对白在线观看九色| 成人免费看黄yyy456| 欧美日本免费一区二区三区| 亚洲精品成人悠悠色影视| 亚洲欧美aⅴ...| 日本一区二区电影| 日韩一二三四区| 日韩电影免费一区| 日韩丝袜美女视频| 美女被吸乳得到大胸91| 欧美电视剧在线看免费| 精品一二三四区| 中国色在线观看另类| 成人av在线观| 亚洲午夜在线视频| 日韩午夜在线观看| 国产精品中文有码| 国产精品美女久久久久高潮| 91在线观看一区二区| 亚洲一区二区三区精品在线| 欧美日韩午夜精品| 久久国产精品99精品国产| 久久午夜电影网| 91麻豆免费观看| 午夜精品久久久久影视| 久久众筹精品私拍模特| 成人网男人的天堂| 五月婷婷综合在线| 久久综合久久综合久久| 91色porny在线视频| 午夜精品爽啪视频| 久久亚区不卡日本|