Tôi biết rằng C# lớp ngẫu nhiên không làm cho "true ngẫu nhiên" con số, nhưng tôi đến với một vấn đề với mã này:số C# ngẫu nhiên không là "ngẫu nhiên"
public void autoAttack(enemy theEnemy)
{
//Gets the random number
float damage = randomNumber((int)(strength * 1.5), (int)(strength * 2.5));
//Reduces the damage by the enemy's armor
damage *= (100/(100 + theEnemy.armor));
//Tells the user how much damage they did
Console.WriteLine("You attack the enemy for {0} damage", (int)damage);
//Deals the actual damage
theEnemy.health -= (int)damage;
//Tells the user how much health the enemy has left
Console.WriteLine("The enemy has {0} health left", theEnemy.health);
}
tôi sau đó gọi hàm ở đây (tôi gọi nó là 5 lần vì lợi ích của kiểm tra nếu các con số là ngẫu nhiên):
if (thePlayer.input == "fight")
{
Console.WriteLine("you want to fight");
thePlayer.autoAttack(enemy1);
thePlayer.autoAttack(enemy1);
thePlayer.autoAttack(enemy1);
}
Tuy nhiên, khi tôi kiểm tra đầu ra, tôi nhận được con số chính xác như nhau cho mỗi 3 chức năng cuộc gọi. Tuy nhiên, mỗi khi tôi chạy chương trình, tôi nhận được một số lượng khác nhau (mà lặp đi lặp lại 3 lần) như thế này:
You attack the enemy for 30 damage.
The enemy has 70 health left.
You attack the enemy for 30 damage.
The enemy has 40 health left.
You attack the enemy for 30 damage.
The enemy has 10 health left.
sau đó tôi sẽ xây dựng lại/debug/chạy chương trình một lần nữa, và có được một số lượng khác nhau thay vì 30 , nhưng nó sẽ lặp lại tất cả 3 lần.
Câu hỏi của tôi là: làm cách nào để đảm bảo nhận được số ngẫu nhiên khác mỗi khi tôi gọi hàm này? Tôi chỉ nhận được cùng một "ngẫu nhiên" số hơn và hơn nữa.
Đây là cuộc gọi lớp ngẫu nhiên mà tôi đã sử dụng:
private int randomNumber(int min, int max)
{
Random random = new Random();
return random.Next(min, max);
}
Chức năng 'randomNumber' của bạn trông như thế nào? – Nija
Bạn có thể xem [bài đăng này] (http://www.codeducky.org/random-numbers-c-net-primer/), thảo luận về vấn đề này cũng như các gotchas khác với lớp .NET Random – ChaseMedallion