За счет меню заставить рисунок двигаться в стороны - 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 и выполняет следующие действия:

  1. Создает графический дисплей и инициализирует его с помощью параметров gd и gm.
  2. Задает начальные координаты для центра курсора (x, y).
  3. Вычисляет максимальные координаты по осям X и Y (getmaxX, getmaxY).
  4. Создает процедуру Smail, которая рисует эллипс и окружность с заданными параметрами.
  5. Создает процедуры Left, Up, Right и Down, которые перемещают курсор влево, вверх, вправо и вниз соответственно. Каждая из этих процедур вызывает предыдущие процедуры для обновления положения курсора.
  6. Создает переменную move, которая отслеживает, был ли выполнен какой-либо ввод с клавиатуры.
  7. В основной части программы вызываются процедуры Left, Up, Right и Down в цикле, который продолжается до тех пор, пока не будет выполнено действие k=#27, что означает выход из программы.
  8. После выхода из программы вызывается процедура menyu, которая создает кнопки на графическом дисплее и перемещает курсор по ним.
  9. Программа завершается после выхода из цикла.

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


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

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

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