Программа демонстрирует получение эффекта движения изображения прицела под управлением клавишей — стрелок клавиатуры с выводом координат центра прицела — Pascal(Паскаль)

{        Внимание! Для работы этой программы необходимо, чтобы:

          1) Turbo Pascal был установлен в каталог  C:\TP;
          2) каталог C:\TP\BGI содержал файл  egavga.bgi ;
          3) в меню  Options/Directories  был указан путь
             к файлу  graph.tpu,  например,  С:\TP\UNITS.

        Если Turbo Pascal установлен в другом каталоге, нужно изменить
        путь к нему в процедуре  InitGraph.
}

 Program Sight;
   Uses Crt, Graph;       { подключение к программе библиотек Crt и Graph }
   Const Step = 5;        { шаг изменения координат центра прицела        }
      Instr = 'УПРАВЛЕНИЕ ДВИЖЕНИЕМ ПРИЦЕЛА - СТРЕЛКИ, ВЫХОД - ESC';
   Var
     GrDriver, GrMode : Integer; {тип и режим работы графического драйвера}
     X, Y             : Integer; { координаты центра прицела              }
     XStr, YStr       : String;
     Ch               : Char;
 {-----------------------------------------------------------}
 Procedure MakeSight(X, Y : Integer);       { процедура рисования прицела }
   Begin SetColor(White);
     Circle(X, Y, 80);
     SetColor(LightGreen);
     Line(X-80, Y, X+80, Y); Line(X, Y-63, X, Y+63); { вывод осей прицела }
     SetColor(LightRed); Circle(X, Y, 2);   { окружность в центре прицела }
     Str(X, XStr); Str(Y, YStr);      { перевод координат в строковый тип }
     SetColor(Yellow);
     OutTextXY(X+5, Y-35, 'x=' + XStr);  { вывод координат центра прицела }
     OutTextXY(X+5, Y-20, 'y=' + YStr)
   End;
 {-----------------------------------------------------------}
 BEGIN
   GrDriver := Detect;
   InitGraph(GrDriver, GrMode, 'C:\TP\BGI');
   SetColor(LightGray);
   X := GetMaxX div 2; Y := GetMaxY div 2;  { координаты центра экрана }
   Rectangle(50, 425, 600, 460);            { рисование рамки          }
   OutTextXY(120, 440, Instr);
   MakeSight(X, Y);                { рисование прицела в центре экрана }

   While TRUE do  { цикл работы программы до прерывания по клавише ESC }
     begin
        Ch := ReadKey;
        Case Ch of
           #27: begin CloseGraph; Halt(1) end;  { выход по клавише ESC }
           #75: X := X-Step; {изменение координат x, y нажатием стрелок}
           #77: X := X+Step; {"влево", "вправо", "вверх", "вниз"       }
           #72: Y := Y-Step;
           #80: Y := Y+Step
        end;

        ClearViewPort;               { очистка графического экрана     }
        SetColor(LightGray);         { восстановление рамки с надписью }
        Rectangle(50, 425, 600, 460);
        OutTextXY(120, 440, Instr);
        MakeSight(X, Y)      { рисование прицела в текущих координатах }
     end;

   CloseGraph;
 END.

Leave a Comment

69 − = 60