Добрый день. На 375 странице 1-й части трёхтомника Столярова есть задача на Free Pascal MovingStar. При запуске должно быть что-то типа змейки звёздочкой в консоли. Код из книги выглядит так.
program MovingStar;
uses crt;
const
DelayDuration = 100;
procedure GetKey(var code : integer );
{ ... }
type
star = record
CurX, CurY, dx, dy : integer;
end;
procedure ShowStar(var s : star);
begin
GotoXY(s.CurX, s.CurY);
write('*');
GotoXY(1, 1);
end;
procedure HideStar(var s : star);
begin
GotoXY(s.CurX, s.CurY);
write(' ');
GotoXY(1, 1)
end;
procedure MoveStar(var s : star);
begin
HideStar(s);
s.CurX := s.CurX + s.dx;
if s.CurX > ScreenWidth then
s.CurX := 1
else
if s.CurX < 1 then
s.CurX := ScreenWidth;
s.CurY := s.CurY + s.dy;
if s.CurY > ScreenHeight then
s.CurY := 1
else
if s.CurY < 1 then
s.CurY := ScreenHeight;
ShowStar(s)
end;
procedure SetDirection(var s : star; dx, dy: integer);
begin
s.dx := dx;
s.dy := dy
end;
var
s : star;
ch : char;
begin
clrscr;
s.CurX := ScreenWidth div 2;
s.CurY := ScreenHeight div 2;
s.dx := 0;
s.dy := 0;
ShowStar(s);
while true do
begin
if not KeyPressed then
begin
MoveStar(s);
delay(DelayDuration);
continue
end;
GetKey(c);
case c of
-75 : SetDirection(s, -1, 0);
-77 : SetDirection(s, 1, 0);
-72 : SetDirection(s, 0, -1);
-80 : SetDirection(s, 0, 1);
32 : SetDirection(s, 0, 0);
27 : break
end
end;
clrscr
end.
Там сокрыто тело процедуры GetKey для экономии места, но оно есть в предыдущей задаче, откуда я его и взял. Вот так выглядит полностью процедура GetKey
procedure GetKey(var code : integer );
var
c : char;
begin
c := ReadKey;
if c = #0 then
begin
c := ReadKey;
code := -ord(c)
end
else
begin
code := ord(c)
end
end;
Но при попытки компиляции выдаёт ошибку:
Free Pascal Compiler version 3.2.2+dfsg-11 [2022/05/26] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling MovingStar.pas
MovingStar.pas(83,14) Error: Identifier not found "c"
MovingStar.pas(84,12) Error: Identifier not found "c"
MovingStar.pas(85,6) Error: Constant and CASE types do not match
MovingStar.pas(86,6) Error: Constant and CASE types do not match
MovingStar.pas(87,6) Error: Constant and CASE types do not match
MovingStar.pas(88,6) Error: Constant and CASE types do not match
MovingStar.pas(89,6) Error: Constant and CASE types do not match
MovingStar.pas(90,6) Error: Constant and CASE types do not match
MovingStar.pas(95) Fatal: There were 8 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode
Строка 83 - это как раз вызов GetKey(c) в бесконечном цикле while. Проблема явно в этой процедуре, подскажите, как сделать правильно.
Перемещено hobbit из general