示例#1
0
    private Wave CreateBossWave(int levelIndex)
    {
        float interval = 60 + 10 * (levelIndex / 10 - 3);
        float time     = interval;

        int ecIndex         = Random.Range(0, enemyCombination_boss.Count);
        EnemyCombination ec = enemyCombination_boss[ecIndex];

        int gold = 300 * (levelIndex / 10 - 2);

        if (gold < 300)
        {
            gold = 300;
        }

        Wave w;

        w = new Wave(ec.id, 1, interval, time, gold);
        return(w);
    }
示例#2
0
        public List <string> Fight()
        {
            List <string> fight = new List <string>();

            Dictionary <int, string> rangeType = Constants.GetRangeTypes();

            List <int>    myCombination     = new List <int>();
            List <string> myCombinationLine = new List <string>();

            int combinationLength = 6 + Character.Protagonist.Fury;

            for (int i = 0; i < combinationLength; i++)
            {
                int dice = Game.Dice.Roll();
                myCombination.Add(dice);
                myCombinationLine.Add(Game.Dice.Symbol(dice));
            }

            fight.Add(String.Format("Ваша комбинация: {0}", String.Join(String.Empty, myCombinationLine.ToArray())));

            List <int>    enemyCombination     = new List <int>();
            List <string> enemyCombinationLine = new List <string>();

            foreach (string dice in EnemyCombination.Split('-'))
            {
                enemyCombinationLine.Add(Game.Dice.Symbol(int.Parse(dice)));
            }

            fight.Add(String.Format("Его комбинация: {0}", String.Join(String.Empty, enemyCombinationLine.ToArray())));

            if (Upgrade(ref myCombination, ref myCombinationLine, ref fight))
            {
                fight.Add(String.Format("Теперь ваша комбинация: {0}", String.Join(String.Empty, myCombinationLine.ToArray())));
            }

            bool birds = Birds;

            while (true)
            {
                if (myCombination.Contains(1))
                {
                    fight.Add(String.Empty);
                    fight.Add("BOLD|МАНЕВРИРОВАНИЕ");

                    int  maneuvers     = CountInCombination(myCombination, 1);
                    bool failManeuvers = true;

                    foreach (int dice in new int[] { 6, 5, 4 })
                    {
                        for (int i = 0; i < enemyCombination.Count; i++)
                        {
                            if ((enemyCombination[i] == dice) && (maneuvers > 0))
                            {
                                fight.Add(String.Format("Убираем у противника {0}-ку за ваше маневрирование", dice));
                                enemyCombination[i] = 0;
                                maneuvers          -= 1;
                                failManeuvers       = false;
                            }
                        }
                    }

                    if (failManeuvers)
                    {
                        fight.Add("Маневрирование ничего не дало противникам");
                    }
                }

                foreach (int range in new int[] { 6, 5, 4 })
                {
                    fight.Add(String.Empty);
                    fight.Add(String.Format("BOLD|{0}", rangeType[range]));

                    int roundResult = 0;

                    if (!myCombination.Contains(range) && !enemyCombination.Contains(range))
                    {
                        fight.Add("Противникам нечего друг другу противопоставить");
                    }

                    else if (myCombination.Contains(range) && !enemyCombination.Contains(range))
                    {
                        roundResult = 1;

                        if (range == 4)
                        {
                            fight.Add("BIG|GOOD|Вы уничтожили противника тараном, оружием героев :)");

                            if (Benefit != null)
                            {
                                Benefit.Do();
                            }

                            return(fight);
                        }
                        else
                        {
                            fight.Add("GOOD|Вы накрыли противника огнём");
                        }
                    }
                    else if (!myCombination.Contains(range) && enemyCombination.Contains(range))
                    {
                        roundResult = -1;

                        if (range == 4)
                        {
                            fight.Add("BIG|BAD|Противник уничтожил вас тараном :(");
                            Character.Protagonist.Hitpoints = 0;
                            return(fight);
                        }
                        else
                        {
                            fight.Add("BAD|Противник накрыл вас огнём");
                        }
                    }
                    else
                    {
                        fight.Add(range == 4 ? "Взаимные манёвры:" : "Перестрелка:");

                        while (roundResult == 0)
                        {
                            string bonuses = String.Empty;

                            int myDice   = Game.Dice.Roll();
                            int myBonus  = CountInCombination(myCombination, range);
                            int myAttack = myDice + myBonus;

                            if (myBonus > 0)
                            {
                                bonuses = String.Format(", +{0} за {1}-ки, итого {2}", myBonus, range, myAttack);
                            }

                            fight.Add(String.Format("Ваша атака: {0}{1}", Game.Dice.Symbol(myDice), bonuses));

                            bonuses = String.Empty;

                            int enemyDice   = Game.Dice.Roll();
                            int enemyBonus  = CountInCombination(enemyCombination, range);
                            int enemyAttack = enemyDice + enemyBonus;

                            if (enemyBonus > 0)
                            {
                                bonuses = String.Format(", +{0} за {1}-ки, итого {2}", enemyBonus, range, enemyAttack);
                            }


                            fight.Add(String.Format("Атака противника: {0}{1}", Game.Dice.Symbol(enemyDice), bonuses));

                            if ((myAttack > enemyAttack) && (range == 4))
                            {
                                fight.Add("BIG|GOOD|Вы уничтожили противника тараном, оружием героев :)");

                                if (Benefit != null)
                                {
                                    Benefit.Do();
                                }

                                return(fight);
                            }
                            else if ((myAttack < enemyAttack) && (range == 4))
                            {
                                fight.Add("BIG|BAD|Противник уничтожил вас тараном :(");
                                Character.Protagonist.Hitpoints = 0;
                                return(fight);
                            }
                            else if (myAttack > enemyAttack)
                            {
                                roundResult = 1;
                                fight.Add("GOOD|Вы подавили противника огнём");
                            }
                            else if (myAttack < enemyAttack)
                            {
                                roundResult = -1;
                                fight.Add("BAD|Противник подавил вас огнём");
                            }
                            else
                            {
                                fight.Add("Перестрелка продолжается:");
                            }
                        }
                    }

                    if (roundResult == 1)
                    {
                        string bonuses = String.Empty, penalties = String.Empty;

                        int myDice       = Game.Dice.Roll();
                        int myBonus      = CountInCombination(myCombination, 3);
                        int myPenalty    = CountInCombination(enemyCombination, 2);
                        int enemyEvasion = myDice + myBonus - myPenalty;

                        if (myBonus > 0)
                        {
                            bonuses = String.Format(", +{0} за ваши 3-ки", myBonus);
                        }

                        if (myPenalty > 0)
                        {
                            penalties = String.Format(", -{0} за его 2-ки", myPenalty);
                        }

                        fight.Add(String.Format("Противник пытется уклониться: {0}{1}{2}, итого {3} - это {4} порогового значения '2'",
                                                Game.Dice.Symbol(myDice), bonuses, penalties, enemyEvasion, Game.Other.Сomparison(enemyEvasion, 2)));

                        if (enemyEvasion > 2)
                        {
                            if (birds)
                            {
                                fight.Add("GOOD|Вы уничтожили одну из птиц");

                                birds = false;

                                foreach (int dice in new int[] { 5, 4, 3 })
                                {
                                    enemyCombination.RemoveAt(dice);
                                }
                            }
                            else
                            {
                                fight.Add("BIG|GOOD|Вы уничтожили противника :)");

                                if (Benefit != null)
                                {
                                    Benefit.Do();
                                }

                                return(fight);
                            }
                        }
                        else
                        {
                            fight.Add("Противник смог уклониться");
                        }
                    }
                    else if (roundResult == -1)
                    {
                        string bonuses = String.Empty, penalties = String.Empty;

                        int enemyDice    = Game.Dice.Roll();
                        int enemyBonus   = CountInCombination(enemyCombination, 3);
                        int enemyPenalty = CountInCombination(myCombination, 2);
                        int myEvasion    = enemyDice + enemyBonus - enemyPenalty;

                        if (enemyBonus > 0)
                        {
                            bonuses = String.Format(", +{0} за его 3-ки", enemyBonus);
                        }

                        if (enemyPenalty > 0)
                        {
                            penalties = String.Format(", -{0} за ваши 2-ки", enemyPenalty);
                        }

                        fight.Add(String.Format("Вы пытется уклониться: {0}{1}{2}, итого {3} - это {4} порогового значения '2'",
                                                Game.Dice.Symbol(enemyDice), bonuses, penalties, myEvasion, Game.Other.Сomparison(myEvasion, 2)));

                        if (myEvasion > 2)
                        {
                            fight.Add("BIG|BAD|Противник уничтожил вас :(");
                            Character.Protagonist.Hitpoints = 0;
                            return(fight);
                        }
                        else
                        {
                            fight.Add("Вы смогли уклониться");
                        }
                    }
                }

                fight.Add("BOLD|Бой окончился ничьёй");

                return(fight);
            }
        }