Beispiel #1
0
/// Instrukcje, które są wykonywane podczas walki
        static bool fight()
        {
            currentEnemy = currentRoom.getEnemy();
            int enemyHP = currentEnemy.getMaxHealth();

            while (enemyHP > 0)
            {
                int  heroAttackType  = 4;
                int  enemyAttackType = currentEnemy.getAttackType();
                bool done            = false;

                while (!done)
                {
                    Console.WriteLine("Co robisz?");
                    Console.WriteLine("1. Atak Pięścią");
                    Console.WriteLine("2. Atak Mieczem");
                    Console.WriteLine("3. Mocne Uderzenie");
                    Console.WriteLine("4. Ulecz");
                    Console.WriteLine("5. Uciekaj");
                    string inp = CappedRead();
                    done = true;
                    switch (inp)
                    {
                    case "1":
                        heroAttackType = 0;
                        break;

                    case "2":
                        if (hero.getWeapon() == null)
                        {
                            Console.WriteLine("\nNie masz broni");
                            done = false;
                        }
                        heroAttackType = 1;
                        break;

                    case "3":
                        if (hero.getLevel() < 4)
                        {
                            Console.WriteLine("\nUmiejętność dostępna od 4 poziomu");
                            done = false;
                        }
                        heroAttackType = 2;
                        break;

                    case "4":
                        if (hero.getBandage() == null)
                        {
                            Console.WriteLine("\nNie masz bandaży");
                            done = false;
                        }
                        else
                        {
                            heroAttackType = 4;
                            int rest = hero.restoreHealth(hero.getBandage().healthPoints());
                            Console.ForegroundColor = ConsoleColor.Green;
                            Console.WriteLine("Bohater używa bandaży. Ma teraz " + hero.causeDamage(0) + "punktów życia");
                            Console.ForegroundColor = ConsoleColor.White;
                            if (rest > 0)
                            {
                                hero.pickUpBandage(new Bandage(rest));
                            }
                            else
                            {
                                hero.pickUpBandage(null);
                            }
                        }
                        break;

                    case "5":
                        if (rand.Next() % 4 + currentEnemy.getSpeed() < hero.getSpeed())
                        {
                            Console.WriteLine("Udało Ci się uciec");
                            return(move());
                        }
                        else
                        {
                            Console.WriteLine("Nie udało Ci się uciec");
                        }
                        break;

                    case "q":
                        return(true);

                    default:
                        done = false;
                        break;
                    }
                }

                int enemyDamage = calculateDamage(currentEnemy.getAttack(), enemyAttackType, hero.getDefense(), null);
                int heroDamage  = calculateDamage(hero.getAttack(), heroAttackType, currentEnemy.getDefense(), hero.getWeapon());

                if (rand.Next() % 3 + currentEnemy.getSpeed() > hero.getSpeed())
                {
                    //przeciwnik gra pierwszy
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine(currentEnemy + Attacks[enemyAttackType] + " za " + enemyDamage);
                    Console.ForegroundColor = ConsoleColor.White;
                    if (hero.causeDamage(enemyDamage) <= 0)
                    {
                        return(true);
                    }
                    Console.WriteLine("Bohater" + Attacks[heroAttackType] + " za " + heroDamage);
                    enemyHP -= heroDamage;
                }
                else
                {
                    Console.WriteLine("Bohater" + Attacks[heroAttackType] + " za " + heroDamage);
                    enemyHP -= heroDamage;
                    if (enemyHP > 0)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine(currentEnemy + Attacks[enemyAttackType] + " za " + enemyDamage);
                        Console.ForegroundColor = ConsoleColor.White;
                        if (hero.causeDamage(enemyDamage) <= 0)
                        {
                            return(true);
                        }
                    }
                }
            }
            Console.WriteLine("Pokonałeś " + currentEnemy + " i dostałeś " + currentEnemy.getExp() + " punktów doświadczenia");
            if (hero.addExp(currentEnemy.getExp()))
            {
                Console.WriteLine("NOWY POZIOM");
            }
            currentEnemy.kill();
            return(false);
        }