После этого вопроса (Show trail of moving pixel in C# WinForm project) для моего личного проекта муравьиной колонии в C#, я пытаюсь применить решение второго предложенного решения: тот, который объединяет рисование тропы в растровое изображение и новые муравьи на поверхности.Динамический рисунок муравьев в winforms во время исполнения муравьиной колонии
[...]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` используется для подсчета шагов и для установки произвольной остановки, но не имеет реального использования;
- Я уже хранить в массиве карты и некоторые другие переменные, все сведения, касающиеся феромона, движения, позиции и т.д.
Вы можете отделить каждый шаг внутри j-цикла как свой собственный метод и использовать Graphics только в этом методе. Затем добавьте таймер, при каждом тике вызывается метод. – Martheen