/// <summary> /// Determines the first to attack between two Fighters. /// </summary> /// <param name="one">Fighter one</param> /// <param name="two">Fighter two</param> private static void arrangeAttackOrder(IEngageable one, IEngageable two) { if (one.getSpeed() < two.getSpeed() || (one.getSpeed() == two.getSpeed() && RandomPlus.genBoolean())) { IEngageable temp = one; one = two; two = temp; } }
protected void Start() { players[0] = GameObject.Find("Player1").GetComponent <Player.Player>(); players[1] = GameObject.Find("Player2").GetComponent <Player.Player>(); isPlayerTouching[0] = false; isPlayerTouching[1] = false; engageBehavior = GetComponent <IEngageable>(); spriteRenderer = GetComponent <SpriteRenderer>(); originalColor = spriteRenderer.color; subscribe(); }
/// <summary> /// Damage is dealt from one Fighter to another. /// </summary> /// <param name="attacker">Attacking Fighter</param> /// <param name="receiver">Defending Fighter</param> private static void attack(IEngageable attacker, IEngageable receiver) { Console.WriteLine(); Text.color(attacker.ToString(), Text.allianceColor(attacker)); if (!(attacker is Cleric)) { Console.Write(" attacks "); } else { Console.Write(" heals "); } Text.color( ((receiver.getName().Equals(attacker.getName())) ? "themselves" : receiver.getName()) + "\n", Text.allianceColor(receiver)); int newHP = (!(attacker is Cleric)) ? (receiver.getHP() - damage(attacker.getAttack(), receiver.getDefense(), attacker.getCritChance())) : (receiver.getHP() + damage(attacker.getAttack(), 0, 0)); if (newHP <= 0) { newHP = 0; } if (newHP >= receiver.getMaxHP()) { newHP = receiver.getMaxHP(); } Text.color(receiver.ToString(), Text.allianceColor(receiver)); Console.Write("'s health goes from "); Text.color(receiver.getHP().ToString(), Text.healthColor(receiver)); Console.Write(" to "); receiver.setHP(newHP); Text.color(newHP.ToString(), Text.healthColor(receiver)); if (attacker.getParty().isUser()) { Console.WriteLine(); Console.Write(attacker + " earned "); Text.color(attacker.earnEXP(receiver).ToString(), ConsoleColor.Yellow); } Text.userRead(); }
public static ConsoleColor healthColor(IEngageable engageable) { if (engageable.getHP() == 0) { return ConsoleColor.DarkRed; } else if (engageable.getHP() < engageable.getMaxHP() * (1.0 / 3.0)) { return ConsoleColor.Red; } else if (engageable.getHP() < engageable.getMaxHP() * (2.0 / 3.0)) { return ConsoleColor.Yellow; } else { return ConsoleColor.Green; } }
public static ConsoleColor allianceColor(IEngageable engageable) { return (engageable.getParty().isUser()) ? ConsoleColor.Cyan : ConsoleColor.Red; }
/// <summary> /// The player is prompted to select an enemy party member to attack for their current member's turn. /// </summary> /// <param name="member">Player's current attacking member.</param> /// <param name="receiver">Enemy Party</param> /// <returns>The chosen target's name.</returns> /// <remarks>If the chosen target is dead or does not exist, an appropriate message is displayed.</remarks> /// <remarks>If the user's presses enter with no input, a randomly select target's name is returned.</remarks> private static string playerCommandSelect(IEngageable member, Party receiver) { string target; Console.WriteLine(); Console.WriteLine("Please select a target for " + member); target = Console.ReadLine(); if (target.Equals("") || target.Equals(null) || target.Trim().Equals("")) { if (member.getTarget() != null) { target = member.getTarget().getName(); } else { target = receiver.getMember().getName(); } } if (receiver.getMember(target) == null) { Console.WriteLine(target); Text.color("\n" + target + " is not a valid target.", ConsoleColor.Red); } else if (receiver.getMember(target).isDead()) { if(!(member is Cleric)) { Text.color("\n" + target + " is already dead. You're a horrible person!", ConsoleColor.Red); } else { Text.color("\nYou cannot resurrect " + target + ". I'm sorry.", ConsoleColor.Red); } } return target; }
/// <summary> /// Decision is made whether this party is the user's party or an AI party before target select phase. /// </summary> /// <param name="member">Party memeber currently seeking an attack target.</param> /// <param name="receiver">Enemy party</param> /// <returns>string: Target's name.</returns> private static string attackCommand(IEngageable member, Party receiver) { if (member.getParty().isUser()) { return playerCommandSelect(member, receiver); } else { return aiTargetSelect(receiver); } }
/// <summary> /// Two Fighters engage in a battle where both parties attack each other. The first to attack is determined by highest speed /// </summary> /// <param name="one">The first Fighter to strike</param> /// <param name="two">The second Fighter to strike (if not defeated this round)</param> private static void attackAndReceive(IEngageable one, IEngageable two) { arrangeAttackOrder(one, two); attack(one, two); if (two.getHP() > 0) { attack(two, one); } }