我想在wpf中简单的Yatsy游戏中放置,但遇到了一个奇怪的问题。基本上,单击UI中的按钮重新滚动时,会调用UpdateLogic()方法。该方法通过骰子列表循环,并且应该随机地单独更新每个值和图像链接。所有的值都没有变化
这里是奇怪的部分。如果我在调试模式下像平常一样运行它,而不使用breakboint或释放的.exe文件,则所有值和图像链接总是会获得相同的值。如果我在带有断点的调试模式下运行并逐步完成对新值的请求,它将按预期工作。
有没有人有任何建议?
namespace Yatzy
{
public partial class MainWindow : Window
{
private DiceManager dm;
private List<BitmapImage> sidesToDisplay = new List<BitmapImage>();
public MainWindow()
{
InitializeComponent();
CreateObjects();
for (int i = 0; i < 6; i++)
{
var side = new BitmapImage();
sidesToDisplay.Add(side);
sidesToDisplay[i].BeginInit();
sidesToDisplay[i].UriSource = new Uri(@"Images/Side" + (i+1) +".png", UriKind.Relative);
sidesToDisplay[i].EndInit();
}
}
private void CreateObjects()
{
dm = new DiceManager();
dm.GenerateDices();
}
private void button_Click(object sender, RoutedEventArgs e)
{
UpdateLogic();
}
private void UpdateLogic()
{
foreach (Dice dice in dm.AllDices)
{
dice.SetNewValue(sidesToDisplay);
}
Dice1.Source = dm.AllDices[0].sideToDisplay;
Dice2.Source = dm.AllDices[1].sideToDisplay;
Dice3.Source = dm.AllDices[2].sideToDisplay;
Dice4.Source = dm.AllDices[3].sideToDisplay;
Dice5.Source = dm.AllDices[4].sideToDisplay;
}
}
public class DiceManager
{
public List<Dice> AllDices { get; set; }
public DiceManager()
{
AllDices = new List<Dice>();
}
public void GenerateDices()
{
for (int i = 0; i < 5; i++)
{
AllDices.Add(new Dice());
}
}
}
public class Dice
{
public int Value { get; set; }
public BitmapImage sideToDisplay { get; set; }
public void SetNewValue(List<BitmapImage> imageList)
{
Value = new Random().Next(1, 7);
sideToDisplay = imageList[Value - 1];
}
}
}
把一个循环内随机实例的创建是错误的 – Steve