далее при нажатии клавиш-стрелок символ двигается по окну(и не может двигаться если упирается в границу),выход осуществляется клавищей esc.
Проблема:При создании окна границы сбиваются(не соответствуют заданным из-за чего символ движется неправильно) ,не знаю почему и как это исправить
Код: Выделить всё
program proverka;
uses Crt;
var
x1,x2,y1,y2: integer;
cf,cs:byte;
ch:char;
procedure MoveCh(x1,y1,x2,y2:integer;cf,cs:byte;ch:char);
var
xch,ych:integer;
key:char;
begin
window(x1,y1,x2,y2);
textbackground(cf);
textcolor(cs);
clrscr;
xch:=((x2-x1) div 2)+1;
ych:=((y2-y1) div 2)+1;
gotoxy(xch,ych);
write(ch);
gotoxy(xch,ych);
repeat
key:=readkey;
if ord(key)=0 then begin
key:=readkey;
gotoxy(xch,ych);
case ord(key) of
75: begin
if (xch>x1) then begin
gotoxy(xch,ych);
write(' ');
xch:=xch-1;
gotoxy(xch,ych);
write(ch);
gotoxy(xch,ych);
end;
end;
77: begin
if (xch<x2) then begin
gotoxy(xch,ych);
write(' ');
xch:=xch+1;
gotoxy(xch,ych);
write(ch);
gotoxy(xch,ych);
end;
end;
80: begin
if (ych<y2) then begin
gotoxy(xch,ych);
write(' ');
ych:=ych+1;
gotoxy(xch,ych);
write(ch);
gotoxy(xch,ych);
end;
end;
72: begin
if (ych>y1) then begin
gotoxy(xch,ych);
write(' ');
ych:=ych-1;
gotoxy(xch,ych);
write(ch);
gotoxy(xch,ych);
end;
end;
end;
end;{if}
until (ord(key)=27);
end;
BEGIN
textbackground(black);
textcolor(white);
clrscr;
writeln('Программа проверки подпрограммы MoveChv.');
{
write('Введите x1,y1,x2,y2 через пробел:');
readln(x1,y1,x2,y2);
write('Введите цвет фона: ');
readln(cf);
write('Введите цвет символа: ');
readln(cs);
write('Введите символ: ');
readln(ch);
MoveCh(x1,y1,x2,y2,cf,cs,ch);
}
ych:=0;
xch:=0;
x1:=5;
y1:=3;
x2:=30;
y2:=10;
ch:='*';
MoveCh(x1,y1,x2,y2,magenta,black,'*');
END.