首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 開發 WPF/Silverlight 動畫與遊戲系列教程(二十八):經典屬性設計與完美物理攻擊系統

     編輯:關於C#

前言

戰鬥系統前奏:完善精靈屬性,參考經典遊戲設計,決定遊戲新穎度與耐玩性。如《傳奇》參數設定恰當成就不朽巨作。

五大根屬性與基值屬性關聯設計

力量、敏捷、體格、智慧、幸運為根屬性(升級加點對象)。其他基值屬性由根屬性透過公式衍生:

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) 組合而成,構建通用易維護屬性系統。其他根屬性同理:

  • 敏捷:命中、閃避、跑速、攻速、施法速
  • 體格:最大生命、物防、格擋率
  • 智慧:最大魔法、魔防、魔攻最小/最大
  • 幸運:暴擊率

物理攻擊系統設計

需求分析

點擊敵對精靈→鎖定目標→移動進攻擊範圍→發起攻擊→計算傷害輸出。

關鍵邏輯

  1. 敵對判斷:依 PK 值、PK 模式(和平/全體/善惡/門派/家族)判定。
  2. 攻擊範圍判斷:以敵人腳底為圓心,主角攻擊距離為半徑的圓。InCircle 同適用於範圍魔法。
  3. 分幀觸發傷害:攻擊動作 7 幀,第 6 幀產生實質傷害。精靈加 EffectiveFrame 屬性,Timer Tick 時檢查 FrameCounter == EffectiveFrame 呼叫 DoInjure。

傷害計算 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,讓精靈栩栩如生。敬請關注。

出處:https://alamiye010.cnblogs.com/

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved