ОБСУЖДЕНИЕ

Visual Basic 6.0

0 ответов 5 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
Пожалуйста помогите!
Есть программа на Visul Basic.
На форме добавлен Таймер (Name: Timer1), круг (Name: Round), 2 кнопки (Name: Command1, Command2), 2 текстовых поля (Name: Text1, Text2)
и Shape1 (Shape: 4-Rounded Restangle).
Круг движется по синусоиде и когда ударяется о края формы, то идёт в обратном направлении. Я задаю в текстовых полях координаты Shape1 и мне надо, чтобы круг, наталкиваясь на
Shape1, шел в обратном направлении, но у же по косинусоиде, и чтобы ударялся не только с левой стороны как у меня, но и справа. Вот исходный код:

Код:
Option Explicit				 ' Объявление переменных
Dim diam As Integer		' Диаметр круга
Dim rad As Integer		 ' Радиус круга
Dim Y0 As Integer		  ' Постоянная величина Y, которая прибавляется, чтобы круг двигался по центру на форме
Dim dx As Integer		  ' Вычисление точки относительно оси х
Dim dy As Integer		  ' Вычисление точки относительно оси y
Dim X As Double			 ' Передвижение круга по оси x
Dim Y As Double			 ' Передвижение круга по оси y
Dim XM As Boolean		 ' Переход за пределы поля по оси X
Dim YM As Boolean		 ' Переход за пределы поля по оси Y
Dim delta As Double
Dim dv As Boolean		 ' Движение вперед или назад

Private Sub Command1_Click()
Timer1.Enabled = Not Timer1.Enabled							' Запуск/остановка движения круга
Form1.PSet (Me.Round.Left, Me.Round.Top), vbGreen
End Sub

Private Sub Command2_Click()
Me.Shape1.Move (Me.ScaleWidth - Me.Shape1.Width) * Me.Text1.Text / 100, (Me.ScaleHeight - Me.Shape1.Height) * Me.Text2.Text / 100 '
End Sub

Private Sub Form_Load()
dv = True												'Движение вперед
delta = 0.09											 'Интервал изменения Х
diam = Round.Height								'Диаметр круга
rad = diam / 2										'Радиус
Round.Top = Form1.Height / 2 - diam		'Размещение круга по центру формы
Round.Left = 0										'Начало движения от левого края
Y0 = Round.Top									  'Постоянная величина Y, которая прибавляется, чтобы круг двигался по центру на форме
Y = 0													  'Начальная координата Y на графике
X = 0													  'Начальная координата X на графике
dx = 500												 'Коодината X на форме =dx*x
dy = 1000												'Коодината Y на форме =dy*y
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button Then								 ' ручная установка препятствия
Shape1.Move X, Y
End If
End Sub

Private Sub Timer1_Timer()
If dv Then										 'Если движение вперед
X = X + delta								 'Прибавляем к Х интервал
Else													'Если назад
X = X - delta								 'отнимаем от Х
End If
Y = Sin(X)												 'Функция, по которой движется круг до удара с препятствием
Round.Top = Y0 - Int(Y * dy)					  'Изменение координат круга по верхней границе круга
Round.Left = Int((X) * dx)							'Изменение координат круга по левой границе круга
If Round.Left > Shape1.Left - diam And dv Then	 'Если происходит столкновение круга, при движении вправо, с препятствием тогда
Round.Left = Shape1.Left - diam
dv = False									 'круг движется в обратном направлении
End If
'If Round.Left < Shape1.Left + Shape1.Width And Not dv Then
'	Round.Left = Shape1.Left + Shape1.Width
'	dv = True
' End If
If Round.Left > Form1.Width - diam Then			'Если круг ушёл за правую границу формы тогда
Round.Left = Form1.Width - diam				  'после столкновения
dv = False									 'движение будет в обратном направлении
End If
If Round.Left < 0 Then							 'Если круг ушёл за левую границу формы тогда
Round.Left = 0								 'после столкновения
dv = True									 'движение направо
End If
Form1.Line -(Me.Round.Left, Me.Round.Top), vbRed 'След, который оставляет круг при движении на форме

End Sub
 
Статус
Закрыто для дальнейших ответов.