За счет меню заставить рисунок двигаться в стороны - Turbo Pascal
Формулировка задачи:
Используя Процедуры нужно с помощью меню заставить рисунок двигаться влево, вправо, вверх, вниз.
Как это реализовать? Не понимаю как работают процедуры ( и рисунок готов )
Решение задачи: «За счет меню заставить рисунок двигаться в стороны»
textual
Листинг программы
uses crt,graph; type Point=record{для центра курсора} x,y,x1,y1:integer; end; const r=8; var x,y:integer; procedure Smail(c1,c2,c3:integer); begin setfillstyle(1,c1); fillellipse(x,y,r,r); setcolor(c1); circle(x,y,r); setcolor(c2); setfillstyle(1,c2); fillellipse(x-3,y-3,2,2); fillellipse(x+3,y-3,2,2); setcolor(c3); Arc(x,y+5,0,180,3); end; procedure Left; begin repeat delay(100); Smail(0,0,0); x:=x-5; Smail(14,9,8); until keypressed or (x<r+10); end; procedure Up; begin repeat delay(100); Smail(0,0,0); y:=y-5; Smail(14,9,8); until keypressed or (y<r+40); end; procedure Right; begin repeat delay(100); Smail(0,0,0); x:=x+5; Smail(14,9,8); until keypressed or (x>getmaxX-r-10); end; procedure Down; begin repeat delay(100); Smail(0,0,0); y:=y+5; Smail(14,9,8); until keypressed or (y>getmaxY-r-10); end; procedure menyu; {создание кнопок, курсора, его перемещение и условия выполнения процедур} var x1,y1:integer; i,c:byte; a:Point; {центр курсора} move:boolean; k:char; begin {создание кнопок} y1:=10;{верхний левый угол первой кнопки} for i:=1 to 5 do begin x1:=140+80*(i-1); Setcolor(i+1); Rectangle(x1,y1,x1+80,y1+20); Setfillstyle(1,i+1); Bar(x1,y1,x1+80,y1+20); end; {надписи на кнопках} Setcolor(0); outtextxy(165,15,'LEFT'); outtextxy(245,15,' UP'); outtextxy(325,15,'RIGHT'); outtextxy(405,15,'DOWN'); outtextxy(485,15,'Exit'); {создание и движение курсора} a.x:=70;a.y:=20;{начало} move:=true; repeat if keypressed then begin k:=readkey; if k=#77 then begin a.y1:=a.y; a.x1:=a.x; a.x:=a.x+80; if a.x>=550 then a.x:=150; move:=true; end; if k=#75 then begin a.y1:=a.y; a.x1:=a.x; a.x:=a.x-80; if a.x<=70 then a.x:=470; move:=true; end; if (k=#13)and (a.x=150) then Left; {knoka 1 + Enter} if (k=#13)and (a.x=230) then Up; if (k=#13)and (a.x=310) then Right; if (k=#13)and (a.x=390) then Down; if (k=#13)and (a.x=470) then k:=#27; end; if move then begin if a.x1=150 then c:=2 else if a.x1=230 then c:=3 else if a.x1=310 then c:=4 else if a.x1=390 then c:=5 else if a.x1=470 then c:=6 else c:=0; Setcolor(c); Circle(a.x1,a.y1,5); Setfillstyle(1,c); Fillellipse(a.x1,a.y1,5,5); Setcolor(12); Circle(a.x,a.y,5); Setfillstyle(1,12); Fillellipse(a.x,a.y,5,5); move:=false; end; until k=#27; end; var gd,gm:integer; begin gd:=detect; initgraph(gd,gm,''); x:=getmaxX div 2; y:=getmaxY div 2; Smail(14,9,8); menyu; end.
Объяснение кода листинга программы
Этот код написан на языке Turbo Pascal и выполняет следующие действия:
- Создает графический дисплей и инициализирует его с помощью параметров
gd
иgm
. - Задает начальные координаты для центра курсора (
x
,y
). - Вычисляет максимальные координаты по осям X и Y (
getmaxX
,getmaxY
). - Создает процедуру
Smail
, которая рисует эллипс и окружность с заданными параметрами. - Создает процедуры
Left
,Up
,Right
иDown
, которые перемещают курсор влево, вверх, вправо и вниз соответственно. Каждая из этих процедур вызывает предыдущие процедуры для обновления положения курсора. - Создает переменную
move
, которая отслеживает, был ли выполнен какой-либо ввод с клавиатуры. - В основной части программы вызываются процедуры
Left
,Up
,Right
иDown
в цикле, который продолжается до тех пор, пока не будет выполнено действиеk=#27
, что означает выход из программы. - После выхода из программы вызывается процедура
menyu
, которая создает кнопки на графическом дисплее и перемещает курсор по ним. - Программа завершается после выхода из цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д