2017-02-02 8 views
0

学校での課題のためのカードゲームを作って、問題が発生しました。 静的な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枚のカード)の作成

+0

どのように多くの選手? –

+1

最初に、私はループごとに新しいランダムを作成しません。 – Orangesandlemons

+1

@Orangesandlemonsそれは、私が見ることができるように 'Program.random'インスタンスを再利用します。 –

答えて

2

、このような良いアイデアではなかった> :)

Thread checkIfDead = new Thread(CheckIfDead); 
     checkIfDead.Start(); 

public void CheckIfDead() 
    { 
     while (true) 
     { 
      if (Health <= 0) 
      { 
       Dead = true; 
      } 
     } 
    } 
+0

ちょうど質問に入れられる必要がどのくらいのコード:) – Orangesandlemons

関連する問題