Pascal программа в терминале
Вот код программы. Ранее в процедуре Animate было только 4 цикла, и символ # бегал только в одну сторону по часовой. Я попытался сделать чтобы при нажатии пробела, направление изменялось, но не компилируется. Подскажите как поправить?
program clrscreenmode;
uses SysUtils, Crt;
const
width = 12;
height = 12;
delay = 100;
gridWidth = 10;
gridHeight = 10;
gridBack = '*';
gridRunner = '#';
var
EscPressed: Boolean;
function IsEscPressed(): Boolean;
begin
if (not EscPressed) and KeyPressed() then
EscPressed := ReadKey() = #27;
IsEscPressed := EscPressed;
end;
procedure DrawGrid(x, y : integer);
var
i, j : integer;
begin
for i := 0 to gridHeight - 1 do begin
gotoXY(x, y + i);
for j := 0 to gridWidth - 1 do
write(gridBack);
end;
end;
procedure MoveGrid(x, y : integer);
var
forward: Boolean;
begin
forward := True;
repeat
gotoXY(1, 1);
Animate(forward);
if KeyPressed and (ReadKey = ' ') then forward := not forward;
until IsEscPressed();
end;
procedure Animate(forward: Boolean);
var
i : integer;
begin
if forward then begin
for i := 0 to gridWidth - 1 do begin
gotoXY(x + i, y);
write(gridRunner);
gotoXY(x + i, y);
sleep(delay);
write(gridBack);
if IsEscPressed then exit;
end;
for i := 0 to gridHeight - 1 do begin
gotoXY(x + gridWidth - 1, y + i);
write(gridRunner);
gotoXY(x + gridWidth - 1, y + i);
sleep(delay);
write(gridBack);
if IsEscPressed then exit;
end;
for i := gridWidth - 1 downto 0 do begin
gotoXY(x + i, y + gridHeight - 1);
write(gridRunner);
gotoXY(x + i, y + gridHeight - 1);
sleep(delay);
write(gridBack);
if IsEscPressed then exit;
end;
for i := gridHeight - 1 downto 0 do begin
gotoXY(x, y + i);
write(gridRunner);
gotoXY(x, y + i);
sleep(delay);
write(gridBack);
if IsEscPressed then exit;
end;
end
else begin
for i := gridWidth - 1 downto 0 do begin
gotoXY(x + i, y);
write(gridRunner);
gotoXY(x + i, y);
sleep(delay);
write(gridBack);
if IsEscPressed then exit;
end;
for i := gridHeight - 1 downto 0 do begin
gotoXY(x, y + i);
write(gridRunner);
gotoXY(x, y + i);
sleep(delay);
write(gridBack);
if IsEscPressed then exit;
end;
for i := 0 to gridWidth - 1 do begin
gotoXY(x + i, y + gridHeight - 1);
write(gridRunner);
gotoXY(x + i, y + gridHeight - 1);
sleep(delay);
write(gridBack);
if IsEscPressed then exit;
end;
for i := 0 to gridHeight - 1 do begin
gotoXY(x + gridWidth - 1, y + i);
write(gridRunner);
gotoXY(x + gridWidth - 1, y + i);
sleep(delay);
write(gridBack);
if IsEscPressed then exit;
end;
end;
end;
var
x, y : integer;
begin
clrscr;
x := (screenWidth - gridWidth) div 2;
y := (screenHeight - gridHeight) div 2;
DrawGrid(x, y);
MoveGrid(x, y);
clrscr;
end.
fpc clrscreenmode.pas
Free Pascal Compiler version 3.2.2 [2022/03/16] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling clrscreenmode.pas
clrscreenmode.pas(42,7) Error: Identifier not found "Animate"
clrscreenmode.pas(53,10) Error: Identifier not found "x"
clrscreenmode.pas(53,17) Error: Identifier not found "y"
clrscreenmode.pas(55,10) Error: Identifier not found "x"
clrscreenmode.pas(55,17) Error: Identifier not found "y"
clrscreenmode.pas(61,10) Error: Identifier not found "x"
clrscreenmode.pas(61,29) Error: Identifier not found "y"
clrscreenmode.pas(63,10) Error: Identifier not found "x"