Генерация случайных чисел в качестве номеров урона в симуляции боя с использованием цикла for - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь создать боевой симулятор, в котором случайное число генерируется между 50 и 100 в течение l oop. Это случайное число затем вычитается из одного из бойцов макс. HP, а затем наоборот, пока оно не зацикливается, и пока здоровье одного из бойцов не достигнет 0.

У меня сейчас есть это и я не знаю, что делать, чтобы это исправить и проще ли l oop использовать?

for(int x = 0; x < fighter1.hp || x < fighter2.hp; x++)
        {
            damage.Next(50, 100); //number generator
            Console.WriteLine(fighter1.name + " dealt " + damage + " damage to " 
                                        + fighter2.name);
        }

В настоящее время он печатает это:

Khal Drogo dealt System.Random damage to Jon Snow
Khal Drogo dealt System.Random damage to Jon Snow
Khal Drogo dealt System.Random damage to Jon Snow
Khal Drogo dealt System.Random damage to Jon Snow
Khal Drogo dealt System.Random damage to Jon Snow
Khal Drogo dealt System.Random damage to Jon Snow

Ответы [ 3 ]

3 голосов
/ 21 апреля 2020

Вы никогда не используете значение, которое производит ваш ГСЧ. Попробуйте что-то вроде

for(int x = 0; fighter1.hp > 0 && fighter2.hp > 0; x++)
{
   var damageDone = damage.Next(50, 100);
   fighter2.hp -= damageDone; // Your logic to apply damage goes here
   Console.WriteLine(fighter1.name + " dealt " + damageDone + " damage to " + fighter2.name);
}
1 голос
/ 21 апреля 2020

Похоже, домашнее задание для меня. Во всяком случае ....

for (int x = 0; fighter1.hp > 0 && fighter2.hp > 0; x++) // we are doing things in cycle while both fighters have more than 0 hp (until one of them is below or equal zero)
{
    var damageDone = damage.Next(50, 100); // getting the value of damage (radnom 50-100)
    // now we have to substract the damage done

    // we will use x to choose fighter
    if(x % 2 == 1) // if the number x is odd
    {
        // we will damage the second fighter
        fighter2.hp -= damageDone; // substract HP (like fighter2.hp = fighter2.hp - damageDone)
        Console.WriteLine("{0} dealt {1} damage to {2}", fighter1.name, damageDone, fighter2.name);
    }
    else // if the number x is even
    {
        // we will damage the first fighter
        fighter1.hp -= damageDone; // substract HP
        Console.WriteLine("{0} dealt {1} damage to {2}", fighter2.name, damageDone, fighter1.name)
    }
}

Код может быть оптимизирован и может не работать с первой попытки, но я думаю, домашняя работа сделана.

0 голосов
/ 21 апреля 2020

В настоящее время вы вызываете метод Next() для объекта Random, но не сохраняете возвращаемое значение, что не позволяет вам использовать его для каких-либо действий. Кроме того, когда вы печатаете вывод, вы фактически печатаете объект Random, поэтому вы видите System.Random, потому что именно так объект идентифицирует себя с помощью функции ToString().

Что вам нужно сделать, это сохранить выходные данные из вызова Next(), а затем использовать , что , в ваших выходных данных и для любой последующей обработки:

for(int x = 0; x < fighter1.hp || x < fighter2.hp; x++)
{
    var damageDealt = damage.Next(50, 100); //number generator
    Console.WriteLine(fighter1.name + " dealt " + damageDealt + " damage to " 
                                        + fighter2.name);

    // additional logic here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...