Visual Basic 6.0

  • Автор темы Karder
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

Karder

#1
Пожалуйста помогите!
Есть программа на 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
 
Статус
Закрыто для дальнейших ответов.