Как сделать, чтобы объект перемещался только при нажатом "пробеле"? Заранее спасибо - PascalABC.NET

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

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

Как сделать, чтобы объект перемещался только при нажатом "пробеле"? Заранее спасибо.
Листинг программы
  1. uses GraphABC;
  2. var
  3. X,Y,dX,dY:integer;
  4. begin
  5. X:=10;
  6. Y:=10;
  7. dX:=1;
  8. dY:=1;
  9. while X<>400 do
  10. begin
  11. if (Y=100) or (Y=1) then dY:=-dY;
  12. if (X=260) or (X=1) then dX:=-dX;
  13. begin
  14. brush.Color:=clwhite;
  15. FillEllipse(X,Y,X+10,Y+10);
  16. X:=X+dX;
  17. Y:=Y+dY;
  18. brush.Color:=clyellow;
  19. moveto(X,Y);
  20. sleep(10);
  21. FillEllipse(X,Y,X+10,Y+10);
  22. end;
  23. end;
  24. end.

Решение задачи: «Как сделать, чтобы объект перемещался только при нажатом "пробеле"? Заранее спасибо»

textual
Листинг программы
  1. uses
  2.   GraphABC;
  3.  
  4. var
  5.   go: boolean := false;
  6.   stop: boolean := false;
  7.  
  8. procedure mykeydown(ch: integer);
  9. begin
  10.   go := char(ch) = ' ';
  11.   stop := UpCase(char(ch)) = 'Q';
  12. end;
  13.  
  14. procedure mykeyup(ch: integer);
  15. begin
  16.   if go and (char(ch) = ' ') then
  17.     go := false;
  18. end;
  19.  
  20. var
  21.   X, Y, dX, dY: integer;
  22.  
  23. begin
  24.   OnKeyDown := mykeydown;
  25.   OnKeyUp := mykeyup;
  26.   X := 10;
  27.   Y := 10;
  28.   dX := 1;
  29.   dY := 1;
  30.   while not stop do
  31.     while go and (X <> 400) do
  32.     begin
  33.       if (Y = 100) or (Y = 1) then dY := -dY;
  34.       if (X = 260) or (X = 1) then dX := -dX;
  35.       begin
  36.         brush.Color := clred;
  37.         FillEllipse(X, Y, X + 10, Y + 10);
  38.         X := X + dX;
  39.         Y := Y + dY;
  40.         brush.Color := clyellow;
  41.         moveto(X, Y);
  42.         sleep(10);
  43.         FillEllipse(X, Y, X + 10, Y + 10);
  44.       end;
  45.     end;
  46. end.

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

  1. Объявлены две переменные типа boolean: go и stop. Переменная go устанавливается в false, а переменная stop - в false.
  2. Определены две процедуры: mykeydown и mykeyup. В процедуре mykeydown устанавливается значение переменной go в true, если нажата клавиша пробел, и в false, если нажата клавиша Q. В процедуре mykeyup, если нажата клавиша пробел и переменная go не равна false, то значение переменной go устанавливается в false.
  3. Объявлены четыре переменные типа integer: X, Y, dX и dY. Значения переменных X и Y устанавливаются равными 10. Значения переменных dX и dY устанавливаются равными 1.
  4. Устанавливаются обработчики событий OnKeyDown и OnKeyUp на соответствующие процедуры mykeydown и mykeyup.
  5. Запускается бесконечный цикл while, который выполняется до тех пор, пока переменная stop не станет равной true.
  6. Внутри цикла while есть еще один цикл while. Он выполняется до тех пор, пока переменная go не станет равной false.
  7. Внутри второго цикла while выполняются следующие действия:
    • Если значение переменной Y равно 100 или 1, то значение переменной dY устанавливается равным -dY.
    • Если значение переменной X равно 260 или 1, то значение переменной dX устанавливается равным -dX.
    • Выполняется рисование желтого эллипса с помощью функций FillEllipse и moveto.
    • Значение переменной X увеличивается на значение переменной dX, а значение переменной Y увеличивается на значение переменной dY.
    • Снова выполняется рисование желтого эллипса.
    • Делается пауза в 10 миллисекунд с помощью функции sleep.
  8. После завершения второго цикла while выполняется выход из первого цикла while.

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


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

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

11   голосов , оценка 4.364 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы