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

WPF/Silverlight 遊戲開發教程(二十八之四):起效幀機制與 DoInjure 傷害計算核心

     編輯:關於C語言

攻擊動作合成圖中第 20 列為實質傷害幀。為每個精靈加入 EffectiveFrame(起效幀)屬性,生命執行緒中判斷觸發:

private void Timer_Tick(object sender, EventArgs e)
{
    if (FrameCounter == EffectiveFrame[(int)Action]) { Super.DoInjure(this); }
}

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;
    }
}

流程:捕獲鎖定敵人 → 隨機數判定閃避 → 計算物理/魔法傷害 → 判定暴擊(傷害×2) → 顯示傷害文字 → 扣除生命值。

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