예제 #1
0
    public static void Main(string[] args)
    {
        List <Item> inv = new List <Item>();

        //Items Consumables
        Item hPotion       = new Item("Health Potion", "hp", 40);
        Item mPotion       = new Item("Mana Potion", "mp", 16);
        Item atkCandy      = new Item("Attack Boost Candy", "atk", 1.3);
        Item defCandy      = new Item("Defense Boost Candy", "def", 1.3);
        Item extraDefCandy = new Item("Candy of Iron Skin", "def", 1.6);

        inv.Add(new Item("Health Potion", "hp", 40));
        inv.Add(new Item("Health Potion", "hp", 40));
        inv.Add(atkCandy);
        inv.Add(defCandy);

        Fighter player    = new Fighter("Hero", 100, 36, 16, 14, 20, 10, "fireball", "greater fireball", "heal", "agility");
        Fighter player2   = new Fighter("Lesser Hero", 20, 36, 16, 14, 10, 10, "fireball");
        Fighter theEnemy  = new Fighter("Lesser Demon", 60, 10, 10, 16, 10, 11, "fireball", "agility");
        Fighter theEnemy2 = new Fighter("Bigger Demon", 80, 12, 12, 16, 13, 15, "fireball", "heal");

        //Items Equipment
        Item bSword = new Item("Bronze Sword", "atk", 6);
        Item iSword = new Item("Iron Sword", "atk", 14);

        //Add Equipment
        player.AddEquipment(iSword);

        Fighter[] players = new Fighter[] { player, player2 };
        Fighter[] enemies = new Fighter[] { theEnemy, theEnemy2 };

        //Zum Sortieren; Initialisieren des Equipments
        int index = 0;

        foreach (Fighter f in players)
        {
            f.isPlayer  = true;
            f.origIndex = index;
            f.EvalEquipment();
            index++;
        }
        index = 0;
        foreach (Fighter f in enemies)
        {
            f.isPlayer  = false;
            f.origIndex = index;
            index++;
        }

        //Zum Sortieren
        Fighter[] fightersSorted = new Fighter[players.Length + enemies.Length];
        FSort[]   fsorts         = new FSort[players.Length + enemies.Length];
        Array.Copy(players, fightersSorted, players.Length);
        Array.Copy(enemies, 0, fightersSorted, players.Length, enemies.Length);

        //Für BattleMsg, da ich derzeit nicht plane die Zugreihenfolge wie bei Octopath zu spoilern
        Fighter[] forBattleMsg = new Fighter[players.Length + enemies.Length];
        Array.Copy(fightersSorted, forBattleMsg, fightersSorted.Length);

        //Initialisiere Statuswerte
        Battle.InitiateStats(players);
        Battle.InitiateStats(enemies);

        string tmp;

        while (true)
        {
            fightersSorted = fightersSorted.OrderByDescending(o => o.tempSpd).ToArray();
            index          = 0;
            foreach (Fighter f in fightersSorted)
            {
                fsorts[index] = new FSort(f.isPlayer, f.origIndex);
                index++;
            }

            StringBuilder choices = new StringBuilder();
            foreach (Fighter f in players)
            {
                Battle.BattleMsg(choices, players.Length, forBattleMsg);
                tmp = Battle.PlayerChoice(f, enemies, inv);
                if (tmp != "")
                {
                    choices.AppendLine(tmp);
                }
            }
            foreach (Fighter f in enemies)
            {
                Battle.EnemyChoice(f, players);
            }

            Console.Clear();

            foreach (FSort fs in fsorts)
            {
                int ind = fs.index;
                if (fs.isPlayer)
                {
                    int foeInd = players[ind].foeIndex;
                    if (foeInd != -1)
                    {
                        Battle.Turn(players[ind], enemies[foeInd], players, enemies, inv);
                    }
                    else
                    {
                        Battle.Turn(players[ind], enemies[0], players, enemies, inv, true);
                    }
                }
                else
                {
                    int foeInd = enemies[ind].foeIndex;
                    if (foeInd != -1)
                    {
                        Battle.Turn(enemies[ind], players[foeInd], players, enemies, inv);
                    }
                    else
                    {
                        Battle.Turn(enemies[ind], players[0], players, enemies, inv, true);
                    }
                }
            }

            bool done = true;
            do
            {
                done = true;
                int toRemove = -1;
                foreach (Item it in inv)
                {
                    toRemove++;
                    if (it.reserved == true)
                    {
                        done = false;
                        break;
                    }
                }
                if (done == false)
                {
                    inv.RemoveAt(toRemove);
                }
            } while (done != true);

            Console.WriteLine("Press any key to continue");
            Console.ReadLine();
        }
    }