www.pudn.com > Tank拊親蚔牁測鎢.rar > UTIL.PAS


unit util; 
 
interface 
 
uses Windows, Classes, SysUtils, Graphics, Forms, ComCtrls, Messages, Math; 
 
const 
  // 地圖子系統 
  TILE_WIDTH                = 32;                       // 圖片寬度點數 
  TILE_HEIGHT               = 32;                       // 圖片高度點數 
   
  SM_TILE_WIDTH             = TILE_WIDTH div 4;         // 小碎片寬度點數 
  SM_TILE_HEIGHT            = TILE_HEIGHT div 4;        // 小碎片高度點數 
   
  TILE_NUM_X                = 13;                       // 畫面橫軸格數 
  TILE_NUM_Y                = 13;                       // 畫面縱軸格數 
   
  WORLD_WIDTH               = TILE_WIDTH * TILE_NUM_X;  // 畫面寬度 
  WORLD_HEIGHT              = TILE_HEIGHT * TILE_NUM_Y; // 畫面高度 
   
  SIG_MYFILE                = 'Xshadow_Stock';          // 圖庫及地圖檔案的檔頭標籤 
   
  FN_TILE_ARCHIVE           = 'TILES.TIA';              // 圖庫檔案 
   
  FN_MAP_PREFIX             = 'MAP';                    // 關卡圖檔檔名 (MAP??.DAT) 
  FN_MAP_EXT                = '.DAT';                   // 關卡圖檔副檔名 
   
  LAYER_TERR                = 0;                        // 地形層 
  LAYER_TERRITEM            = 1;                        // 地形物層 
  LAYER_ITEM                = 2;                        // 物品層 
  LAYER_HITERRITEM          = 3;                        // 高地形物層 
   
  LAYER_MAX                 = 3;                        // 最多到高地形物層 
   
  // 角色子系統 
  DR_IMAGES                 = 'img\';                   // 角色影像檔的存放目錄 
   
  SPRITE_DEFAULT_SPEED      = 4;                        // 角色的預設速度 
  SMOOTH_MOVE_THRESHOLD     = 
    SPRITE_DEFAULT_SPEED * 3 - 1;                       // 平滑移動的門檻值                         
   
  MYTANK_DEFAULT_SPEED      = 5;                        // 我方坦克預設速度 
  BULLET_DEFAULT_SPEED      = 10;                       // 子彈預設速度 
  BULLET_DEFAULT_BLOW_RANGE = 3;                        // 子彈預設爆炸範圍 
   
  MAX_ETANK_PER_SCENARIO    = 20;                       // 每道關卡的敵方坦克數目 
  MAX_TANK_ON_SCREEN        = 5;                        // 畫面上最多坦克數目 
  MAX_ETANK_COLLISION_COUNT = 5;                        // 敵方坦克連續碰撞次數上限 
   
  PROBAB_ETANK_SHOT_BULLET  = 0.1;                      // 敵方坦克射擊子彈機率 
  PROBAB_ETANK_RANDOM_TURN  = 0.02;                     // 敵方坦克隨意轉彎機率 
  PROBAB_ETANK_BORN         = 0.02;                     // 敵方坦克出生機率 
  PROBAB_GEM_BORN           = 0.005;                    // 寶物出現機率 
   
  TIMER_ID_GEM              = 1;                        // 寶物生滅所使用的 Timer 編號 
  TIMER_ID_GEM_CLOCK        = 2;                        // 時鐘寶物效果所使用的 Timer 編號 
  TIMER_ID_GEM_HAT          = 3;                        // 帽子寶物效果所使用的 Timer 編號 
  TIMER_ID_GEM_ARROW        = 4;                        // 弓箭寶物效果所使用的 Timer 編號 
   
  // 欲傳遞給遊戲主迴圈的視窗訊息編號 
  WM_DESTROY_OBJECT         = WM_USER + 0;              // 摧毀物件指令 
  WM_GAMEOVER               = WM_USER + 1;              // 遊戲結束訊息 
  WM_SPECIAL_CONDITION      = WM_USER + 2;              // 吃到寶物時產生效果指令 
  WM_INIT_LEVEL             = WM_USER + 3;              // 關卡重新開始 
   
var 
  // 做為常數的變數, 在最下方的 initialization 處初始化   
  TILE_RECT        : TRect;                           
  TRANSPARENT_COLOR: TColor;                          
   
  // 經常計算的乘法, 所以建表格 => 查表法 
  TILEWIDTH        : array[0..TILE_NUM_X] of Integer; 
  TILEHEIGHT       : array[0..TILE_NUM_Y] of Integer; 
   
procedure CheckSignature(fs: TFileStream; const Sig: string); 
 
implementation 
 
procedure CheckSignature(fs: TFileStream; const Sig: string); 
var 
  S: string; 
begin 
  SetLength(S, Length(Sig)); 
  fs.read (S[1], Length(Sig)); 
  if CompareText(S, Sig) <> 0 then 
    raise Exception.Create('File signature not match'); 
end; 
 
var 
  I: Integer; 
initialization 
  TILE_RECT := Classes.Rect(0, 0, TILE_WIDTH, TILE_HEIGHT); 
  TRANSPARENT_COLOR := RGB(0, 0, 0); 
   
  for I := 0 to TILE_NUM_X do 
    TILEWIDTH[I] := I * TILE_WIDTH; 
   
  for I := 0 to TILE_NUM_Y do 
    TILEHEIGHT[I] := I * TILE_HEIGHT; 
   
finalization 
end.