我如何在wpf中冷却一个循环?森林火灾模拟

时间:2017-03-12 14:39:25

标签: wpf dispatchertimer

作为个人工作,我必须在WPF中进行森林火灾模拟。

我使用网格创建了所有地图,并使用了数组。 Fire通过随机数添加(在ex:case =“Forest”时在数组中)。 火正在燃烧所有“森林案例”,它取决于风(N S E W等)。一切都很好!

但是我通过“火圈”遇到了一个小问题。我的意思是,当我点击我的按钮'火进度'(进行火灾扩展)时,所有的森林案例都会同时燃烧。(方向是正确的,只有正确方向的情况才会燃烧,问题不在这里)。

我想冷却这个循环,因为每个案例都会被烧掉,例如:

案例森林烧伤。等待。案例森林2烧伤。等等。并非所有情况都在正确的方向(风)。

我尝试使用调度程序计时器(TimeSpan)。但没有成功。唯一有效的是循环的结果是减速(以秒,毫秒,天,等等)。但是所有案例都在同一时间发生变化。而不是一个接一个。

如果我的英语语法不正确,请道歉!

这是我的代码:

private void DeclencherLeFeu()
        {
            TempsDuJeu = new DispatcherTimer();
            TempsDuJeu.Interval = TimeSpan.FromSeconds(1);
            TempsDuJeu.Tick += new EventHandler(OnTimerGameEvent);
            TempsDuJeu.Start();

            TempsQueMetLeFeuPourBrulerLaForet = new DispatcherTimer();
            TempsQueMetLeFeuPourBrulerLaForet.Interval = TimeSpan.FromSeconds(8);
            TempsQueMetLeFeuPourBrulerLaForet.Tick += new EventHandler(LesArbresSontCalcines);
            TempsQueMetLeFeuPourBrulerLaForet.Start();
        }

注意:LesArbresSontCalcines在英语中表示树木被烧毁。它调用一个函数如下:

private void LesArbresSontCalcines(object sender, EventArgs e)
        {
            for (int i = 0; i < 7; i++)
            {
                for (int j = 1; j < 10; j++)
                {
                    if (MonTableau[i, j].Name == "Feu")
                    {
                        MonTableau[i, j].Source = new BitmapImage(new Uri(@"E:\tp999\wpfapplication13\wpfapplication13\ArbreMort1.gif", UriKind.RelativeOrAbsolute));
                        ImageBehavior.SetAnimatedSource(MonTableau[i, j], new BitmapImage(new Uri(@"E:\tp999\wpfapplication13\wpfapplication13\ArbreMort1.gif", UriKind.RelativeOrAbsolute)));

                        MonTableau[i, j].Name = "Noir";
                    }
                }
            }
        }

注意:所有刻录案例(我在林案例中使用fire.gif)都将替换为ArbreMort1.gif(代表一棵黑树)。

在我的代码的这一部分中,所有的刻录案例都在同一时间内变为死树。而不是一个接一个。

我试图这样做,第一个燃烧的情况将是第一个被黑暗(使用ArbreMort1.gif),依此类推,直到结束燃烧的情况(这将是最后一个被转换)。

我应该如何使用此调度程序计时器?

感谢您的回复! :)

2 个答案:

答案 0 :(得分:0)

您需要重新构建处理程序。创建类成员int [7] j和int i = 0;

然后在处理程序索引j数组中使用i值来确定j索引是什么。然后递增j索引然后递增i mod 7.所以现在需要560秒才能完成序列。

答案 1 :(得分:0)

感谢您的回答!我会尽力解决它! :)

度过美好的一天!