【发布时间】:2017-06-19 16:00:46
【问题描述】:
为学校的作业制作纸牌游戏,我遇到了一个问题。 在我的静态 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 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));
}
}
}
卡片构造函数:
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();
}
从运行循环 3 次开始,每次大约需要 0.5 秒,第三次之后需要更长的时间,循环通过大约 10 秒。
显然我在这里遗漏了一些东西。
【问题讨论】:
-
有多少玩家?
-
首先,我不会为每个循环创建一个新的随机数
-
@Orangesandlemons 它没有,它重用了
Program.random实例,我可以看到 -
你能显示
new Card(吗?它执行什么等?它会加载图片等吗? -
如果注释掉 player.deck.add() 方法,它是否仍然滞后迭代?
标签: c# visual-studio loops for-loop console-application