Search code examples
c#textmethodsupdatingadventure

Text Adventure, enemy stats not storing/updating from one method to another?


I have a system here that randomly generates an enemy character with random traits involving their race, gender, etc. When the string array enemyRace chooses one of the options I have a block of if-statements made to modify the health, defense, and money of whatever race is chosen.

Once that is finished it should display that information at the bottom in the EnemyStats() method but it doesn't, all stats show up as 0. I initialize the two methods in my Start class in the Main method.

Can you guys help to properly display its stats? Is it due to the fact that the methods are void? I'm still new to C# so any guidance will be appreciated.

class Start (Contains Main method)

        // Loading in objects 
        Enemy enemy = new Enemy();

        // Loading in the game

        Console.WriteLine("Press enter to create a new character . . . ");
        string input = Console.ReadLine();
        Console.Clear();

        // Game Loop
        enemy.EnemySpawn();
        enemy.EnemyStats();
        Console.ReadLine();

class Enemy

    Random random = new Random();

    // Enemy Base Stats
    public static int enemyHP;
    public static int enemyEP;
    public static int enemyCoins;

    // Enemy Attack
    public static int enemyMelee = 0;
    public static int enemyMagic = 0;
    public static int enemyRange = 0;

    // Enemy Defense
    public static int enemyMeleeDefense = 0;
    public static int enemyMagicDefense = 0;
    public static int enemyRangeDefense = 0;

    public void EnemySpawn()
    {

        string[] enemyGender = { "Male ", "Female " };
        string[] enemyRace = { "Human ", "Elf ", "Dwarf ", "Gnome ", "Halfling ", "Half-Elf ", "Half-Orc " };
        string[] enemyClass = { "Ranger", "Paladin", "Thief", "Mage", "Shaman", "Warlock", "Cleric", "Druid", "Monk", "Bard", "Mercenary", "Merchant" };

        // Determines if class is Melee, Magic, Healer, or Clerk
        int enemyClassChance = random.Next(1, 4);

        if (enemyRace.ToString() == "Human ")
        {
            enemyHP += 100;
            enemyEP += 80;
            enemyCoins += 10;

            enemyMelee += 5;
            enemyMagic += 5;
            enemyRange += 5;

            enemyMeleeDefense += 6;
            enemyMagicDefense += 5;
            enemyRangeDefense += 6;
        }
        else if (enemyRace.ToString() == "Elf ")
        {
            enemyHP += 90;
            enemyEP += 90;
            enemyCoins += 10;

            enemyMelee += 5;
            enemyMagic += 9;
            enemyRange += 8;

            enemyMeleeDefense += 4;
            enemyMagicDefense += 8;
            enemyRangeDefense += 4;
        }
        else if (enemyRace.ToString() == "Dwarf ")
        {
            enemyHP += 125;
            enemyEP += 100;
            enemyCoins += 10;

            enemyMelee += 8;
            enemyMagic += 5;
            enemyRange += 5;

            enemyMeleeDefense += 8;
            enemyMagicDefense += 3;
            enemyRangeDefense += 4;
        }
        else if (enemyRace.ToString() == "Gnome ")
        {
            enemyHP += 95;
            enemyEP += 80;
            enemyCoins += 10;

            enemyMelee += 4;
            enemyMagic += 8;
            enemyRange += 4;

            enemyMeleeDefense += 2;
            enemyMagicDefense += 6;
            enemyRangeDefense += 5;
        }
        else if (enemyRace.ToString() == "Halfling ")
        {
            enemyHP += 80;
            enemyEP += 75;
            enemyCoins += 10;

            enemyMelee += 3;
            enemyMagic += 10;
            enemyRange += 7;

            enemyMeleeDefense += 1;
            enemyMagicDefense += 9;
            enemyRangeDefense += 4;
        }
        else if (enemyRace.ToString() == "Half-Elf ")
        {
            enemyHP += 95;
            enemyEP += 80;
            enemyCoins += 10;

            enemyMelee += 2;
            enemyMagic += 8;
            enemyRange += 8;

            enemyMeleeDefense += 5;
            enemyMagicDefense += 8;
            enemyRangeDefense += 2;
        }
        else if (enemyRace.ToString() == "Half-Orc ")
        {
            enemyHP += 150;
            enemyEP += 125;
            enemyCoins += 10;

            enemyMelee += 10;
            enemyMagic += 1;
            enemyRange += 4;

            enemyMeleeDefense += 10;
            enemyMagicDefense += 1;
            enemyRangeDefense += 5;
        }

        switch (enemyClassChance)
        {
            case 1:
                Console.WriteLine(enemySpawnText[random.Next(0, enemySpawnText.Length)] + enemyGender[random.Next(0, enemyGender.Length)] +
                                  enemyRace[random.Next(0, enemyRace.Length)] + enemyClassMelee[random.Next(0, enemyClassMelee.Length)] + ".");
                break;
            case 2:
                Console.WriteLine(enemySpawnText[random.Next(0, enemySpawnText.Length)] + enemyGender[random.Next(0, enemyGender.Length)] +
                                  enemyRace[random.Next(0, enemyRace.Length)] + enemyClassMagic[random.Next(0, enemyClassMagic.Length)] + ".");
                break;
            case 3:
                Console.WriteLine(enemySpawnText[random.Next(0, enemySpawnText.Length)] + enemyGender[random.Next(0, enemyGender.Length)] +
                                  enemyRace[random.Next(0, enemyRace.Length)] + enemyClassHealer[random.Next(0, enemyClassHealer.Length)] + ".");
                break;
            case 4:
                Console.WriteLine(enemySpawnText[random.Next(0, enemySpawnText.Length)] + enemyGender[random.Next(0, enemyGender.Length)] +
                                  enemyRace[random.Next(0, enemyRace.Length)] + enemyClassClerk[random.Next(0, enemyClassClerk.Length)] + ".");
                break;
        }

    }

    public void EnemyStats()
    {
        Console.WriteLine("##################### ");
        Console.WriteLine("Enemy Statistics: ");
        Console.WriteLine(" ");
        Console.WriteLine("Melee:       {0}", enemyMelee);
        Console.WriteLine("Magic:       {0}", enemyMagic);
        Console.WriteLine("Range:       {0}", enemyRange);
        Console.WriteLine(" ");
        Console.WriteLine("Melee Defense:       {0}", enemyMeleeDefense);
        Console.WriteLine("Magic Defense:       {0}", enemyMagicDefense);
        Console.WriteLine("Range Defense:       {0}", enemyRangeDefense);
        Console.WriteLine("##################### ");
        Console.ReadLine();

    }
}

}


Solution

  • In your EnemySpawn() method instead of :

     if (enemyRace.ToString() == "Human ")
    

    replace in every condition (i.e. in if block use enemyClassChance as index like below)

    if (enemyRace[enemyClassChance].ToString() == "Human ")
    

    Also , I believe instead of

     int enemyClassChance = random.Next(1, 4);
    

    it should be :

    int enemyClassChance = random.Next(1, enemyRace.Length);