Как заставить точки двигаться по нажатию клавиш? - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, не пойму почему точки двигаются хаотично? Нужно чтобы при нажатии на стрелки вверх, вниз, влево, вправо точки двигались согласно нажатой клавише, а они двигаются рандомно. Помогите исправить.

Решение задачи: «Как заставить точки двигаться по нажатию клавиш?»

textual
Листинг программы
uses crt, graph;
 
const
  kbEsc=#27; kbUp=#72; kbDown=#80; kbLeft=#75; kbRight=#77;
  StepX=10; StepY=20;
 
type
  TPixel=object
    X, Y, Color: Integer;
    procedure Init(AX, AY, AColor: Integer);
    procedure Draw;
    procedure Hide;
    procedure MoveBy(DX, DY: Integer);
  end;
 
procedure TPixel.Init;
begin
  X:=AX; Y:=AY; Color:=AColor; Draw;
end;
 
procedure TPixel.Draw;
begin
  PutPixel(X,Y,Color);
end;
 
procedure TPixel.Hide;
begin
  PutPixel(X,Y,GetBkColor);
end;
 
procedure TPixel.MoveBy;
begin
  Hide;
  Inc(X,DX); if X>GetMaxX then Dec(X,GetMaxX) else if X<0 then Inc(X,GetMaxX);
  Inc(Y,DY); if Y>GetMaxY then Dec(Y,GetMaxY) else if Y<0 then Inc(Y,GetMaxY);
  Draw;
end;
 
var
  p: array [1..100] of TPixel;
  gd, gm, i: Integer;
  k: Char;
begin
  Randomize;
  gd:=Detect;
  InitGraph(gd,gm,'');
  if GraphResult<>grOk then begin
    WriteLn('Error: ',GraphErrorMsg(GraphResult)); Halt;
  end;
  OutText('Arrows - move, ESC - exit...');
  for i:=Low(p) to High(p) do
    p[i].Init(Random(GetMaxX+1),Random(GetMaxY+1),1+Random(GetMaxColor));
  repeat
    k:=ReadKey;
    if k=#0 then
      case ReadKey of
        kbUp:    for i:=Low(p) to High(p) do p[i].MoveBy(0,-StepY);
        kbDown:  for i:=Low(p) to High(p) do p[i].MoveBy(0, StepY);
        kbLeft:  for i:=Low(p) to High(p) do p[i].MoveBy(-StepX,0);
        kbRight: for i:=Low(p) to High(p) do p[i].MoveBy( StepX,0);
      end;
  until k=kbESC;
  CloseGraph;
end.

Объяснение кода листинга программы

  1. В начале кода используются библиотеки crt и graph.
  2. Константы kbEsc, kbUp, kbDown, kbLeft, kbRight определены для использования с клавишами на клавиатуре.
  3. Тип TPixel представляет точку на графике с полями X, Y и Color.
  4. Методы Init, Draw и Hide определены для объекта TPixel и используются для инициализации, рисования и скрытия точки соответственно.
  5. Метод MoveBy определен для объекта TPixel и используется для перемещения точки на графике.
  6. Переменная p представляет собой массив объектов TPixel, которые представляют точки на графике.
  7. Переменные gd и gm используются для работы с графическим дисплеем, а переменная i используется для итерации по массиву p.
  8. Код генерирует случайные координаты для каждой точки, чтобы убедиться, что они не выходят за пределы графика.
  9. Цикл repeat-until используется для чтения нажатий клавиш до тех пор, пока не будет нажата клавиша kbESC.
  10. Внутри цикла while считываются нажатия клавиш и выполняются соответствующие действия в зависимости от нажатой клавиши.
  11. После выхода из цикла while точка перемещается на график.
  12. Заключительные операции закрывают графический дисплей.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы