在为我在 c# 中的个人蚁群项目提出这个问题(在 C# WinForm 项目中显示移动像素的轨迹)之后,我正在尝试应用第二个建议的解决方案:将轨迹绘制成位图和新蚂蚁到表面。
[...]Application.Run(new ShowAnts());[...]
public partial class ShowAnts : Form
{
Bitmap bmp;
int j = 0;
public ShowAnts()
{
InitializeAntProgram();
InitializeComponent();
bmp = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);
pictureBox1.Image = bmp;
}
public void RenderAnts(object sender, PaintEventArgs e)
{
using (Graphics G = Graphics.FromImage(pictureBox1.Image))
{
while (j < 1000)
{
Map.EvaporatesPheromones();
foreach (Vector2D food in foodSrcs)
{
Map.SetMapPoint(food, 500);
}
foreach (Ant a in ants)
{
Brush c;
c = Brushes.DarkBlue;
if (a.role == AntRole.Scout)
{
a.Move(j);
c = Brushes.Red;
}
e.Graphics.FillRectangle(Brushes.DarkBlue, a.position.x, a.position.y, 1, 1);
G.FillRectangle(Brushes.Gray, a.position.x, a.position.y, 1, 1);
}
j++;
}
}
}
}
上面的代码显示了将蚂蚁运动绘制成 winform 的图形尝试。它完美地工作,但它只显示最终结果。我想展示一步一步的演变,在不重新解析我的地图信息的情况下保持图形轨迹信息。
请考虑我开发此“图形界面”的工作控制台项目已经存在,因此:
- 一些变量设置在项目的其他地方(即:食物);
- `a.Move(j);` 指的是蚂蚁逻辑本身(分析、决策、新单元格移动指的是地图数组);
- `j` 计数器用于计算步数和设置任意停止,但没有实际用途;
- 我已经将有关信息素、运动、位置等的所有信息存储到地图数组和其他一些变量中。