Увеличение круга при нажатии клавиши - PascalABC.NET

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

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

Помогите пожалуйста с задачей. Знаю только как сделать крутящийся кружочек Круг движется по окружности. При попадании круга в I четверть он заполняется клеткой, во II четверть - ///, в III - \\\, в IV - точками. При нажатии клавиши стрелка вверх увеличивается его радиус, стрелка вниз - соответственно уменьшается. Выход по Esc.

Решение задачи: «Увеличение круга при нажатии клавиши»

textual
Листинг программы
uses graphABC;
var f:boolean;//переменная для выхода из программы 
    r:integer;//радиус круга
procedure KeyDown(Key:integer);
begin
case Key of
VK_Up:r:=r+5;
VK_Down:r:=r-5;
VK_Escape:f:=false
end;
end;
var xc,yc,x,y,r1:integer;
    u:real;
begin
xc:=Window.Width div 2;
yc:=Window.Height div 2;
r:=20;
r1:=110;//радиус вращения круга
f:=true;
Pen.Color:=clred;
Brush.Color:=clRed;
lockdrawing;
u:=0;
repeat
clearwindow;
Brush.Style:=bsClear;
TextOut(100,10,'Стрелка вверх увеличить радиус, стрелка вниз-уменьшить, Esc-выход');
Brush.Style:=bsHatch;
x:=xc+round(r1*cos(u));
y:=yc-round(r1*sin(u));
if(x>xc)and(y<yc)then Brush.Hatch:=bhCross
else if(x<=xc)and(y<yc)then Brush.Hatch:=bhBackwardDiagonal
else if(x<=xc)and(y>=yc)then Brush.Hatch:=bhForwardDiagonal
else Brush.Hatch:=bhPercent40;
Circle(x,y,r);
sleep(50);
u:=u+0.05;
redraw;
OnKeyDown:=KeyDown;
until f=false;
CloseWindow;
end.

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

  1. Объявлены переменные:
    • f: булевая переменная для выхода из программы;
    • r: целочисленная переменная радиуса круга;
    • xc, yc: целочисленные переменные координат центра круга;
    • x, y: целочисленные переменные для хранения текущих координат курсора;
    • r1: целочисленная переменная радиуса вращения круга;
    • u: вещественная переменная для хранения угла поворота;
    • f: булевая переменная для выхода из программы;
    • Pen.Color, Brush.Color: задают цвет пера и кисти соответственно;
    • Brush.Style: определяет стиль кисти (будет использоваться для рисования крестика или точки в зависимости от направления движения мыши);
    • TextOut: функция вывода текста на экран;
    • Circle: функция рисования круга;
    • Sleep: функция задержки выполнения программы;
    • OnKeyDown: процедура обработчик нажатия клавиш.
  2. В основной части программы:
    • Инициализируются начальные значения переменных;
    • Задаются начальные координаты центра круга;
    • Устанавливается начальный угол поворота;
    • Запускается основной цикл программы, который выполняется до тех пор, пока переменная f не станет ложной;
    • В цикле происходит обновление и вывод на экран текущего состояния;
    • При нажатии клавиш выполняется соответствующая обработка (увеличение или уменьшение радиуса);
    • Закрывается окно программы.
  3. В процедуре KeyDown происходит обработка нажатия клавиш:
    • Используется оператор switch для определения, какая клавиша была нажата;
    • Если нажата клавиша стрелка вверх, увеличивается радиус круга;
    • Если нажата клавиша стрелка вниз, уменьшается радиус круга;
    • Если нажата клавиша Esc, устанавливается значение переменной f, что приведет к выходу из программы.

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

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