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(); }
/// <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; }
/// <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; }
/// <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); }
/// <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; } } }
/// <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); }
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(); } } }
/// <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); }
public void Play(IFighter opponent) { playStyle(opponent); }
public override void Attack(IFighter victum) { throw new NotImplementedException(); }
/// <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); }
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ę."); }
/// <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); }
public MoveCommand(IFighter fighter, int xSteps, int ySteps) { _fighter = fighter; _xSteps = xSteps; _ySteps = ySteps; }
public ShieldFighterDecorator(IFighter fighter) : base(fighter) { ShieldDefends = 3; }
public ShotgunFighterDecorator(IFighter fighter) : base(fighter) { ShotgunRoundsFired = 0; }
public override void Attack(IFighter victum) { double damage = this.damage; bool isPlayerDead = victum.TakeHit(damage); }
private void CombatSkillTriggered(IFighter sender, int skillId) { sender.UseCombatSkill(skillId);; }
public AttackSuccessfulEventArgs(IFighter foe, int damageDealt) { TargettedFoe = foe; DamageDealt = damageDealt; }
public void CombatSkillUsedTest(IFighter sender, int skillId) { _combatSkillUsed += 1; }
public ShotgunFighterDecorator(IFighter nextFighterDecorator) : base(nextFighterDecorator) { ShotgunRoundsFired = 0; }
public StrengthenFighterDecorator(IFighter fighter) : base(fighter) { }
public PoisonFighterDecorator(IFighter fighter) : base(fighter) { PoisonStrength = 10; }
public Arena RegisterFighter(IFighter fighter, string name) { fighters.Add(name, fighter); return(this); }
public void InitEffect(IFighter aTarget, int aActiveTurns, int aEffectPower) { m_Target = aTarget; m_ActiveTurns = aActiveTurns; m_EffectPower = aEffectPower; }
public DoubleHandedFightGenerator(IFighter fighter) : base(fighter) { }
public abstract void Activate(IFighter target);
public MinionFighterDecorator(IFighter nextFighterDecorator) : base(nextFighterDecorator) { MinionLives = nextFighterDecorator.Lives / 2; }
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); }
public void Die(IFighter killer) { }
protected void PrintStatusAddedMessage(IFighter fighter, BlindStatus status) { _output.WriteLine($"{fighter.DisplayName} has been afflicted with blindness for {GetDurationString(status)}!"); }
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()"); } }
public virtual void CombatSkillTriggered(IFighter sender, int skillId) { StartCoroutine(CombatSkillCountdown(sender, skillId)); }
public ShieldDecorator(IFighter fighter, int shieldDefends = 0) : base(fighter) { _shieldDefends = shieldDefends; }
public DoubleHandedFighterDecorator(IFighter iFighter) : base(iFighter) { }
public override void Build(IFighter owner, Team ownTeam, Team enemyTeam, List <TerrainInteractable> terrainInteractables) { }
/// <summary> /// Trigger the current attack skill.</summary> /// <param name="enemy"></param> public void Attack(IFighter enemy) { TriggerCombatSkill(CurrentAttackSkill); }
public abstract void Attack(IFighter victum);
/// <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("错误的战斗双方"); } }
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; }
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; }