0 / 0 / 0
Регистрация: 08.06.2021
Сообщений: 16
1

Turbo Pascal, настроить траекторию шарика

12.09.2021, 20:09. Показов 1375. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста сделать правильную траекторию для шарика.
А то я вообще нечего не могу сделать с ней
Turbo Pascal, настроить траекторию шарика

Помогите пожалуйста дописать задачу
Код
program lb_10;
uses crt, dos, graph;
var d,m:integer;
    x, y: integer;
    vx, vy, _mX, _mY: integer;
    runed, mouse_s, _k:byte;
    k:char;
    Reg:registers;


procedure initMouse;
Begin
     Reg.AX := 0;
     Intr($33, Reg);
End;

procedure MouseOn;
Begin
     Reg.AX := 1;
     Intr($33, Reg);
     mouse_s := 1;
End;

procedure MouseOff;
Begin
     Reg.AX := 2;
     mouse_s := 0;
     Intr($33, Reg);
End;


Begin
     d:=Detect;
     x:=200;
     runed:=0;
     y:=50;
     vx:= 0;
     vy:= 1;
     InitGraph(d, m, '');
     initMouse;
     MouseOn;

     Line(300, 50, 500, 250);
     Line(500, 250, 300, 420);
     Line(130, 250, 300, 420);

     SetFillStyle(1, 15);
     Bar(30, 30, 100, 55);
     OutTextXY(140,450,'Нажмите "Пуск" или клавишу Enter для запуска');
     SetColor(0);
     Rectangle(32, 32, 98, 53);
     OutTextXY(48,40,'Пуск');
     SetColor(15);
     SetLineStyle(0, 0, 2);
     Line(50, 100, 50, 250);
     Circle(x, y, 20);

     while runed = 0 do
     Begin
          Reg.AX := 3;
          Intr($33, Reg);
          _mX:=Reg.CX;
          _mY:=Reg.DX;
          _k := Reg.BX;

          if (_k=1) and (_mX >= 20) and (_mX <= 101) and (_mY >= 29) and (_mY <= 51) then runed :=1;

          if keypressed then
          Begin
               k:=readkey;
               if k = #13 then runed:=1;
          End;
     End;
     MouseOff;
     SetFillStyle(1, 0);
     Bar(120, 450, 600, 460);
     while runed = 1 do
     Begin

          if (x >= 130) and (x <= 300) and (y >= 380) and (y <= 420) then vy:= -vy;
          if (x >= 500) and (x <= 250) and (y >= 300) and (y <= 420) then vx:= -vx;
          if (x >= 300) and (x <= 50) and (y >= 500) and (y <= 250) then vy:= -vy;

          if (x >= 50) and (x <= 100) and (y >= 50) and (y <= 250) then runed:= 0;

          setcolor(0);
          Circle(x, y, 20);
          x:=x+vx;
          y:=y+vy;
          setcolor(15);
          Circle(x, y, 20);
          delay(25);
     End;
     OutTextXY(180,450,'Нажмите клавишу Enter для выхода...');
     readkey;
     CloseGraph;
End.
За решение с заданием буду очень благодарен.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2021, 20:09
Ответы с готовыми решениями:

Различия между Turbo Pascal и Free Pascal (Turbo mode)
Собственно вот и вопрос. Чем отличается FPC Turbo Pascal mode от самого компилятора Turbo Pascal?

Turbo Pascal, Pascal ABC, Free Pascal, PascalABC.NET - в чем разница?
Всем привет, решил изучать Паскаль, но на форуме увидел 4 его версии - Turbo Pascal, Pascal ABC,...

Задать траекторию полета шарика
Как отредактировать строку form1.Canvas.Ellipse(x1,y1,x1+r,y1+r); Чтобы шарик двигался согласно...

Построить траекторию шарика. Изобразить шарик и шнур в движении
На тонком резиновом шнуре длиной Lo = I м подвешен шарик массой m=50 г. В равновесии шнур...

Рассчитать траекторию падения шарика под углом к горизонту
составить падение шарика под углом

2
Модератор
980 / 526 / 286
Регистрация: 10.11.2019
Сообщений: 1,116
15.09.2021, 17:36 2
Лучший ответ Сообщение было отмечено Decsu как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
uses graph, WinDos, Crt;
var cpu:Tregisters;
 
var mousex,mousey,select:integer;
 
var menu:record n,x0,y0,w,h,h2:integer;end;
 
procedure mouseinit;
begin
cpu.ax:=0;intr($33,cpu);
end;
 
procedure mouseshow;
begin
cpu.ax:=1;intr($33,cpu);
end;
 
procedure mousehide;
begin
cpu.ax:=2;intr($33,cpu);
end;
 
function mousepoll:integer;
begin
cpu.ax:=3;intr($33,cpu);
mousex:=cpu.cx;
mousey:=cpu.dx;
mousepoll:=cpu.bx;
end;
 
procedure menushow;
var i,x,y,c:integer;
begin
x:=menu.x0;y:=menu.y0;
for i:=1 to menu.n do begin
if i=select then c:=1 else c:=0;
SetFillStyle(1,c);
bar(x,y,x+menu.w,y+menu.h);
rectangle(x,y,x+menu.w,y+menu.h);
SetTextJustify(CenterText,CenterText);
if i=1 then OutTextXY(x+menu.w div 2,y+menu.h div 2,'Start')
else        OutTextXY(x+menu.w div 2,y+menu.h div 2,'Stop');
y:=y+menu.h2;
end;
end;
 
procedure menupoll;
var i,x,y:integer;
begin
if mousepoll<>1 then exit;
mousehide;
x:=menu.x0;y:=menu.y0;
for i:=1 to menu.n do begin
if (mousex>x) and (mousey>y)
   and (mousex<x+menu.w) and (mousey<y+menu.h) then select:=i;
y:=y+menu.h2;
end;
menushow;
mouseshow;
end;
 
 
procedure menunew;
begin
select:=0;
with menu do begin
n:=2;
x0:=550;
y0:=400;
w:=80;
h:=20;
h2:=40;
end;
menushow;
end;
 
{Столкновение движ объекта с линией,
где x,y - координаты объекта,dx,dy-знаки
скорости}
{Константа 15 в цикле зависит то радиуса
круга 10 и его скорости 5}
function hit(x,y,dx,dy:integer):integer;
var i,c:integer;
begin
hit:=0;
for i:=0 to 15 do begin
  c:=getpixel(x,y);if c<>0 then hit:=c;
  x:=x+dx;y:=y+dy;
end;
end;
 
var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
x,y,r,dx,dy,x0,y0,x1,y1,moving: Integer;
begin
grDriver := vga;
grMode := vgahi;
InitGraph(grDriver, grMode,'');
ErrCode := GraphResult;
if ErrCode <> grOk then exit;
menunew;
moving:=0;
r:=10;x:=220;y:=50;
moveto(320,50);
linerel(240-50,240-50);
linerel(-(240-50),240-50);
linerel(-(240-50),-(240-50));
dx:=0;dy:=1;
 
circle(x,y,r);
mouseinit;
mouseshow;
while (select<>2) and (x>=0) do begin
  if select=1 then moving:=1;
  if moving<>0 then begin
    {mousehide;}
    setcolor(0);circle(x,y,r);
    if hit(x,y,0,1)<>0 then begin dx:=1;dy:=0 end;
    if hit(x,y,1,0)<>0 then begin dx:=0;dy:=-1 end;
    if hit(x,y,0,-1)<>0 then begin dx:=-1;dy:=0 end;
    x:=x+5*dx;y:=y+5*dy;
    setcolor(15);circle(x,y,r);
    {mouseshow;}
    Delay(50);
  end;
  menupoll;
end;
SetTextJustify(CenterText,CenterText);
OutTextXY(320,240,'End of Animation. Click Left mouse button.');
while mousepoll<>0 do Delay(50);
while mousepoll=0 do Delay(50);
while mousepoll<>0 do Delay(50);
mousehide;
CloseGraph;
end.
1
0 / 0 / 0
Регистрация: 08.06.2021
Сообщений: 16
15.09.2021, 22:44  [ТС] 3
Огромнейшие спасибо
0
15.09.2021, 22:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2021, 22:44
Помогаю со студенческими работами здесь

Настроить случайную траекторию пути с учетом препятствий
Нужно сделать поворот приведения, да и ограничить самого пакмана. Кто может подсказать, как это...

[Turbo C/Turbo Pascal] Двумерный массив
Вводится двумерный массив. Найти числа, встречающиеся во всех строках. (Листинг + блок-схемы(по...

Не знаю как соединить программу с меню! Turbo Pascal 7.0(pascal ABC)
Добавлено через 18 часов 2 минуты Посидел, подумал...сделал...8-)

Различия трансляторов Pascal ABC.Net и Turbo/Borland Pascal
Пожалуйста, объясните различия между компиляторами Pascal ABC.Net и Turbo/Borland Pascal

Нужно перевести код из Turbo Pascal в Pascal ABC.NET
Доброго времени суток. На форуме находил похожие темы, но к сожалению так и не смог разобраться....

Нужно перевести программу с Turbo Pascal в Pascal ABC.NET
Вот есть программный код , но он для турбо паскаля, помогите перевести его в АБС.NET Program...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru