За счет меню заставить рисунок двигаться в стороны - Turbo Pascal

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

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

Используя Процедуры нужно с помощью меню заставить рисунок двигаться влево, вправо, вверх, вниз. Как это реализовать? Не понимаю как работают процедуры ( и рисунок готов )
Листинг программы
  1. program zachetka;
  2. uses crt, graph;
  3. procedure move(x,y,a,c);
  4. var gd,gm,k:integer;
  5. begin
  6. clrscr;
  7. writeln (' ------------------------------------------------------------------------------------');
  8. writeln (' і 1 - move to the left і 2 - moveto the right і 3 - move up і 4 - move down і ');
  9. writeln (' ------------------------------------------------------------------------------------і ');
  10. writeln (' і 0 - exit і' );
  11. writeln (' -------------------------------------------------------------------------------------');
  12. writeln ('Please choose the option...');
  13. readln(k);
  14.  
  15. {graphic}
  16. Detectgraph (gd,gm);
  17. initgraph(gd,gm,'C:tp7');
  18. {table}
  19. bar (120,330,360,360);
  20. bar (188,360,330,480);
  21. {PC}
  22. Line (180,240,180,330);
  23. Line (180,270,210,330);
  24. Line (172,210,202,300);
  25. Line (180,210,210,300);
  26. Line (210,300,202,300);
  27. Line (180,210,17,1210);
  28. Line (270,322,270,330);
  29. Line (270,322,330,330);
  30. {Chair}
  31. bar (420,405,510,420);
  32. bar (456,420,480,480);
  33. {developer}
  34. Line (510,405,540,300);
  35. Line (334,480,390,390);
  36. Line (390,390,510,390);
  37. Line (360,480,420,405);
  38. Line (510,390,450,240);
  39. Line (450,270,330,300);
  40. Line (330,300,310,310);
  41. Circle (435,195,40);
  42. ReadLN
  43. end.

Решение задачи: «За счет меню заставить рисунок двигаться в стороны»

textual
Листинг программы
  1. uses crt,graph;
  2. type Point=record{для центра курсора}
  3.            x,y,x1,y1:integer;
  4.            end;
  5. const r=8;
  6. var x,y:integer;
  7. procedure Smail(c1,c2,c3:integer);
  8. begin
  9. setfillstyle(1,c1);
  10. fillellipse(x,y,r,r);
  11. setcolor(c1);
  12. circle(x,y,r);
  13. setcolor(c2);
  14. setfillstyle(1,c2);
  15. fillellipse(x-3,y-3,2,2);
  16. fillellipse(x+3,y-3,2,2);
  17. setcolor(c3);
  18. Arc(x,y+5,0,180,3);
  19. end;
  20.  
  21. procedure Left;
  22. begin
  23. repeat
  24. delay(100);
  25. Smail(0,0,0);
  26. x:=x-5;
  27. Smail(14,9,8);
  28. until keypressed or (x<r+10);
  29. end;
  30.  
  31. procedure Up;
  32. begin
  33. repeat
  34. delay(100);
  35. Smail(0,0,0);
  36. y:=y-5;
  37. Smail(14,9,8);
  38. until keypressed or (y<r+40);
  39. end;
  40.  
  41. procedure Right;
  42. begin
  43. repeat
  44. delay(100);
  45. Smail(0,0,0);
  46. x:=x+5;
  47. Smail(14,9,8);
  48. until keypressed or (x>getmaxX-r-10);
  49. end;
  50.  
  51. procedure Down;
  52. begin
  53. repeat
  54. delay(100);
  55. Smail(0,0,0);
  56. y:=y+5;
  57. Smail(14,9,8);
  58. until keypressed or (y>getmaxY-r-10);
  59. end;
  60.  
  61. procedure menyu;
  62. {создание кнопок, курсора, его перемещение и условия выполнения процедур}
  63. var x1,y1:integer;
  64.     i,c:byte;
  65.     a:Point; {центр курсора}
  66.     move:boolean;
  67.     k:char;
  68. begin
  69. {создание кнопок}
  70. y1:=10;{верхний левый угол первой кнопки}
  71. for i:=1 to 5 do
  72.  begin
  73.   x1:=140+80*(i-1);
  74.   Setcolor(i+1);
  75.   Rectangle(x1,y1,x1+80,y1+20);
  76.   Setfillstyle(1,i+1);
  77.   Bar(x1,y1,x1+80,y1+20);
  78.  end;
  79. {надписи на кнопках}
  80. Setcolor(0);
  81. outtextxy(165,15,'LEFT');
  82. outtextxy(245,15,' UP');
  83. outtextxy(325,15,'RIGHT');
  84. outtextxy(405,15,'DOWN');
  85. outtextxy(485,15,'Exit');
  86. {создание и движение курсора}
  87. a.x:=70;a.y:=20;{начало}
  88. move:=true;
  89. repeat
  90. if keypressed then
  91.  begin
  92.   k:=readkey;
  93.   if k=#77 then
  94.    begin
  95.     a.y1:=a.y;
  96.     a.x1:=a.x;
  97.     a.x:=a.x+80;
  98.     if a.x>=550 then a.x:=150;
  99.     move:=true;
  100.    end;
  101.   if k=#75 then
  102.     begin
  103.      a.y1:=a.y;
  104.      a.x1:=a.x;
  105.      a.x:=a.x-80;
  106.      if a.x<=70 then a.x:=470;
  107.      move:=true;
  108.     end;
  109.   if (k=#13)and (a.x=150) then Left; {knoka 1 + Enter}
  110.   if (k=#13)and (a.x=230) then Up;
  111.   if (k=#13)and (a.x=310) then Right;
  112.   if (k=#13)and (a.x=390) then Down;
  113.   if (k=#13)and (a.x=470) then k:=#27;
  114.  end;
  115. if move then
  116.  begin
  117.   if a.x1=150 then c:=2
  118.   else if a.x1=230 then c:=3
  119.   else if a.x1=310 then c:=4
  120.   else if a.x1=390 then c:=5
  121.   else if a.x1=470 then c:=6
  122.   else c:=0;
  123.   Setcolor(c);
  124.   Circle(a.x1,a.y1,5);
  125.   Setfillstyle(1,c);
  126.   Fillellipse(a.x1,a.y1,5,5);
  127.   Setcolor(12);
  128.   Circle(a.x,a.y,5);
  129.   Setfillstyle(1,12);
  130.   Fillellipse(a.x,a.y,5,5);
  131.   move:=false;
  132.  end;
  133. until k=#27;
  134. end;
  135.  
  136. var gd,gm:integer;
  137. begin
  138. gd:=detect;
  139. initgraph(gd,gm,'');
  140. x:=getmaxX div 2;
  141. y:=getmaxY div 2;
  142. Smail(14,9,8);
  143. menyu;
  144. 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

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

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

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