Пример #1
0
 /// <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;
     }
 }
Пример #2
0
        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();
        }
Пример #3
0
        /// <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();
        }
Пример #4
0
 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;
     }
 }
Пример #5
0
 public static ConsoleColor allianceColor(IEngageable engageable)
 {
     return (engageable.getParty().isUser()) ? ConsoleColor.Cyan : ConsoleColor.Red;
 }
Пример #6
0
        /// <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;
        }
Пример #7
0
 /// <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);
     }
 }
Пример #8
0
        /// <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);
            }
        }