Пример #1
0
        /// <summary>
        /// 创造一个史莱姆王
        /// </summary>
        /// <returns></returns>
        public static BaseCharacter CreateCharSlimeKing()
        {
            BaseCharacter slimeKing = new BaseCharacter();

            slimeKing.Name           = "史莱姆王";
            slimeKing.MaxHp          = 5428;
            slimeKing.MaxMp          = 2301;
            slimeKing.Hp             = 5428;
            slimeKing.Mp             = 2301;
            slimeKing.Atk            = 50;
            slimeKing.Def            = 30;
            slimeKing.Mat            = 42;
            slimeKing.Men            = 19;
            slimeKing.HitRatio       = 85;
            slimeKing.CriticalChance = 15;
            slimeKing.Level          = 15;
            slimeKing.type           = CharacterType.Enemy;

            Skill normalAttack = CreateAttackSkill(1, 20, DamageType.Physical, TargetType.EnemySingle);

            normalAttack.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int temp = Convert.ToInt32(attacker.Atk * 1.78 - target.Def);
                return(temp > 0 ? temp : 1);
            };
            slimeKing.skill.Add(normalAttack);

            Skill damageDec = CreateStateSkill("伤害加深", 0, 40, TargetType.EnemySingle);

            damageDec.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State damageIncState = CreateIncOrDecState("物理伤害加深", 0, 3, 0.4);
                damageIncState.skillName = damageDec.name;
                damageIncState.type      = StateType.PhysicalBeDamageIncrease;
                target.AddState(damageIncState);

                State damageIncState2 = CreateIncOrDecState("魔法伤害加深", 0, 3, 0.4);
                damageIncState2.skillName = damageDec.name;
                damageIncState2.type      = StateType.MagicBeDamageIncrease;
                target.AddState(damageIncState2);
            };
            slimeKing.skill.Add(damageDec);

            Skill recover = CreateStateSkill("再生", 0, 52, TargetType.Self);

            recover.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int   hprecover    = Convert.ToInt32(attacker.MaxHp * 0.02);
                State recoverState = CreateHOTState("再生", 0, 3, hprecover);
                recoverState.skillName = damageDec.name;
                target.AddState(recoverState);
            };
            slimeKing.skill.Add(recover);

            slimeKing.GetRandomSkill = (BaseCharacter bc, List <BaseCharacter> bcList, int counts) =>
            {
                //如果掉血了且不处于再生状态下,释放再生技能
                if (bc.Hp < bc.MaxHp)
                {
                    if (!bc.HasState(StateType.HealOverTime))
                    {
                        if (bc.skill[2].CanUseSkill(bc))
                        {
                            return(bc.skill[2]);
                        }
                    }
                }

                if (counts % 4 == 2)
                {
                    if (bc.skill[1].CanUseSkill(bc))
                    {
                        return(bc.skill[2]);
                    }
                }

                return(bc.skill[0]);
            };

            return(slimeKing);
        }
Пример #2
0
        /// <summary>
        /// 创建一个怪物红色史莱姆
        /// </summary>
        /// <returns></returns>
        public static BaseCharacter CreateCharSlimeRed()
        {
            BaseCharacter slime = new BaseCharacter();

            slime.Name           = "红色史莱姆";
            slime.MaxHp          = 1351;
            slime.MaxMp          = 385;
            slime.Hp             = 1351;
            slime.Mp             = 385;
            slime.Atk            = 40;
            slime.Def            = 40;
            slime.Mat            = 20;
            slime.Men            = 20;
            slime.HitRatio       = 80;
            slime.CriticalChance = 5;
            slime.Level          = 15;
            slime.type           = CharacterType.Enemy;
            slime.actionType     = ActionMode.MaxHP;
            Skill normalAttack = CreateAttackSkill(1, 20, DamageType.Physical, TargetType.EnemySingle);

            normalAttack.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                return(attacker.Atk * 2 - target.Def);
            };
            slime.skill.Add(normalAttack);

            Skill strongeAttack = CreateDamageSkill("强击", 0, 10, 1, 10, TargetType.EnemySingle, DamageType.Physical);

            strongeAttack.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                return(attacker.Atk * 3 - target.Def);
            };
            slime.skill.Add(strongeAttack);

            Skill softBody = CreateStateSkill("柔化", 0, 20, TargetType.Self);

            softBody.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State softState = CreateIncOrDecState("物理伤害降低", 0, 4, -0.5);
                softState.type      = StateType.PhysicalBeDamageIncrease;
                softState.skillName = softBody.name;
                attacker.AddState(softState);
            };
            slime.skill.Add(softBody);

            Skill phyReflect = CreateStateSkill("物理反射", 0, 20, TargetType.Self);

            phyReflect.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State phyReflectState = CreateSpecialState("物理反射", 1, 0);
                phyReflectState.type      = StateType.PhysicalReflect;
                phyReflectState.skillName = phyReflect.name;
                attacker.AddState(phyReflectState);
            };
            slime.skill.Add(phyReflect);

            //史莱姆的技能选择逻辑,就是最简单的AI
            slime.GetRandomSkill = (BaseCharacter bc, List <BaseCharacter> bcList, int counts) =>
            {
                //每7回合用一次柔化
                if (counts % 7 == 1)
                {
                    if (bc.skill[2].CanUseSkill(bc))
                    {
                        return(bc.skill[2]);
                    }
                }
                //血量低于一半的时候如果自身没有物理反射状态,释放物理反射技能
                if (bc.Hp < (bc.MaxHp / 2))
                {
                    if (!bc.HasState(StateType.PhysicalReflect))
                    {
                        if (bc.skill[3].CanUseSkill(bc))
                        {
                            return(bc.skill[3]);
                        }
                    }
                }
                //其他情况下,优先在普通攻击和强击中选择技能
                List <int> tempList = new List <int>();
                for (int i = 0; i < 2; i++)
                {
                    if (bc.skill[i].CanUseSkill(bc))
                    {
                        tempList.Add(i);
                    }
                }
                return(bc.skill[tempList[Program.random.Next(0, tempList.Count)]]);
            };
            return(slime);
        }
Пример #3
0
        /// <summary>
        /// 创造一个蓝色史莱姆
        /// </summary>
        /// <returns></returns>
        public static BaseCharacter CreateCharSlimeBlue()
        {
            BaseCharacter slime = new BaseCharacter();

            slime.Name           = "蓝色史莱姆";
            slime.MaxHp          = 952;
            slime.MaxMp          = 502;
            slime.Hp             = 952;
            slime.Mp             = 502;
            slime.Atk            = 20;
            slime.Def            = 20;
            slime.Mat            = 40;
            slime.Men            = 40;
            slime.HitRatio       = 80;
            slime.CriticalChance = 0;
            slime.Level          = 15;
            slime.type           = CharacterType.Enemy;
            slime.actionType     = ActionMode.MinHP;

            Skill normalAttack = CreateAttackSkill(1, 10, DamageType.Magic, TargetType.EnemySingle);

            normalAttack.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                return(attacker.Mat * 2 - target.Men);
            };
            slime.skill.Add(normalAttack);

            Skill magReflect = CreateStateSkill("魔法反射", 0, 30, TargetType.Self);

            magReflect.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State magrefState = CreateSpecialState("魔法反射", 1, 0);
                magrefState.skillName = magReflect.name;
                magrefState.type      = StateType.MagicReflect;
                target.AddState(magrefState);
            };
            slime.skill.Add(magReflect);

            Skill forbidHeal = CreateStateSkill("禁疗", 0, 30, TargetType.EnemyMulti);

            forbidHeal.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State forbidHealState = CreateSpecialState("禁疗", 0, 4);
                forbidHealState.skillName = forbidHeal.name;
                forbidHealState.type      = StateType.ForbidHeal;
                target.AddState(forbidHealState);
            };
            slime.skill.Add(forbidHeal);

            Skill magicBullet = CreateDamageSkill("魔法爆弹", 0, 10, 1, 5, TargetType.EnemySingle, DamageType.Magic);

            magicBullet.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int temp = Convert.ToInt32(attacker.Mat * 2.75 - target.Men);
                return(temp > 0 ? temp : 1);
            };
            slime.skill.Add(magicBullet);

            Skill heal = CreateHealSkill("治疗", 0, 20, 1, 0, TargetType.PartySingle);

            heal.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int temp = Convert.ToInt32(attacker.Men * 3.3);
                return(temp > 0 ? temp : 1);
            };
            slime.skill.Add(heal);

            slime.GetRandomSkill = (BaseCharacter bc, List <BaseCharacter> bcList, int counts) =>
            {
                //从第三回合开始每7回合一次禁疗
                if (counts % 7 == 3)
                {
                    if (bc.skill[2].CanUseSkill(bc))
                    {
                        return(bc.skill[2]);
                    }
                }

                //从第二回合开始,每四回合检测一次血量并选择释放回血技能
                if (counts % 4 == 2)
                {
                    for (int i = 0; i < bcList.Count; i++)
                    {
                        if (bcList[i].Hp < bcList[i].MaxHp / 2)
                        {
                            if (bc.skill[4].CanUseSkill(bc) && bcList[i].CanBeTarget(bc.skill[4]))
                            {
                                return(bc.skill[4]);
                            }
                        }
                    }
                }

                //从第一回合开始每5回合一次魔法反射
                if (counts % 5 == 1)
                {
                    if (!bc.HasState(StateType.MagicReflect))
                    {
                        if (bc.skill[1].CanUseSkill(bc))
                        {
                            return(bc.skill[1]);
                        }
                    }
                }

                //其他情况能用魔法爆弹就用魔法爆弹
                if (bc.skill[3].CanUseSkill(bc))
                {
                    return(bc.skill[3]);
                }

                return(bc.skill[0]);
            };
            return(slime);
        }
Пример #4
0
        /// <summary>
        /// 创建角色玲,魔法师
        /// </summary>
        /// <returns></returns>
        public static BaseCharacter CreateCharRenne()
        {
            BaseCharacter renne = new BaseCharacter();

            renne.Name           = "玲";
            renne.MaxHp          = 267;
            renne.MaxMp          = 352;
            renne.Hp             = 267;
            renne.Mp             = 352;
            renne.Atk            = 10;
            renne.Def            = 14;
            renne.Mat            = 32;
            renne.Men            = 23;
            renne.HitRatio       = 90;
            renne.CriticalChance = 5;
            renne.Level          = 5;
            renne.type           = CharacterType.Player;

            Skill normalAttack = CreateAttackSkill(1, 10, DamageType.Magic, TargetType.EnemySingle);

            normalAttack.description = "普通攻击,魔法伤害。";
            normalAttack.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int temp = attacker.Mat * 2 - target.Men;
                return(temp > 0 ? temp : 1);
            };
            renne.skill.Add(normalAttack);

            Skill stone = CreateStateSkill("石化光线", 0, 20, TargetType.EnemySingle);

            stone.description = "召唤帕蒂尔·玛蒂尔释放石化光线,有70%的概率使敌人进入石化状态3回合。(MP:20)";
            stone.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                if (Program.random.Next(0, 100) > 70)
                {
                    return;
                }
                MyDraw.DrawBattleMessageDelay("触发了石化效果!");
                State dizzy = CreateSpecialState("石化", 0, 3);
                dizzy.type      = StateType.Dizzy;
                dizzy.skillName = stone.name;
                target.AddState(dizzy);
                State damageDec = CreateIncOrDecState("物理抗性提升", 0, 3, -0.5);
                damageDec.type      = StateType.PhysicalBeDamageIncrease;
                damageDec.skillName = stone.name;
                target.AddState(damageDec);
            };
            renne.skill.Add(stone);

            Skill renneKill = CreateDamageSkill("玲·歼灭", 20, 40, 1, 15, TargetType.EnemyMulti, DamageType.Magic);

            renneKill.description = "玲挥动收割敌人的生命,对敌方全体造成伤害并且低概率即死。(HP:20,MP:40)";
            renneKill.isDeathNow  = true;
            renneKill.deathRatio  = 15;
            renneKill.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int temp = Convert.ToInt32(attacker.Mat * 1.67);
                return(temp);
            };
            renne.skill.Add(renneKill);

            Skill silence = CreateDamageSkill("天国之门", 0, 32, 1, 13, TargetType.EnemySingle, DamageType.Magic);

            silence.description = "开启天国之门,对单个敌人造成魔法伤害并且必定沉默。(MP:32)";
            silence.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int temp = Convert.ToInt32(attacker.Mat * 2.44 - target.Men * 0.83);
                return(temp);
            };
            silence.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State silenceState = CreateSpecialState("沉默", 0, 3);
                silenceState.skillName = silence.name;
                silenceState.type      = StateType.Silence;
                target.AddState(silenceState);
            };
            renne.skill.Add(silence);

            Skill PatelMattel = CreateDamageSkill("帕蒂尔·玛蒂尔", 0, 83, 3, 10, TargetType.EnemyMulti, DamageType.Magic);

            PatelMattel.description = "帕蒂尔·玛蒂尔用加农炮轰击前方的全体敌人,血量越低伤害越高。(MP:83)";
            PatelMattel.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int temp = Convert.ToInt32((attacker.Mat * 2.5 - target.Men * 0.6) * (2 - target.Hp * 1.0 / target.MaxHp));
                return(temp);
            };
            renne.skill.Add(PatelMattel);

            return(renne);
        }
Пример #5
0
        /// <summary>
        /// 创建角色马修,骑士
        /// </summary>
        /// <returns></returns>
        public static BaseCharacter CreateCharMatthew()
        {
            BaseCharacter matthew = new BaseCharacter();

            matthew.Name           = "马修";
            matthew.MaxHp          = 631;
            matthew.MaxMp          = 214;
            matthew.Hp             = 631;
            matthew.Mp             = 214;
            matthew.Atk            = 19;
            matthew.Def            = 42;
            matthew.Mat            = 17;
            matthew.Men            = 23;
            matthew.HitRatio       = 80;
            matthew.CriticalChance = 10;
            matthew.Level          = 5;
            matthew.type           = CharacterType.Player;

            Skill normalAttack = CreateAttackSkill(1, 10, DamageType.Physical, TargetType.EnemySingle);

            normalAttack.description = "普通攻击,物理伤害。";
            normalAttack.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int temp = attacker.Atk * 2 - target.Def;
                return(temp > 0 ? temp : 1);
            };
            matthew.skill.Add(normalAttack);

            Skill invincible = CreateStateSkill("白垩之壁", 0, 30, TargetType.PartySingle);

            invincible.description = "撑起扰乱时间的屏障,为己方单人赋予一次无敌效果。(MP:30)";
            invincible.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State invState = CreateSpecialState("无敌", 1, 0);
                invState.type      = StateType.Invincible;
                invState.skillName = invincible.name;
                target.AddState(invState);
            };
            matthew.skill.Add(invincible);

            Skill defUp = CreateStateSkill("雪花之壁", 0, 28, TargetType.PartyMulti);

            defUp.description = "为己方全体撑起精神护盾,提高全体的物理防御力。(MP:28)";
            defUp.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State defupState = CreateBuffState("物理防御力上升", 0, 4);
                defupState.type     = StateType.Buff;
                defupState.AddState = (BaseCharacter one) =>
                {
                    defupState.defUp = Convert.ToInt32(one.Def * 0.3);
                    one.Def         += defupState.defUp;
                };
                defupState.RemoveState = (BaseCharacter one) =>
                {
                    one.Def -= defupState.defUp;
                };
                defupState.skillName = defUp.name;
                target.AddState(defupState);
            };
            matthew.skill.Add(defUp);

            Skill taunt = CreateStateSkill("决意之盾", 0, 17, TargetType.Self);

            taunt.description = "坚定守护队友的决心,一定时间内提高自己被攻击的概率。(MP:17)";
            taunt.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State tauntState = CreateSpecialState("嘲讽", 0, 4);
                tauntState.skillName = taunt.name;
                tauntState.ratio     = 0.5;
                tauntState.type      = StateType.Taunt;
                attacker.AddState(tauntState);
            };
            matthew.skill.Add(taunt);

            Skill revive = CreateStateSkill("神圣之城", 0, 44, TargetType.PartySingle);

            revive.description = "为队友附加神圣的守护,使一名队友能够复活一次。(MP:44)";
            revive.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State revState = CreateSpecialState("复活", 1, 0);
                revState.skillName = revive.name;
                revState.type      = StateType.Revive;
                target.AddState(revState);
            };
            matthew.skill.Add(revive);

            return(matthew);
        }
Пример #6
0
        /// <summary>
        /// 创建角色艾露露,治疗
        /// </summary>
        /// <returns></returns>
        public static BaseCharacter CreateCharEruruu()
        {
            BaseCharacter eruruu = new BaseCharacter();

            eruruu.Name           = "艾露露";
            eruruu.MaxHp          = 288;
            eruruu.MaxMp          = 321;
            eruruu.Hp             = 288;
            eruruu.Mp             = 321;
            eruruu.Atk            = 0;
            eruruu.Def            = 17;
            eruruu.Mat            = 23;
            eruruu.Men            = 27;
            eruruu.HitRatio       = 95;
            eruruu.CriticalChance = 10;
            eruruu.Level          = 5;
            eruruu.type           = CharacterType.Player;

            Skill herb = CreateHealSkill("草药", 0, 15, 1, 10, TargetType.PartySingle);

            herb.description = "MP【15】:艾露露自制的草药,恢复己方单体生命值。";
            herb.skillDamage = new Skill.SkillDamage((BaseCharacter attacker, BaseCharacter target) =>
            {
                return(attacker.Men * 2);
            });
            eruruu.skill.Add(herb);
            Skill rest = CreateStateSkill("摩洛洛粥", 0, 0, TargetType.Self);

            rest.description = "艾露露为自己准备的家乡的小食,恢复自身的MP值。";
            rest.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int temp = Convert.ToInt32(attacker.Men * 1.34);
                if (attacker.Mp + temp > attacker.MaxMp)
                {
                    temp = attacker.MaxMp - attacker.Mp;
                }
                attacker.Mp += temp;
                MyDraw.DrawCharacterInfo(eruruu, 1);
                MyDraw.DrawBattleMessageDelay(string.Format("艾露露恢复了{0}点魔法值", temp));
            };
            eruruu.skill.Add(rest);

            Skill lilac = CreateHealSkill("花语", 0, 40, 1, 0, TargetType.PartyMulti);

            lilac.description = "艾露露利用山野中的鲜花特质的线香,为己方全体施加生命恢复效果。(MP:40)";
            lilac.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int   tempRecover = Convert.ToInt32(attacker.Men * 3.0 / 2);
                State lilacState  = CreateHOTState("花语", 0, 3, tempRecover);
                lilacState.skillName = lilac.name;
                target.AddState(lilacState);
            };
            eruruu.skill.Add(lilac);

            Skill mandara = CreateDamageSkill("毒雾", 0, 30, 1, 0, TargetType.EnemyMulti, DamageType.Magic);

            mandara.description = "艾露露利用山中的毒草制成的迷雾攻击敌方全体,一定概率使得敌方中毒。(MP:30)";
            mandara.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int tempRecover = Convert.ToInt32(target.MaxHp * 0.07);
                if (Program.random.Next(0, 100) > 70)
                {
                    State mandaraState = CreateDOTState("中毒", 0, 3, tempRecover);
                    mandaraState.skillName = mandara.name;
                    target.AddState(mandaraState);
                }
            };
            eruruu.skill.Add(mandara);

            Skill callBack = CreateHealSkill("复活", 0, 50, 1, 10, TargetType.PartySingle);

            callBack.description = "艾露露复活一名已经阵亡的队友,恢复其30%HP。(MP:50)";
            callBack.canDeath    = true;
            callBack.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                return(Convert.ToInt32(target.MaxHp * 0.3));
            };
            eruruu.skill.Add(callBack);

            Skill lifeLoop = CreateHealSkill("子守歌", 0, 60, 1, 20, TargetType.PartyMulti);

            lifeLoop.description = "艾露露唱起小时候听过的子守歌,恢复己方全体的生命值。(MP:60)";
            lifeLoop.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                return(Convert.ToInt32(attacker.Mat * 2.3 + 16));
            };
            eruruu.skill.Add(lifeLoop);

            return(eruruu);
        }
Пример #7
0
        public static BaseCharacter CreateCharSatsuki()
        {
            //角色的基本属性
            BaseCharacter player = new BaseCharacter();

            player.Name           = "五月";
            player.MaxHp          = 421;
            player.MaxMp          = 196;
            player.Hp             = 421;
            player.Mp             = 196;
            player.Atk            = 42;
            player.Def            = 23;
            player.Mat            = 17;
            player.Men            = 18;
            player.HitRatio       = 95;
            player.CriticalChance = 10;
            player.Level          = 5;
            player.type           = CharacterType.Player;
            //1.统统攻击技能:创建一个单体物理攻击力为10,攻击次数为1的攻击技能
            Skill normalAttack = CreateAttackSkill(1, 10, DamageType.Physical, TargetType.EnemySingle);

            normalAttack.description = "普通攻击,物理伤害。";
            normalAttack.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int temp = attacker.Atk * 2 - target.Def;
                return(temp > 0 ? temp : 1);
            };
            player.skill.Add(normalAttack);

            //2.技能:蓄力,消耗MP
            Skill charge = CreateStateSkill("蓄力", 0, 30, TargetType.Self);

            charge.description = "MP【30】:积蓄力量,使得下一次的物理攻击伤害翻倍。";
            charge.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State chargeState = CreateIncOrDecState("伤害提高", 1, 0, 2.0);
                chargeState.type      = StateType.PhysicalDamageIncrease;
                chargeState.skillName = charge.name;
                attacker.AddState(chargeState);
            };
            player.skill.Add(charge);

            //消耗MP
            Skill berserker = CreateStateSkill("狂化", 0, 20, TargetType.Self);

            berserker.description = "MP【20】:引发自己的吸血冲动,在3回合内增加物理攻击力,降低物理防御力。";
            berserker.skillEffect = (BaseCharacter attacker, BaseCharacter target) =>
            {
                State berserkerBuff = CreateBuffState("物理攻击力上升", 0, 4);
                berserkerBuff.skillName = berserker.name;
                berserkerBuff.AddState  = (BaseCharacter a) =>
                {
                    berserkerBuff.atkUp = a.Atk / 2;
                    a.Atk = a.Atk + berserkerBuff.atkUp;
                };
                berserkerBuff.RemoveState = (BaseCharacter a) =>
                {
                    a.Atk = a.Atk - berserkerBuff.atkUp;
                };
                attacker.AddState(berserkerBuff);
                State berserkerDebuff = CreateBuffState("物理防御力下降", 0, 4);
                berserkerDebuff.skillName = berserker.name;
                berserkerDebuff.AddState  = (BaseCharacter a) =>
                {
                    berserkerDebuff.defUp = 0 - a.Def / 2;
                    a.Def = a.Def + berserkerDebuff.defUp;
                };
                berserkerDebuff.RemoveState = (BaseCharacter a) =>
                {
                    a.Def = a.Def - berserkerDebuff.defUp;
                };
                attacker.AddState(berserkerDebuff);
            };
            player.skill.Add(berserker);

            //3.技能:添加技能“BAKA杀”,消耗MP
            Skill bakaKill = CreateDamageSkill("八嘎杀", 0, 30, 3, 20, TargetType.EnemySingle, DamageType.Physical);

            bakaKill.description = "MP【30】:高速的连续攻击,对单个敌人造成3次小幅度的物理伤害。";
            bakaKill.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                int temp = (attacker.Atk * 2 - target.Def) * 5 / 10;
                return(temp > 0 ? temp : 1);
            };
            player.skill.Add(bakaKill);
            //消耗MP
            Skill drynessGarden = CreateDamageSkill("枯渴庭院", 0, 80, 1, 10, TargetType.EnemyMulti, DamageType.Physical);

            drynessGarden.description = "MP【80】:迅速的抽空大气中的魔力,对敌方全体造成伤害并且减少魔法值。";
            drynessGarden.skillDamage = (BaseCharacter attacker, BaseCharacter target) =>
            {
                target.Mp = target.Mp - attacker.Atk / 2;
                return(attacker.Atk * 3 - target.Def * 2);
            };
            player.skill.Add(drynessGarden);
            return(player);
        }
Пример #8
0
        /// <summary>
        /// 显示角色的状态信息
        /// </summary>
        /// <param name="one"></param>
        /// <param name="index"></param>
        public static void DrawState(BaseCharacter one, int index)
        {
            string temp = "";

            foreach (State s in one.state)
            {
                switch (s.type)
                {
                case StateType.DamageOverTime:
                    temp += "DOT|";
                    break;

                case StateType.Silence:
                    temp += "SI|";
                    break;

                case StateType.Buff:
                    if (s.atkUp > 0)
                    {
                        temp += "A+|";
                    }
                    if (s.defUp > 0)
                    {
                        temp += "D+|";
                    }
                    if (s.atkUp < 0)
                    {
                        temp += "A-|";
                    }
                    if (s.defUp < 0)
                    {
                        temp += "D-|";
                    }
                    break;

                case StateType.MagicReflect:
                    temp += "MR|";
                    break;

                case StateType.PhysicalReflect:
                    temp += "PR|";
                    break;

                case StateType.PhysicalDamageIncrease:
                    temp += "PD+|";
                    break;

                case StateType.PhysicalBeDamageIncrease:
                    temp += "PBD+|";
                    break;

                case StateType.Taunt:
                    temp += "TA|";
                    break;

                case StateType.Revive:
                    temp += "RE|";
                    break;

                case StateType.Invincible:
                    temp += "IV|";
                    break;

                case StateType.HealOverTime:
                    temp += "HOT|";
                    break;

                case StateType.Dizzy:
                    temp += "DI|";
                    break;

                case StateType.ForbidHeal:
                    temp += "FH|";
                    break;

                default:
                    break;
                }
                if (one.type == CharacterType.Player)
                {
                    Console.SetCursorPosition(0, index * 4 + 5);
                    WriteEmpty();
                    Console.SetCursorPosition(0, index * 4 + 5);
                }
                else
                {
                    int len = GetLength(temp);
                    Console.SetCursorPosition(Program.width - len - 1, index * 4 + 5);
                    WriteEmpty(len);
                    Console.SetCursorPosition(Program.width - len - 1, index * 4 + 5);
                }
                if (temp != "")
                {
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.Write(temp);
                }
                Console.SetCursorPosition(0, 0);
            }
        }
Пример #9
0
        /// <summary>
        /// 播放怪物攻击玩家时的动画效果
        /// </summary>
        /// <param name="attacker"></param>
        /// <param name="att_index"></param>
        /// <param name="target"></param>
        /// <param name="tar_index"></param>
        public static void DrawAttackAnimationEnemy(BaseCharacter attacker, int att_index, BaseCharacter target, int tar_index)
        {
            int xStart  = Program.width - GetLength("HP:" + attacker.Hp) - 2;
            int xEnd    = GetLength("HP:" + target.Hp) + 2;
            int xMiddle = (xStart - xEnd) / 2;
            int yStart  = att_index * 4 + 3;
            int yEnd    = tar_index * 4 + 3;

            for (int i = xStart; i > xEnd; i = i - 2)
            {
                if (i == xMiddle || i == xMiddle - 1)
                {
                    Console.SetCursorPosition(i + 2, yStart);
                    Console.Write("  ");
                    if (yStart > yEnd)
                    {
                        for (int j = yStart; j >= yEnd; j--)
                        {
                            Console.SetCursorPosition(i, j + 1);
                            Console.Write("  ");
                            Console.SetCursorPosition(i, j);
                            Console.Write("↑");
                            Thread.Sleep(20);
                        }
                    }
                    else if (yStart < yEnd)
                    {
                        for (int j = yStart; j <= yEnd; j++)
                        {
                            Console.SetCursorPosition(i, j - 1);
                            Console.Write("  ");
                            Console.SetCursorPosition(i, j);
                            Console.Write("↓");
                            Thread.Sleep(20);
                        }
                    }
                }
                else if (i < xMiddle)
                {
                    if (i != xStart)
                    {
                        Console.SetCursorPosition(i + 2, yEnd);
                        Console.Write("  ");
                    }
                    Console.SetCursorPosition(i, yEnd);
                    Console.Write("←");
                }
                else
                {
                    if (i != xStart)
                    {
                        Console.SetCursorPosition(i + 2, yStart);
                        Console.Write("  ");
                    }
                    Console.SetCursorPosition(i, yStart);
                    Console.Write("←");
                }
                Thread.Sleep(20);
            }
            Console.SetCursorPosition(xEnd + 2, yEnd);
            Console.Write("  ");
        }
Пример #10
0
        /// <summary>
        /// 播放玩家攻击怪物时的动画效果
        /// </summary>
        /// <param name="attacker"></param>
        /// <param name="att_index"></param>
        /// <param name="target"></param>
        /// <param name="tar_index"></param>
        public static void DrawAttackAnimation(BaseCharacter attacker, int att_index, BaseCharacter target, int tar_index)
        {
            int x1      = GetLength("HP:" + attacker.Hp);
            int x2      = GetLength("HP:" + target.Hp);
            int xStart  = x1 + 2;
            int xEnd    = Program.width - x2 - 2;
            int xMiddle = (xEnd - xStart) / 2;
            //每个角色的第三行信息为Hp信息
            int yStart = att_index * 4 + 3;
            int yEnd   = tar_index * 4 + 3;

            for (int i = xStart; i < xEnd; i = i + 2)
            {
                if (i == xMiddle || i == xMiddle + 1)
                {
                    Console.SetCursorPosition(i - 2, yStart);
                    Console.Write("  ");
                    if (yStart > yEnd)
                    {
                        for (int j = yStart; j >= yEnd; j--)
                        {
                            Console.SetCursorPosition(i, j + 1);
                            Console.Write("  ");
                            Console.SetCursorPosition(i, j);
                            Console.Write("↑");
                            //通过线程睡眠来实现闪烁效果
                            Thread.Sleep(20);
                        }
                    }
                    else if (yStart < yEnd)
                    {
                        for (int j = yStart; j <= yEnd; j++)
                        {
                            Console.SetCursorPosition(i, j - 1);
                            Console.Write("  ");
                            Console.SetCursorPosition(i, j);
                            Console.Write("↓");
                            Thread.Sleep(20);
                        }
                    }
                }
                else if (i < xMiddle)
                {
                    Console.SetCursorPosition(i - 2, yStart);
                    Console.Write("  ");
                    Console.SetCursorPosition(i, yStart);
                    Console.Write("→");
                }
                else
                {
                    Console.SetCursorPosition(i - 2, yEnd);
                    Console.Write("  ");
                    Console.SetCursorPosition(i, yEnd);
                    Console.Write("→");
                }
                Thread.Sleep(20);
            }
            Console.SetCursorPosition(xEnd - 2, yEnd);
            Console.Write("  ");
        }