Visual Basic 6.0

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

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

    Karder Гость

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

    Код (Text):
    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
     
Загрузка...
Статус темы:
Закрыта.

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