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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д