戰鬥系統前奏:完善精靈屬性,參考經典遊戲設計,決定遊戲新穎度與耐玩性。如《傳奇》參數設定恰當成就不朽巨作。
力量、敏捷、體格、智慧、幸運為根屬性(升級加點對象)。其他基值屬性由根屬性透過公式衍生:
public double VPower { get { return _VPower + Equip[16] + Buff[16]; } set { _VPower = value; } }
// 影響:最大負重 = ABase[0]+Equip[0]+Buff[0]+VPower*Coefficient[0]
// 物理攻擊最小 = ABase[1]+Equip[1]+Buff[1]+VPower*Coefficient[1]
// 物理攻擊最大 = ABase[2]+Equip[2]+Buff[2]+VPower*Coefficient[2]
以物理攻擊最大值為例:
public double VAttackMax { get { return ABase[2] + Equip[2] + Buff[2] + VPower * Coefficient[2]; } }
只讀屬性,由基礎值 (ABase)、裝備加成 (Equip)、Buff (Buff)、根屬性×成長係數 (Coefficient) 組合而成,構建通用易維護屬性系統。其他根屬性同理:
點擊敵對精靈→鎖定目標→移動進攻擊範圍→發起攻擊→計算傷害輸出。
InCircle 同適用於範圍魔法。EffectiveFrame 屬性,Timer Tick 時檢查 FrameCounter == EffectiveFrame 呼叫 DoInjure。
public static void DoInjure(QXSpirit spirit) {
QXSpirit Enemy = (spirit.Parent as Canvas).FindName(spirit.LockObject) as QXSpirit;
Random random = new Random();
if (random.Next(100) >= (spirit.VHit - Enemy.VDodge)) {
Super.ShowText(Enemy, true, true, "Avoid", "Miss", 34, Colors.SkyBlue, 2);
} else {
int Injure = 0;
if (spirit.Action == Actions.Attack)
Injure = Convert.ToInt32(spirit.VAttackMin + random.Next((int)(spirit.VAttackMax - spirit.VAttackMin)) - Enemy.VDefense);
else if (spirit.Action == Actions.Magic)
Injure = Convert.ToInt32(spirit.VMagicMin + random.Next((int)(spirit.VMagicMax - spirit.VMagicMin)) - Enemy.VMagicDefense);
if (random.Next(100) <= (spirit.VBurst - Enemy.VBlock)) {
Injure *= 2;
Super.ShowText(Enemy, true, true, "Avoid", string.Format("Burst!{0}", Injure >= 0 ? Injure.ToString() : "0"), 30, Colors.Red, 2);
} else {
Super.ShowText(Enemy, true, false, "Avoid", Injure >= 0 ? Injure.ToString() : "0", 30, Colors.Yellow, 0.5);
}
Enemy.VLife = Enemy.VLife < Injure ? 0 : Enemy.VLife - Injure;
}
}
命中判斷→傷害隨機→暴擊判斷(雙倍)→顯示文字→扣血。ShowText 為 QXText(第 14 節 BorderText 重構)。
AllMove 中處理:透明度 -0.005、Y -0.5 上升,透明度歸零移除釋放資源。
血條與頭像面板即時同步。傷害顯示可創新:彩虹筆刷美化、驗證碼風格字體、動畫封裝暴擊特效等。
物理攻擊系統完美銜接。下節加入怪物 AI,讓精靈栩栩如生。敬請關注。