Другие языки программирования и технологии

модуль CRT паскаль 3

нужна программа заставляющая двигаться букву "О" по нажатию клавиш WASD. модуль CRT. Помогите разобраться с этим моделем. Я не понимаю по каким принципам идет имитация движения в этом модуле. Платное решение не предлагать,
Одно нажатие -- один шаг. Если зажать клавишу, то будет двигаться непрерывно.

uses
crt;
var
cx, cy, dx, dy: integer;
key: char;
nm: boolean;
begin
clrscr;
cx := 80 div 2;
cy := 25 div 2;
dx := 1;
dy := 0;
gotoxy(cx, cy);
write('O');
gotoxy(1, 1);
while true do begin
if keypressed then begin
key := readkey;
case key of
'a': begin dx := -1; dy := 0; nm := true; end;
'd': begin dx := 1; dy := 0; nm := true; end;
'w': begin dx := 0; dy := -1; nm := true; end;
's': begin dx := 0; dy := 1; nm := true; end;
'q': exit;
end;
end;
if nm then begin
nm := false;
gotoxy(cx, cy);
write(' ');
inc(cx, dx);
inc(cy, dy);
if cx = 81 then cx := 1;
if cy = 26 then cy := 1;
if cx = 0 then cx := 80;
if cy = 0 then cy := 25;
gotoxy(cx, cy);
write('O');
gotoxy(1, 1);
end;
end;
end.

Будет "модуль CRT паскаль 4"?
БТ
Бакгали Тасмаганбетов
61 211
Лучший ответ
Изучи как работают следующие функции модуля:

GoToXY
KeyPressed
ReadKey

больше тебе ничего не понадобится. Никакой "имитации движения в этом модуле" нет, придется все делать самой.
Попробуйте так:
program Project1;
uses crt;
var x,y,vx,vy:integer;
doIt: boolean;
begin
clrscr;
doIt:=True;
x:=10;
y:=10;
GoToXY(x,y);
write('O');
while doIt do
begin
if keypressed then
begin
case ReadKey of
'w': vx:=-1;
'a': vy:=-1;
's':vy:=1;
'd':vx:=1;
char(27):doIt:=false;
end;
x:=x+vx; y:=y+vy;
clrscr;
GotoXY(x,y);
write('O');
end;
end;
end.
И всё-таки переходите на лазавра. (На самом деле Lazarus читается "Лазарь", но там везде бегают леопарды...)
uses crt;
var key:char;x,y:Integer;
begin
repeat
key:=ReadKey;
clrscr;
case key of
'w':dec(y);
's':inc(y);
'a':dec(x);
'd':inc(x);
end;
GotoXY(x,y);
write('O');
until key='1';
end.