学校での課題のためのカードゲームを作って、問題が発生しました。 静的なGameクラスの私の "Start"メソッドでは、ゲームのいくつかを初期化して、動作を停止するように見えます。いくつかのデバッグの後アプリケーションが狂って遅くなるループで立ち往生する
Players[0].MyTurn = true;
for (int i = 0; i < Players.Count; i++) //Initialize decks for all players
{
Game.InitializeDeck(Players[i], Names);
}
for (int i = 0; i < Players.Count; i++) //Flush decks for all players
{
Game.ShuffleDeck(Players[i]);
}
for (int i = 0; i < Players.Count; i++) //Draw 5 cards for all players
{
for (int x = 0; x < 5; x++)
{
Game.DrawCard(Players[i]);
}
}
Thread checkPlayersHealth = new Thread(CheckPlayersHealth);
checkPlayersHealth.Start();
、このようになります "InitializeDeck" 方法、で立ち往生ようだ:それはランニングで始まる
public Card(string name, int manaCost, int health, int powerNum, int baseDmg)
{
Name = name;
ManaCost = manaCost;
Health = health;
PowerNum = powerNum;
BaseDmg = baseDmg;
int numOfPowers = 4; //Amount of different powers excluding "No power"
if (powerNum <= 0)
{
PowerName = "No power";
}
else if (powerNum == 1)
{
PowerName = "Heal any target";
Power = new Power(false, true, 6, Program.random.Next(1, 4));
}
else if (powerNum == 2)
{
PowerName = "Deal 1-5 Damage to the enemy champion, and heal yourself for 1-5 HP";
Power = new Power(true, true, 5, Program.random.Next(1, 4));
}
else if (powerNum == 3)
{
PowerName = "Sacrifice health from a minion to heal yourself 1-5 HP";
}
else if (powerNum == numOfPowers)
{
PowerName = "Drain HP from yourself to deal damage to a random enemy target";
Power = new Power(true, false, 5, Program.random.Next(1, 4));
}
Thread checkIfDead = new Thread(CheckIfDead);
checkIfDead.Start();
}
:
public static void InitializeDeck(Player player, List<string> Names)
{
for (int i = 0; i < 10; i++) //A loop that creates 30 randomly generated cards, with 3 of each card
{
Console.WriteLine("asd");
Random random = Program.random;
int rNameNum1 = random.Next(0, Names.Count); //r for random
int rNameNum2 = random.Next(0, Names.Count);
int rHealth = random.Next(0, 10);
int rPowerNum = random.Next(0, 5);
int rBaseDmg = random.Next(0, 8);
int manaCost = (rHealth + rPowerNum + rBaseDmg)/2;
for (int x = 0; x < 3; x++)
{
player.Deck.Add(new Card(Names[rNameNum1] + Names[rNameNum2], manaCost, rHealth, rPowerNum, rBaseDmg));
}
}
}
カードのコンストラクタループは3回、それぞれ約0.5秒、3回後にはさらに長い時間がかかり、ループが通過するまで約10秒かかります。
明らかに私はここに何か不足しています。すべてのカードのそれぞれで無限ループを持つ新しいスレッド(各プレーヤーのための30枚のカード)の作成
どのように多くの選手? –
最初に、私はループごとに新しいランダムを作成しません。 – Orangesandlemons
@Orangesandlemonsそれは、私が見ることができるように 'Program.random'インスタンスを再利用します。 –