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);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы