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.