Основной путь 1: Занят
Основной путь 2: Занят
Вспомогательный путь 1: Свободен
Вспомогательный путь 2: Занят
Поезд занял основной путь 1.
Поезд находящийся на основном пути 2 отбыл.
Поезд находящийся на вспомогательном пути 2 перешел на основной путь 2.
Поезд находящийся на основном пути 1 перешел на вспомогательный путь 1.
Подошедший к пути 1 поезд занял основной путь 1.
Подошедший к пути 2 позед занял вспомогательный путь 2.
uses crt,graph;
const
n=10;
m=20;
a:array[0..n,0..m]of byte=((0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0),
(0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0),
(3,1,4,2,1,4,2,1,1,1,1,1,1,1,1,1,1,2,4,1,3),
(0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0),
(3,1,4,2,1,1,1,1,1,1,1,1,1,1,2,4,1,2,4,1,3),
(0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0),
(0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));
var
xA,yA,x_A,y_A,zA:integer;{переменные первого парвоза}
xB,yB,x_B,y_B,zB:integer;{переменные второго паравоза}
wA,wB:boolean;{индикаторы стрелок}
b:array[0..n,0..m]of byte;{}
procedure ShowPath;
var
x,y,z:integer;
begin
ClearDevice;
for x:=0 to n do
for y:=0 to m do
if a[x,y]<>0 then
begin
if b[x,y]>0 then z:=6
else z:=0;
SetColor(7+z);
Circle(100+7*y,100+7*x,3);
end;
{первый паровоз}
SetColor(12);
Circle(100+7*yA,100+7*xA,2);
Circle(100+7*yA,100+7*xA,1);
Circle(100+7*y_A,100+7*x_A,2);
{второй паровоз}
SetColor(11);
Circle(100+7*yB,100+7*xB,2);
Circle(100+7*yB,100+7*xB,1);
Circle(100+7*y_B,100+7*x_B,2);
end;
procedure OneStep(var x,y,k,l,z:integer;var w:boolean);
var
xx,yy:integer;
begin
xx:=x;
yy:=y;
{анализируем состояние пути}
case a[x,y] of
1:begin{следующий шаг}
y:=y+z;
w:=false;
if(a[x,y]=0)then
begin
y:=y-z;
if(a[x+1,y]>0)and((x+1)<>k)then inc(x)
else
if(a[x-1,y]>0)and((x-1)<>k)then dec(x);
end;
end;
2:if w then{переключаем стрелку}
begin
if (random(20)mod 2)>0 then{}
begin{}
if a[x+1,y]>0 then x:=x+1
else x:=x-1;
end
else y:=y+z;
w:=false;
end
else y:=y+z;
3:begin{разворот}
z:=-z;
y:=y+z;
end;
4:begin{включаем стрелку}
w:=true;
y:=y+z;
end;
end;
Delay(30000);
k:=xx;{копируем хвост}
l:=yy;
end;
begin
{переходим в графику}
xA:=detect;{}
InitGraph(xA,yA,'');{входим в графику}
yA:=GraphResult;{получаем результат}
if yA<>0 then
begin
{нет графики стоп}
Writeln('InitGraphError:',yA);
ReadKey;
end
else
begin
{сбрасываем генератор}
randomize;
{начало первый паровоз}
xA:=3;x_A:=3;
yA:=2;y_A:=1;
zA:=1;
{начало второй паровоз}
xB:=7;x_B:=7;
yB:=m-1;y_B:=m;
zB:=-1;
{пока не нажата клавиша}
repeat
{рисуем карту станции и паровозы}
ShowPath;
Delay(30000);
{считаем следующую координату}
OneStep(xA,yA,x_A,y_A,zA,wA);
OneStep(xB,yB,x_B,y_B,zB,wB);
if (abs(xA-xB)+abs(yA-yB))<2then{защита от столкновения}
begin
zA:=-zA;
zB:=-zB;
end;
Delay(30000);
until KeyPressed;
ReadKey;
CloseGraph;
end;
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.