Paintbox или же лабиринт - C#
Формулировка задачи:
Добрый день, сообственно я на данный момент пытаюсь написать программу, которая находит путь из лабиринта по принципу левый руки. Вот поискал тут на форумах тему про перемещение, анимации в picturebox так и не нашел.
Т.е я хочу чтобы по button точка начала двигаться.
Лабиринт это уже нарисованная картинка, находящейся в background picture.
Собственно вот и button
Но почему-то не могу его двигать. Даже не рисуется.
private void button2_Click(object sender, EventArgs e)
{
i = Convert.ToInt32(textBox1.Text);
j = Convert.ToInt32(textBox2.Text);
dot = new int[2] { i, j };
Graphics g = pictureBox1.CreateGraphics();
while (i - 30 < 0) //условия выхода, т.е должен дойти до верхний границы экрана
{
if ((j < 129) && (j > 359)) //первая преграда
{
pictureBox1.Refresh();
g.FillRectangle(Brushes.Black, i - 10, j, 2, 2);
}
else
{
if ((i - 30 < 146))
{
pictureBox1.Refresh();
g.FillRectangle(Brushes.Black, i - 10, j, 2, 2);
}
}
}
}Решение задачи: «Paintbox или же лабиринт»
textual
Листинг программы
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
namespace Snake
{
public enum TerrainInfo
{
LastHead,
Food,
NewHead,
Tail,
}
public class Visualizer
{
public int CellSize { get; private set; }
public Size MapSizeInPixels { get; private set; }
private readonly Color backgroundColor = Color.Black;
private readonly Color barrierColor = Color.Red;
private readonly Dictionary<TerrainInfo, Color> dict;
private Bitmap map;
public Visualizer()
{
dict = new Dictionary<TerrainInfo, Color>
{
{TerrainInfo.Tail, backgroundColor},
{TerrainInfo.Food, Color.Blue},
{TerrainInfo.LastHead, Color.Green},
{TerrainInfo.NewHead, Color.GreenYellow},
};
MapSizeInPixels = new Size();
CellSize = 10;
}
public Bitmap PaintBackground(IEnumerable<Point> list, HashSet<Point> barriers, Point foodStartCoords)
{
if (map == null)
map = new Bitmap(MapSizeInPixels.Width, MapSizeInPixels.Height);
using (var g = Graphics.FromImage(map))
g.Clear(Color.Black);
foreach (var p in barriers.Select(barrier => new Point(barrier.X*CellSize, barrier.Y*CellSize))) //переводим точку из игровых координат в абсолютные
{
for (int i = 0; i < CellSize; i++)
for (int j = 0; j < CellSize; j++)
map.SetPixel(p.X + i, p.Y + j, barrierColor);
}
DrawCell(foodStartCoords, TerrainInfo.Food);
return map;
}
public Bitmap PaintTurn(SnakeTurnInfo turnInfo)
{
DrawCell(turnInfo.TailToClean, TerrainInfo.Tail);
DrawCell(turnInfo.OldHeadToClean, TerrainInfo.LastHead);
DrawCell(turnInfo.NewHead, TerrainInfo.NewHead);
DrawCell(turnInfo.NewFood, TerrainInfo.Food);
return map;
}
private void DrawCell(Point? coords,TerrainInfo terrain)
{
if (coords == null)
return;
var p = new Point(coords.Value.X * CellSize, coords.Value.Y * CellSize);
for (int i = 1; i < CellSize - 1; i++)
for (int j = 1; j < CellSize - 1; j++)
map.SetPixel(p.X + i, p.Y + j, dict[terrain]);
}
private void GetCellSize(bool zoom)
{
CellSize = zoom ? 15 : 10; //Устанавливаем размер ячейки
}
public void Initialize(Size size, bool zoom)
{
GetCellSize(zoom);
MapSizeInPixels = new Size(size.Width * CellSize, size.Height * CellSize);
}
}
}