Мяч в vba

Узнай цену своей работы

Формулировка задачи:

Изобразить движение футбольного мяча после удара (задается начальное положение мяча и вектор скорости). В процессе полёта мяч ударяется о пол, потолок и стены,стены поле есть,но не пойму как сделать(

Решение задачи: «Мяч в vba»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Type Vector
  4.     Dx As Single
  5.     Dy As Single
  6. End Type
  7.  
  8. Dim Vec As Vector, Pos As Vector
  9. Dim Fri As Single, Loss As Single, Rad As Single
  10. Dim Bf As Boolean
  11.  
  12. Private Sub Form_Load()
  13.     Rad = 20: Loss = 1.2: Fri = 1.01
  14.     Pos.Dx = Me.ScaleWidth / 2
  15.     Pos.Dy = Me.ScaleHeight / 2
  16. End Sub
  17. Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  18.     Dim Dx As Single, Dy As Single, R As Single
  19.     Dx = X - Pos.Dx: Dy = Y - Pos.Dy
  20.     R = Sqr(Dx * Dx + Dy * Dy)
  21.     If R < Rad Then Bf = True
  22. End Sub
  23. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  24.     Dim Dx As Single, Dy As Single
  25.     If Not Bf Then Exit Sub
  26.     Dx = X - Pos.Dx: Dy = Y - Pos.Dy
  27.     Vec.Dx = -Dx: Vec.Dy = -Dy
  28. End Sub
  29. Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  30.     Bf = False
  31. End Sub
  32. Private Sub LossVec()
  33.     If Vec.Dx Then Vec.Dx = Vec.Dx / Loss
  34.     If Vec.Dy Then Vec.Dy = Vec.Dy / Loss
  35. End Sub
  36. Private Sub tmrTimer_Timer()
  37.     Me.Cls
  38.     If Bf Then
  39.         Me.Circle (Pos.Dx, Pos.Dy), Rad, vbRed
  40.         Me.Line (Pos.Dx, Pos.Dy)-Step(-Vec.Dx, -Vec.Dy), vbGreen
  41.     Else
  42.         Vec.Dx = Vec.Dx / Fri: Vec.Dy = Vec.Dy / Fri
  43.         Pos.Dx = Pos.Dx + Vec.Dx
  44.         Pos.Dy = Pos.Dy + Vec.Dy
  45.         If Pos.Dx > Me.ScaleWidth - Rad Then Pos.Dx = Me.ScaleWidth - Rad: Vec.Dx = -Vec.Dx: LossVec
  46.         If Pos.Dx < Rad Then Pos.Dx = Rad: Vec.Dx = -Vec.Dx: LossVec
  47.         If Pos.Dy > Me.ScaleHeight - Rad Then Pos.Dy = Me.ScaleHeight - Rad: Vec.Dy = -Vec.Dy:  LossVec
  48.         If Pos.Dy < Rad Then Pos.Dy = Rad: Vec.Dy = -Vec.Dy:  LossVec
  49.         Me.Circle (Pos.Dx, Pos.Dy), Rad
  50.     End If
  51.     Me.Refresh
  52. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут