p align="justify"> У програмі передбачена можливість збереження лабіринту у файл і завантаження лабіринту з файлу. Знайти ці функції можна в пункті меню Файл raquo ;, зазначеному на малюнку А.7.
Малюнок А.7 - Пункт меню «Файл»
При завантаженні пошкодженого файлу з'являється попереджувальне вікно, зображене на малюнку А.8. Пропонується вибрати інший файл.
Малюнок А.8 - Помилка завантаження файлу
А.4.7 Довідкова інформація про систему
При виборі з пункту меню «Довідка» пункт «Відомості про систему» ??відкривається довідкове вікно, що містить інформацію про авторів та документацію. Дане вікно зображено на малюнку А.9.
Малюнок А.9 - Довідка про систему
При переході по посиланнях «Створення», «Пошук шляху», «Зберігання» можна отримати відповідну довідкову інформацію.
Додаток Б
Лістинг програми
//основний клас Лабіринт
using System;System.Collections.Generic;System.Linq;System.Text;System.Data;System.Drawing;System.Windows.Forms;System.Diagnostics;System.Threading;System.IO;labirint
{labirint
{int [,,] lab=new int [100, 100, 3];// Лабіринт: [i, j, 0] - осередки лабіринту, [i, j, 1] - для хвильового методу - довжина хвилі, для однорукого методу - шлях персонажа
public int [,] path=new int [10000, 2];// Зворотний шлях для хвильового методаint countpath=0;// Кількість кроків в дорозі хвильового методаint xcells;// Осередків по горізонталіint ycells;// Осередків по вертікаліint xstart;// Координати стартової позіцііint ystart;// Координати стартової позіцііint xstop;// Координати кінцевої позіцііint ystop;// Координати кінцевої позіцііint tx;// Поточне положення при однорукого методеint ty;// Поточне положення при однорукого методеint way;// Напрямок руху при однорукого методеint len;// Поточна довжина шляху при однорукого методеint vert_rating=50;// Ймовірність у% створення вертикальної стінки в алгоритмі Ейлераint hor_rating=50;// Ймовірність у% створення горизонтальної стінки в алгоритмі Ейлераint state;// Поточний стан лабіринту:
//0 - порожній, 1 - створений шаблон, 2 - розставлений вхід, 3 - розставлені вхід/вихід, 4 - згенерований лабіринт
//5 - виконується пошук шляху хвильовим методом, 6 - шлях знайдений хвильовим методом
//7 - виконується пошук шляху одноруким методом, 8 - шлях знайдений одноруким методом
//0 - порожній, 1 - створений шаблон, 2 - розставлені вхід/вихід, 3 - згенерований лабіринт
//генерація лабіринту алгоритмом Ейлера
//Переваги алгоритму Ейлера:
//1. відсутні зациклення (мається тільки один шлях між двома точками)
//2. відсутні ізольовані області
//3. З будь-якої точки лабіринту в будь-яку іншу точку завжди існує шлях
//3. дуже швидкий
//4. використовує пам'ять ефективніше, ніж інші популярні алгоритми
public void generate_eiler ()
{rnd=new Random (); i, j, k, xx, yy, x1, tt, cn, tmn;
int mn=0;
//очистимо всі осередки лабіринту
for (i=1; i lt; xcells - 1; i ++)
{(j=1; j lt; ycells - 1; j ++)
{[i, j, 0]=0;
}
}
//пройдемо по рядках
for (j=0; j lt; (ycells - 1)/2; j ++)
{= j * 2 + 1;
//привласнимо осередкам, що не входять ні в яке безліч, своє унікальне безліч
for (i=0; i lt; (xcells - 1)/2; i ++)
{= i * 2 + 1; (lab [xx, yy, 0] == 0)
{[xx, yy, 0]=++ mn;
}
}
//пройдемо зліва направо по рядку і розставимо праві межі
for (i=0; i lt; (xcells - 1)/2; i ++)
{= i * 2 + 1; (lab [xx, yy, 0] == lab [xx + 2, yy, 0])//поточна комірка і осередок праворуч належать одному безлічі
{[xx + 1, yy, 0]=1;// Поставимо межу між ними [xx + 1, yy + 1, 0]=1;
}
{
//вирішимо створювати праву межу між осередками чи ні
tt=rnd.Next (0, 100); (tt gt; vert_rating)//не створимо кордон
{[xx + 1, yy, 0]=0; [xx + 2, yy,...