Здравствуйте, Sam145!
Немного упростил Вашу программу - теперь при нажатии номера этажа она просто запоминает "высоту", на которую должен приехать лифт.
Если лифт ниже этой высоты - он перемещается вверх, если выше - вниз.
Чтобы корректно отображалось всё здание - надо на заголовке консоли при работе программы нажать правой кнопкой мыши, выбрать "Умолчания" - "Расположение" - "Размер окна" - "Высота" и поставить там не менее 53 и перезапустить программу.
Успехов!
С уважением, Дмитрий.
Приложение:
Program Lift1;
uses crt;
var NewLY,OldLY,NeedY: byte;
ch: char;
Procedure DrawHouse;
var x,y,z: byte;
begin
textcolor(7);
for z:=0 to 4 do{рисуем 5 этажей}
begin
for x:=1 to 20 do
begin
gotoxy(x+10,z*10+3); write('■');
gotoxy(x+10,(z+1)*10+3); write('■');{рисуем нижнюю грань этажа}
end;
for y:=1 to 10 do
begin
gotoxy(11,z*10+3+y); write('■');
gotoxy(30,z*10+3+y); write('■');
end;
end;
end;
Procedure DrawLift;
var y: byte;
begin
textcolor(15);
for y:=1 to 9 do
begin
gotoxy(13,y+OldLY);write(' ');
end;
for y:=1 to 9 do
begin
gotoxy(13,y+NewLY);write('■■■■■■■■');
end;
end;
begin
OldLY:=13;
NewLY:=13;
clrscr;
DrawHouse;
DrawLift;
repeat
ch:=readkey;
OldLY:=NewLY;
case ch of{в зависимости от нажатой клавиши запоминаем на какой высоте должен оказаться лифт}
'1': NeedY:=43;
'2': NeedY:=33;
'3': NeedY:=23;
'4': NeedY:=13;
'5': NeedY:=3;
Else NeedY:=OldLY;{если нажали не 1-5 - стоим на месте}
end;
IF OldLY < NeedY then{если он выше этой высоты - идём вниз}
inc(NewLY);
IF OldLY > NeedY then{если он ниже - вверх}
dec(NewLY);
DrawHouse;
DrawLift;
until (ch='0')or(ch = #27);{выходим при нажатии '0' или 'Esc'}
end.