private static void control(IFighter fighter)
        {
            Debug.WriteLine("Commands are: \n\"stop\": for stopping the bot");

            string command = Console.ReadLine();

            while (command != "stop")
            {
                command = Console.ReadLine();
                if (command.Contains("write:"))
                {
                    fighter.addQueue(command.Substring(6).Trim());
                }
                else if (command == "forfeit")
                {
                    fighter.addQueue("/forfeit");
                }
                else if (command == "stop")
                {
                    Debug.WriteLine("Stop will be initiated!");
                }
                else
                {
                    Console.WriteLine("Command not recognized!");
                }
            }

            fighter.stop();
        }
Example #2
0
        /// <summary>
        /// 进行破防攻击,附加一定伤害
        /// </summary>
        /// <param name="harm">原始伤害</param>
        /// <param name="attacker">攻击者</param>
        /// <param name="defencer">防御者</param>
        /// <param name="messageQueue">消息队列,用于输出技能释放消息</param>
        /// <returns>标示是否发动成功</returns>
        public override bool Onset(ref int harm, IFighter attacker, IFighter defencer, Queue<string> messageQueue)
        {
            if (attacker.Level >= defencer.Level)
            {
                harm += (attacker.Level - defencer.Level) + RP.Next(1, 3);
            }

            base.Onset(ref harm, attacker, defencer, messageQueue);

            return false;
        }
Example #3
0
        /// <summary>
        /// 进行普通攻击
        /// </summary>
        /// <param name="harm">原始伤害</param>
        /// <param name="attacker">攻击者</param>
        /// <param name="defencer">防御者</param>
        /// <param name="messageQueue">消息队列,用于输出技能释放消息</param>
        /// <returns>标示是否发动成功</returns>
        public override bool Onset(ref int harm, IFighter attacker, IFighter defencer, Queue<string> messageQueue)
        {
            if (attacker.Attack > defencer.Defence)
            {
                harm += attacker.Attack - defencer.Defence;
            }

            base.Onset(ref harm, attacker, defencer, messageQueue);

            //普通攻击
            return false;
        }
Example #4
0
        /// <summary>
        /// 被攻击时,减少全部伤害
        /// </summary>
        /// <param name="harm">原始伤害</param>
        /// <param name="attacker">攻击者</param>
        /// <param name="defencer">防御者</param>
        /// <param name="messageQueue">消息队列,用于输出技能释放消息</param>
        /// <returns>标示是否发动成功</returns>
        public override bool Onset(ref int harm, IFighter attacker, IFighter defencer, Queue<string> messageQueue)
        {
            //只要对方对自己造成伤害时才会发动
            if (!TestProbability(OnsetProbability + 0.001 * defencer.Agility) || harm <= 0)
            {
                return false;
            }

            harm = 0;

            return base.Onset(ref harm, attacker, defencer, messageQueue);
        }
Example #5
0
 /// <summary>
 /// 设计技能特效
 /// </summary>
 protected override void SetFace(IFighter attacker, IFighter defencer)
 {
     if (this.CurFace != null)
     {
         attacker.SkillOnIt = this.CurFace;
         defencer.SkillOnIt = null;
     }
     else
     {
         if (MotaImage.GetImage(FaceIndex) != null)
         {
             attacker.SkillOnIt = null;
             return;
         }
     }
 }
Example #6
0
        /// <summary>
        /// 暴击: 每次攻击时有10%的几率附加30%的伤害
        /// </summary>
        /// <param name="harm">原始伤害</param>
        /// <param name="attacker">攻击者</param>
        /// <param name="defencer">防御者</param>
        /// <param name="messageQueue">消息队列,用于输出技能释放消息</param>
        /// <returns>标示是否发动成功</returns>
        public override bool Onset(ref int harm, IFighter attacker, IFighter defencer, Queue<string> messageQueue)
        {
            if (!TestProbability(OnsetProbability + 0.001 * attacker.Agility))
            {
                return false;
            }

            //高出的等级
            int upLevel = attacker.Level - defencer.Level;
            if (upLevel < 0)
            {
                upLevel = 0;
            }

            harm = (int)(harm * (double)(130 + upLevel) / 100.0);

            return base.Onset(ref harm, attacker, defencer, messageQueue);
        }
Example #7
0
        public void Attack(IFighter victum)
        {
            // TODO: Attack logic and calculate damage
            double damage = this.damage;

            bool isDead = victum.TakeHit(damage);
            // TODO: Killed monster logic - exp gain

            if (isDead)
            {
                int expReward = BaseExp * victum.Level;
                bool isLevelUp = this.GainExpirience(expReward);
                if (isLevelUp)
                {
                    this.LevelUp();
                }
            }
        }
Example #8
0
        /// <summary>
        /// 愤怒一击
        /// </summary>
        /// <param name="harm">原始伤害</param>
        /// <param name="attacker">攻击者</param>
        /// <param name="defencer">防御者</param>
        /// <param name="messageQueue">消息队列,用于输出技能释放消息</param>
        /// <returns>标示是否发动成功</returns>
        public override bool Onset(ref int harm, IFighter attacker, IFighter defencer, Queue<string> messageQueue)
        {
            if (!TestProbability(OnsetProbability + 0.001 * attacker.Agility))
            {
                return false;
            }

            //高出的等级
            int hpUp = (int)(attacker.Hp * 0.05);
            if (hpUp > 1000)
            {
                hpUp = 1000;
            }
            attacker.Hp += hpUp;

            harm = 0;

            return base.Onset(ref harm, attacker, defencer, messageQueue);
        }
Example #9
0
 public void Play(IFighter opponent)
 {
     playStyle(opponent);
 }
Example #10
0
 public override void Attack(IFighter victum)
 {
     throw new NotImplementedException();
 }
Example #11
0
        /// <summary>
        /// A向B发动一次攻击
        /// </summary>
        private void OneFight(IFighter A, IFighter B)
        {
            int harm = 0;
            
            //重置所有技能
            foreach (var item in A.Skills)
            {
                item.Reset();
            }
            foreach (var item in B.Skills)
            {
                item.Reset();
            }
            A.SkillOnIt = null;
            B.SkillOnIt = null;

            //主动技能
            foreach (var item in A.Skills)
            {
                if (item.IsAttackSkill)
                {
                    if (item.Onset(ref harm, A, B, BattleMessages))
                    {
                        break;
                    }
                }
            }

            //防御技能
            foreach (var item in B.Skills)
            {
                if (!item.IsAttackSkill)
                {
                    if (item.Onset(ref harm, A, B, BattleMessages))
                    {
                        break;
                    }
                }
            }

            B.Hp -= harm;

            //当信息队列达到一定数量的时候,清空之前的内容以显示最新的信息
            if (BattleMessages.Count >= 7)
            {
                BattleMessages.Clear();
            }

            //战斗消息
            BattleMessages.Enqueue(B.Name + "受到<" + harm + ">点伤害");

            //播放战斗音效
            SoundsList.PlaySound(A.AttackSound);
        }
Example #12
0
        public static void UpgradeFighter(IFighter fighter)
        {
            while (true)
            {
                Console.Clear();
                fighter.ResetEnergy();

                Console.WriteLine("\n  Twój zawodnik przedstawia się następująco: ");
                Console.WriteLine($"\n  >> Wytrzymałość podczas walki (energia): {fighter.energy + fighter.extraEnergy}");
                Console.WriteLine($"  >> Doświadczenie w stójce: {fighter.stojka}");
                Console.WriteLine($"  >> Doświadczenie w parterze: {fighter.parter}");

                Console.WriteLine("\n  Otrzymujesz 3 ekstra punkt, do przydzielenia swojej postaci.\n  Przydziel je poszczególnym pozycjom według uznania\n");

                int energyUpgradeValue;

                int stojkaUpgradeValue;
                int parterUpgradeValue;

                try
                {
                    Console.Write("  >> Energia: ");
                    energyUpgradeValue = int.Parse(Console.ReadLine());
                    if (energyUpgradeValue < 0 || energyUpgradeValue > 3)
                    {
                        Console.WriteLine("  Niepoprawna wartość !!!");
                        Thread.Sleep(1500);
                        continue;
                    }

                    Console.Write("\n  >> Stójka: ");
                    stojkaUpgradeValue = int.Parse(Console.ReadLine());
                    if (stojkaUpgradeValue < 0 || stojkaUpgradeValue > 3 - energyUpgradeValue)
                    {
                        Console.WriteLine("  Niepoprawna wartość !!!");
                        Thread.Sleep(1500);
                        continue;
                    }

                    Console.Write("\n  >> Parter: ");
                    parterUpgradeValue = int.Parse(Console.ReadLine());
                    if (parterUpgradeValue < 0 || parterUpgradeValue > 3 - energyUpgradeValue - stojkaUpgradeValue)
                    {
                        Console.WriteLine("  Niepoprawna wartość !!!");
                        Thread.Sleep(1500);
                        continue;
                    }
                }
                catch
                {
                    Console.WriteLine("  Możesz jedynie użyć cyfr od 0 do 3 !!!");
                    Thread.Sleep(1500);
                    continue;
                }

                fighter.UpgradeParter(parterUpgradeValue);
                fighter.UpgradeStojka(stojkaUpgradeValue);
                fighter.UpgradeEnergy(energyUpgradeValue);
                break;
            }

            Console.WriteLine("\n\n  Twój zawodnik po awansie punktowym: ");
            Console.WriteLine($"\n  >> Wytrzymałość podczas walki (energia): {fighter.energy + fighter.extraEnergy}");
            Console.WriteLine($"  >> Doświadczenie w stójce: {fighter.stojka}");
            Console.WriteLine($"  >> Doświadczenie w parterze: {fighter.parter}");
            Console.WriteLine("\n\n\n  Użyj dowolnego przycisku, gdy będziesz gotowy na kolejną walkę.");
        }
Example #13
0
 /// <summary>
 /// Emit a singal that the enemy has been defeated.</summary>
 /// <param name="defeatedEnemy"></param>
 public override void HasDefeated(IFighter defeatedEnemy)
 {
     Stats.Experience.Value += defeatedEnemy.ExperienceOnDefeat;
     EmitOnEnemyDefeated(defeatedEnemy);
 }
Example #14
0
 public MoveCommand(IFighter fighter, int xSteps, int ySteps)
 {
     _fighter = fighter;
     _xSteps  = xSteps;
     _ySteps  = ySteps;
 }
 public ShieldFighterDecorator(IFighter fighter) : base(fighter)
 {
     ShieldDefends = 3;
 }
Example #16
0
 public ShotgunFighterDecorator(IFighter fighter) : base(fighter)
 {
     ShotgunRoundsFired = 0;
 }
        public override void Attack(IFighter victum)
        {
            double damage = this.damage;

            bool isPlayerDead = victum.TakeHit(damage);
        }
Example #18
0
 private void CombatSkillTriggered(IFighter sender, int skillId)
 {
     sender.UseCombatSkill(skillId);;
 }
Example #19
0
 public AttackSuccessfulEventArgs(IFighter foe, int damageDealt)
 {
     TargettedFoe = foe;
     DamageDealt  = damageDealt;
 }
Example #20
0
 public void CombatSkillUsedTest(IFighter sender, int skillId)
 {
     _combatSkillUsed += 1;
 }
Example #21
0
 public ShotgunFighterDecorator(IFighter nextFighterDecorator) : base(nextFighterDecorator)
 {
     ShotgunRoundsFired = 0;
 }
 public StrengthenFighterDecorator(IFighter fighter) : base(fighter)
 {
 }
 public PoisonFighterDecorator(IFighter fighter) : base(fighter)
 {
     PoisonStrength = 10;
 }
Example #24
0
 public Arena RegisterFighter(IFighter fighter, string name)
 {
     fighters.Add(name, fighter);
     return(this);
 }
Example #25
0
 public void InitEffect(IFighter aTarget, int aActiveTurns, int aEffectPower)
 {
     m_Target      = aTarget;
     m_ActiveTurns = aActiveTurns;
     m_EffectPower = aEffectPower;
 }
Example #26
0
 public DoubleHandedFightGenerator(IFighter fighter) : base(fighter)
 {
 }
Example #27
0
 public abstract void Activate(IFighter target);
 public MinionFighterDecorator(IFighter nextFighterDecorator) : base(nextFighterDecorator)
 {
     MinionLives = nextFighterDecorator.Lives / 2;
 }
Example #29
0
 public MinionFighterDecorator(IFighter fighter) : base(fighter)
 {
     MinionLives       = fighter.Lives / 2;
     MinionAttackValue = fighter.AttackValue / 2;
 }
        protected void PrintStatusAddedMessage(IFighter fighter, CounterAttackStatus status)
        {
            string output = $"{fighter.DisplayName} will counter any attack for {GetDurationString(status)}!";

            _output.WriteLine(output);
        }
Example #31
0
 public void Die(IFighter killer)
 {
 }
 protected void PrintStatusAddedMessage(IFighter fighter, BlindStatus status)
 {
     _output.WriteLine($"{fighter.DisplayName} has been afflicted with blindness for {GetDurationString(status)}!");
 }
Example #33
0
        public override void Die(IFighter pg)
        {
            var killerType = pg.GetType();
            var pgType = typeof(Pg);

            if (killerType == pgType || killerType.IsSubclassOf(pgType))
            {
                var charPg = pg as Pg;
                // Pg Xp, Gold, Items, etc...
                charPg.GainExperience(this.XPPremium);
                // Remove from map
            }
            this.Map.Remove(this);
        }
        protected void PrintFieldEffectImplementedMessage(IFighter effectExecutor, FieldEffect effect)
        {
            MagicAttackFieldEffect              magicAttackFieldEffect    = effect as MagicAttackFieldEffect;
            ShieldFieldEffect                   shieldFieldEffect         = effect as ShieldFieldEffect;
            UndoDebuffsFieldEffect              undoDebuffsFieldEffect    = effect as UndoDebuffsFieldEffect;
            RestoreHealthPercentageFieldEffect  restoreHealthEffect       = effect as RestoreHealthPercentageFieldEffect;
            RestoreManaPercentageFieldEffect    restoreManaEffect         = effect as RestoreManaPercentageFieldEffect;
            StatMultiplierFieldEffect           statMultiplierFieldEffect = effect as StatMultiplierFieldEffect;
            SpellCostMultiplierFieldEffect      costMultiplierEffect      = effect as SpellCostMultiplierFieldEffect;
            CriticalChanceMultiplierFieldEffect critChanceEffect          = effect as CriticalChanceMultiplierFieldEffect;
            MagicMultiplierFieldEffect          magicMultiplierEffect     = effect as MagicMultiplierFieldEffect;
            ReflectFieldEffect                  magicReflectEffect        = effect as ReflectFieldEffect;
            StatusFieldEffect                   statusFieldEffect         = effect as StatusFieldEffect;

            if (magicAttackFieldEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, magicAttackFieldEffect);
            }
            else if (shieldFieldEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, shieldFieldEffect);
            }
            else if (undoDebuffsFieldEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, undoDebuffsFieldEffect);
            }
            else if (restoreHealthEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, restoreHealthEffect);
            }
            else if (statMultiplierFieldEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, statMultiplierFieldEffect);
            }
            else if (restoreManaEffect != null)
            {
                PrintFieldEffectImplementedMessage(effectExecutor, restoreManaEffect);
            }
            else if (critChanceEffect != null)
            {
                throw new NotImplementedException("this didn't get an updated PrintFieldEffectImplementedMessage when the code was moved over");

                /*if (critChanceEffect.Percentage < 1.0)
                 * {
                 *  output += "a decreased ";
                 * }
                 * else
                 * {
                 *  output += "an increased ";
                 * }
                 *
                 * output += "chance for critical hits";*/
            }
            else if (magicMultiplierEffect != null)
            {
                throw new NotImplementedException("this didn't get an updated PrintFieldEffectImplementedMessage when the code was moved over");

                /*if (magicMultiplierEffect.Percentage < 1.0)
                 * {
                 *  output += "weakened ";
                 * }
                 * else
                 * {
                 *  output += "strengthened ";
                 * }
                 *
                 * if (magicMultiplierEffect.MagicType != MagicType.All)
                 * {
                 *  output += $"{magicMultiplierEffect.MagicType.ToString().ToLower()} ";
                 * }
                 * output += "magic";*/
            }
            else if (costMultiplierEffect != null)
            {
                throw new NotImplementedException("this didn't get an updated PrintFieldEffectImplementedMessage when the code was moved over");

                /*output += (costMultiplierEffect.Multiplier < 1.0) ? "decreased " : "increased ";
                 * output += "cost for magic spells";*/
            }
            else if (magicReflectEffect != null)
            {
                throw new NotImplementedException("this didn't get an updated PrintFieldEffectImplementedMessage when the code was moved over");

                /*var magicTypeString = magicReflectEffect.MagicType.ToString().ToLower();
                 * output += $"gained reflect status against {magicTypeString} magic";*/
            }
            else if (statusFieldEffect != null)
            {
                //Don't need StatusFieldEffect print message- the statuses themselves have their own print methods
            }
            else
            {
                throw new ArgumentException(
                          "It's time to implement a new version of BattleManager.PrintFieldEffectImplementedMessage()");
            }
        }
Example #35
0
 public virtual void CombatSkillTriggered(IFighter sender, int skillId)
 {
     StartCoroutine(CombatSkillCountdown(sender, skillId));
 }
 public ShieldDecorator(IFighter fighter, int shieldDefends = 0) : base(fighter)
 {
     _shieldDefends = shieldDefends;
 }
Example #37
0
 public DoubleHandedFighterDecorator(IFighter iFighter) : base(iFighter)
 {
 }
Example #38
0
 public override void Build(IFighter owner, Team ownTeam, Team enemyTeam, List <TerrainInteractable> terrainInteractables)
 {
 }
Example #39
0
 /// <summary>
 /// Trigger the current attack skill.</summary>
 /// <param name="enemy"></param>
 public void Attack(IFighter enemy)
 {
     TriggerCombatSkill(CurrentAttackSkill);
 }
Example #40
0
 public abstract void Attack(IFighter victum);
Example #41
0
        /// <summary>
        /// 打开战斗窗口,传递战斗的双方
        /// </summary>
        /// <param name="data">战斗的双方(数组)</param>
        public override void Open(object data)
        {
            IFighter[] fighters = data as IFighter[];
            if (fighters != null && fighters.Length == 2)
            {
                Hero = fighters[0];         //勇士
                Monster = fighters[1];      //怪物

                Hero.InBattle = true;
                Monster.InBattle = true;

                //将怪物的播放绑定到战斗的回合上来
                Monster.FrameChangeEvent += new EventHandler(OneBattle);

                //勇士为发动攻击之前
                HeroTurn = false;
                Enable = true;
                IsEnd = false;
                QuitWaiting = false;

                //清空消息队列
                BattleMessages.Clear();

                ReDraw();
            }
            else
            {
                throw new Exception("错误的战斗双方");
            }
        }
Example #42
0
 public abstract void Attack(IFighter victum);
Example #43
0
 public ShieldFighterDecorator(IFighter iFighter, int shieldDefends) : base(iFighter)
 {
     ShieldDefends = shieldDefends;
 }
        public void init(IFighter fighter)
        {
            initMagicBouncePokemon();

              //  calculator = new FirefoxDriver();
            calculator = new ChromeDriver(@"D:\Programming\Pokemon Showdown Bot");
            calculator.Navigate().GoToUrl("http://fsibapt.github.io/");

            IWebElement teamimport = calculator.FindElement(By.CssSelector(".import-team-text"));
            teamimport.SendKeys(config.team);

            IWebElement teamsave = calculator.FindElement(By.CssSelector(".bs-btn"));
            teamsave.Click();

            IAlert alert = calculator.SwitchTo().Alert();

            alert.Accept(); //for two buttons, choose the affirmative one

            setScarfers();

            this.fighter = fighter;
        }
Example #45
0
        private void HandleBattle(IFighter attacker, WorldObject defender)
        {
            var defenderAsFighter = defender as IFighter;
            int defenderDefensePoints = 0;
            if (defenderAsFighter != null)
            {
                defenderDefensePoints = defenderAsFighter.DefensePoints;
            }

            int damage = attacker.AttackPoints - defenderDefensePoints;

            if (damage < 0)
            {
                damage = 0;
            }

            if (damage > defender.HitPoints)
            {
                damage = defender.HitPoints;
            }

            defender.HitPoints -= damage;

            Console.WriteLine("{0} attacked {1} and did {2} damage", attacker, defender, damage);
        }
 protected BaseFighterDecorator(IFighter nextFighterDecorator)
 {
     _nextFighterDecorator = nextFighterDecorator;
 }