Visual Basic 6.0

Тема в разделе "Другие", создана пользователем Karder, 19 май 2006.

Статус темы:
Закрыта.
  1. Karder

    Karder Гость

    Репутация:
    0
    Пожалуйста помогите!
    Есть программа на 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
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей