ила клітинку з виходом
{
//виводимо повідомлення і виходім.Show ( У лабіринті НЕ існує шляху від входу до виходу! ) ;;
}
/// pictureBox1.Refresh ();// Обновити зображення pictureBox1 на формі
//шлях мається!
//знайдемо найкоротший відстані, переміщаючись від виходу до входу
//поточна комірка при зворотному пошуку=xstop - 1;
ty=ystop - 1;=0; [countpath, 0]=tx; [countpath, 1]=ty; ++;=lab [tx, ty, 1];
while (lastwave gt; 0)//поки не дійшли до входу (у нього номер хвилі=0)
{
/// pictureBox1.Refresh ();// Обновити зображення pictureBox1 на формі
/// Thread.Sleep (70);// Зробимо паузу на вказану кількість мілісекунд
//червоним шрифтом нана осередку напишемо номер хвилі
/// gfr.DrawString (Convert.ToString (lastwave), new Font ( Tahoma raquo ;, 8), Brushes.Red, new Point ((int) tx * sizecell + sizecell/3 , (int) ty * sizecell + sizecell/3));
//далі йде перевірка сусідніх осередків і пошук осередку в якій довжина хвилі на 1 менше поточного значення хвилі
//перевіряємо осередок зверху ((ty gt; 0) amp; amp; (lab [tx, ty - 1, 1] == lastwave - 1))
{
//намалюємо червону лінію (шлях) від поточної комірки до сусідньої
/// gfr.DrawLine (Pens.Red, (int) tx * sizecell + sizecell/2, (int) ty * sizecell + sizecell/2, (int) tx * sizecell + sizecell/ 2, (int) (ty - 1) * sizecell + sizecell/2); [countpath, 0]=tx; [countpath, 1]=ty - 1; ++; -;// Змінюємо поточну ячейку-;// Зменшуємо довжину хвилі
continue;// Переходимо до наступної ітерації циклу
}
//перевіряємо осередок знизу ((ty lt; ycells - 1) amp; amp; (lab [tx, ty + 1, 1] == lastwave - 1))
{
//намалюємо червону лінію (шлях) від поточної комірки до сусідньої
/// gfr.DrawLine (Pens.Red, (int) tx * sizecell + sizecell/2, (int) ty * sizecell + sizecell/2, (int) tx * sizecell + sizecell/ 2, (int) (ty + 1) * sizecell + sizecell/2); [countpath, 0]=tx; [countpath, 1]=ty + 1; ++; ++;// Змінюємо поточну ячейку-;// Зменшуємо довжину хвилі
continue;// Переходимо до наступної ітерації циклу
}
//перевіряємо осередок зліва ((tx gt; 0) amp; amp; (lab [tx - 1, ty, 1] == lastwave - 1))
{
//намалюємо червону лінію (шлях) від поточної комірки до сусідньої
/// gfr.DrawLine (Pens.Red, (int) tx * sizecell + sizecell/2, (int) ty * sizecell + sizecell/2, (int) (tx - 1) * sizecell + sizecell/2, (int) ty * sizecell + sizecell/2); [countpath, 0]=tx - 1; [countpath, 1]=ty; ++; -;// Змінюємо поточну ячейку-;// Зменшуємо довжину хвилі
continue;// Переходимо до наступної ітерації циклу
}
//перевіряємо осередок праворуч ((tx lt; xcells - 1) amp; amp; (lab [tx + 1, ty, 1] == lastwave - 1))
{
//намалюємо червону лінію (шлях) від поточної комірки до сусідньої
/// gfr.DrawLine (Pens.Red, (int) tx * sizecell + sizecell/2, (int) ty * sizecell + sizecell/2, (int) (tx + 1) * sizecell + sizecell/2, (int) ty * sizecell + sizecell/2); [countpath, 0]=tx + 1; [countpath, 1]=ty; ++; ++;// Змінюємо поточну ячейку-;// Зменшуємо довжину хвилі
continue;// Переходимо до наступної ітерації циклу
}
}
/// pictureBox1.Refresh ();// Обновити зображення pictureBox1 на формі
}
//Алгоритм однієї руки. Відповідає на питання: чи можна переміститися в зазначену осередок?
public bool can (int tox, int toy)
{((tox lt; 0) || (tox gt; xcells - 1) || (toy lt; 0) || (toy gt; ycells - 1)) return false; (lab [tox, toy, 0] == 1) return false;
return true;
}
//Зробити наступний крок
//Використовується в алгоритмі однієї руки. bool NextStep ()
{w0=way;// Напрямок, у бік якого дивимося 1-вгору 2-вправо 3-вниз 4-влевоpx=0;// Зсув по горізонталіpy=0;// Зсув по вертикалі//переглянемо все навколо
{(w0 == 1) {px=0; py=- 1; }//Якщо напрямок вгору, коригуємо зміщення (w0 == 2) {px=1; py=0; }//Якщо напрямок вправо, коригуємо зміщення (w0 == 3) {px=0; ...