Найти ошибку в программе перемещения круга - PascalABC.NET

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

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

В центре графического окна рисуется красный круг. Используя клавиши управления курсором (вправо, влево, вверх, вниз), можно перемещать этот круг по графическому окну. При этом круг не должен выходить за пределы окна.C помощью клавиши ‘+’ (VK_Add) можно увеличивать размер круга, а с помощью клавиши ‘-’ (VK_Subtract) уменьшать его. При этом круг не должен становиться больше высоты графического окна (выходить за его границы) и меньше минимального размера. Минимальный размер круга и величина, на которую он изменяет свой размер, задаются в программе константами. Вот то,что у меня получилось:
С движением вроде бы всё норм,но размеры почему-то не работают(хотя в отдельной программе всё функционирует).

Решение задачи: «Найти ошибку в программе перемещения круга»

textual
Листинг программы
program Romb;
 
uses
  GraphABC;
 
const
  minR = 5;  
  Delta = 5;
 
var
  R, WW, WH, X, Y: Integer;
 
procedure KeyDown(Key: Integer);
var
  RNew: integer;
begin
  SetPenColor(clWhite);
  SetBrushColor(clWhite);
  Circle(X, Y, R);
  RNew := R;
  case Key of
    VK_Up:
      if Y >= R + Delta Then
        Y := Y - Delta;
    VK_Right:
      if X <= WW - (R + Delta) Then
        X := X + Delta;
    VK_Down:
      if Y <= WH - (R + Delta) Then
        Y := Y + Delta;
    VK_Left:
      if X >= R + Delta Then
        X := X - Delta;
    VK_Add:
      //Проверим все 4 стороны круга
      if (X + R + Delta < WindowWidth) AND (X - R - Delta > 0) AND (Y + R + Delta < WindowHeight) AND (Y - R - Delta > 0) Then
        RNew := R + Delta;
    VK_Subtract:
      if (R - Delta >= minR) Then 
        RNew := R - Delta;
  End;
  if R <> RNew then
    R := RNew;
  SetPenColor(clRed);
  SetBrushColor(clRed);
  Circle(X, Y, R);
  Redraw
end;
 
begin
  LockDrawing;
  CenterWindow;
  WW := WindowWidth;
  WH := WindowHeight;
  X := WW div 2;
  Y := WH div 2;
  SetSmoothing(False);
  SetPenColor(clRed);
  SetBrushColor(clRed);
  R := minR;
  Circle(X, Y, R);
  Redraw;
  //Событию присваивается ТОЛЬКО ОДНА процедура
  OnKeyDown := KeyDown;
end.

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

Список элементов кода:

  1. Объявление переменных и констант
  2. Определение процедуры KeyDown, которая обрабатывает нажатия клавиш
  3. Проверка нажатия клавиш и изменение координат круга при необходимости
  4. Проверка всех 4 сторон круга при нажатии клавиши VK_Add
  5. Проверка нажатия клавиши VK_Subtract и уменьшение радиуса круга при необходимости
  6. Сравнение текущего радиуса круга с новым значением и обновление радиуса при необходимости
  7. Очистка и обновление графического окна после изменения круга
  8. Установка начальных значений переменных перед основным циклом программы
  9. Запуск основного цикла программы
  10. Завершение программы

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


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

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

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