");
}
else
{
gotoxy (3,7); printf ("Найкоротший шлях: ");
Puty (& P, X1, Y1, X2, Y2);
}
// q (& P),
gotoxy (3,8); printf ("Press Esc to exit or any key to continue");
a = getch ();
} while (a! = 27);
closegraph ();
}
Заголовний файл:
# include
# include
# include
# include
# include
const
SX = 10,// Координати початку
SY = 130,// ​​
MX = 30,// ​​колво клітин по осях
MY = 17,
R = 20,
SetkaColor = DARKGRAY,
RebroColor = GREEN,
UzelColor = GREEN,
CursorColor = 15,
PutColor = RED;
struct Lab
{
int Map [MY +2] [MX +2];
// Карта лаб 0-непроходимо 1-двері 2-кімната
int Put [MY +2] [MX +2];
// Карта проходження 1-непрохідний
};
int Grin (struct Lab * P)
{
int gdriver = DETECT, gmode, errorcode;
initgraph (& gdriver, & Gmode, "");
errorcode = graphresult ();
if (errorcode! = grOk)
{
printf ("Graphics error:% s n ", grapherrormsg (errorcode));
printf ("Graphics error: Press any key: ");
getch ();
exit (1);
};
int x, y;
for (y = 0; y
for (x = 0; x
{
P-> Map [y] [x] = 0;/* Ініціалізує масиви */
P-> Put [y] [x] = 0;
}
for (y = 0; y
{
P-> Put [y] [0] = 1;
P-> Put [y] [MX +1] = -1;
}
for (x = 0; x
{
P-> Put [0] [x] = -1;
P-> Put [MY +1] [x] = -1;
}
// Setka
setcolor (SetkaColor);
for (y = 0; y <= MY; y + +)
for (x = 0; x <= MX; x + +)
{
line (SX + x * R, SY, SX + x * R , SY + R * MY);
line (SX , SY + y * R, SX + MX * R, SY + y * R);
}
return 0;
}
void maska ​​(int x, int y)
{
setcolor (0);
rectangle (SX + (x-1) * R +1, SY + (y-1) * R +1, SX + x * R-1, SY + y * R-1);
}
void vyvod (int x, int y)
{
setcolor (CursorColor);
rectangle (SX + (x-1) * R +1, SY + (y-1) * R +1, SX + x * R-1, SY + y * R-1);
}
void Rasstan (struct Lab * P)
{
int x = 1, y = 1;// Коорт курсору
gotoxy (55,4); printf ("Управління:");
gotoxy (55,5), printf ("я - видалити"),
gotoxy (55,6); printf ("д - двері");
gotoxy (55,7); printf ("до - кімната");
gotoxy (55,8); printf (" Enter - запровадити "),
vyvod (x, y),
char a;
do {
a = getch ();
if (! a) a = getch ();
maska ​​(x, y);
switch (a)
{
case 80: if (y
case 72: if (y> 1) - Y; break;/* вгору */
case 75: if (x> 1) - X; break;/* вліво */
case 77: if (x
case 'z' : P-> Map [y] [x] = 0;
setcolor (0); setfillstyle (1,0);
bar (SX + (x-1) * R +1, SY + (y-1) * R +1, SX + x * R-1, SY + y * R-1);
break; p>// раставляем ком і дв
case 'l' : P-> Map [y] [x] = +1;
setcolor (RebroColor);
line (SX + x * RR/2, SY + (y-1) * R +1, SX + x * RR/2, SY + y * R-1);
line (SX + (x-1) * R +1, SY + y * RR/2, SX + x * R-1, SY + y * RR/2);
break;
case 'r' : P-> Map [y] [x] = 2;
setcolor (UzelColor), setfillstyle (1, UzelColor),
fillellipse (SX + x * RR/2, SY + y * RR/2, R/2-1, R/2-1);
break;
case 27: exit (0) ;//vixod iz programmi
}
vyvod (x, y);
} while (a! = 13);
maska ​​(x, y);
}
void Vvod (struct Lab * P, int * x1, int * y1, int * x2, int * y2)
{
gotoxy (3,2); printf ("Введіть вхід в лабіринт ");
int x = 1, y = 1;
char a;
vyvod (x, y);
do {
a = getch ();
if (! a) a = getch ();
maska ​​(x, y),
switch (a) {
case 80: if (y
case 72: if (y> 1) - Y; break;/* вгору */
case 75: if (x> 1) - X; break;/* вліво */
case 77: if (x
case 27: exit (0);
}
vyvod (x, y);
if ((a == 13) && (P-> Map [y] [x] == 2)) break;
} while (1);
maska ​​(x, y);
* x1 = x; * y1 = y;
gotoxy (3,3); printf ("x1 =% 3i y1 =% 3i", x, y),
gotoxy (3,4); printf ("Введіть вихід");
vyvod (x, y);
do {
a = getch ();
if (! a) a = getch ();
maska ​​(x, y);
switch (a) {
case 8...