Изобразить лодку, которая перемещается слева направо по нижнему краю формы - VB
Формулировка задачи:
Программа - генерация графических объектов .
Компактный набор треугольников одного цвета и квадратов другого цвета произвольно движутся по форме, изменяя размеры только квадратов и общие цвета рисуются с помощью графических методов формы или управляющего элемента PictureBox.
Лодка, которая перемещается слева направо по нижнему краю формы, а при достижении края формы изменяет направление движения, рисуется с помощью массива управляющих элементов Shape или Line.
Перемещение осуществляется по траектории, определенной вариантом и с временной задержкой, определяемой элементом Timer.
С элементом ProgressBar, с помощью которого иллюстрируется полный цикл процесса, проблема. Определяется интервал отображения процесса неверно. В первом случае - при достижении набора краев должен достигаться максимум,а во втором случае - когда лодочка опаздывает, когда ProgressBar видно (с этим проблема появилась после применения его к первому заданию).
Подскажите где ошибка и как исправить, пожалуйста.
Как исправить ошибку?
Решение задачи: «Изобразить лодку, которая перемещается слева направо по нижнему краю формы»
textual
Листинг программы
Option Explicit Dim xx As Integer, yy As Integer Dim cv As Integer Dim iPositon As Integer Dim iDirection As Integer Private Sub Command1_Click() start End Sub Private Sub Command2_Click() Call brake End Sub Private Sub Command3_Click() If MsgBox("Вы уверены ?", vbYesNo + vbQuestion, "Quit") = vbYes Then Unload Form1 End If End Sub Private Sub Form_Load() Dim i As Integer For i = 0 To 3 Line1(i).Visible = False Next i ScaleMode = 1 SSTab1.Tabs = 2 SSTab1.TabsPerRow = 2 SSTab1.TabCaption(0) = "Задание 1" SSTab1.TabCaption(1) = "Задание 2" SSTab1.Tab = 0 InSSTabRazm Form1.Caption = "" Command1.Caption = "Пуск" Command2.Caption = "Стоп" Command3.Caption = "Выход" End Sub Private Sub InSSTabRazm() Form1.Top = 0 Form1.Left = 0 Form1.Height = Screen.Height Form1.Width = Screen.Width SSTab1.Top = Form1.Top + 200 SSTab1.Left = Form1.Left + 3000 SSTab1.Height = Form1.Height - 2000 SSTab1.Width = Form1.Width - 4000 Command1.Top = Form1.Top + 500 Command1.Left = Form1.Left + 100 Command1.Height = 500 Command1.Width = 1500 Command2.Height = 500 Command2.Width = 1500 Command3.Height = 500 Command3.Width = 1500 Command2.Top = Command1.Top + Command1.Height + 300 Command2.Left = 100 Command3.Top = Command2.Top + Command2.Height + 300 Command3.Left = Form1.Left + 100 Picture1.BorderStyle = 0 Picture1.Left = SSTab1.Left - 2960 Picture1.Top = SSTab1.Top + 600 Picture1.Height = Me.ScaleHeight - 3000 Picture1.Width = SSTab1.Width - 90 iPositon = 0 iDirection = 1 ProgressBar1.Top = SSTab1.Top + SSTab1.Height + 200 ProgressBar1.Left = SSTab1.Left ProgressBar1.Width = SSTab1.Width ProgressBar1.Visible = False ProgressBar1.Min = 0 ProgressBar1.Max = ProgressBar1.Width End Sub Private Sub start() Dim i As Integer ProgressBar1.Visible = True If SSTab1.Tab = 0 Then Timer1.Interval = 50 Timer1.Enabled = True Picture1.Visible = True Else For i = 0 To 3 Line1(i).Visible = True Next i Timer2.Interval = 20 Timer2.Enabled = True End If End Sub Private Sub SSTab1_Click(PreviousTab As Integer) If SSTab1.Tab <> PreviousTab Then Call brake1 End If End Sub Private Sub Timer1_Timer() MkPcBx End Sub Private Sub Timer2_Timer() MkLin End Sub Private Sub brake() If SSTab1.Tab = 0 Then Timer1.Enabled = False Else Timer2.Enabled = False End If End Sub Private Sub brake1() Dim i As Integer ProgressBar1.Visible = False If SSTab1.Tab = 0 Then xx = 0 yy = 0 ProgressBar1.Value = 0 Timer1.Enabled = False Timer2.Enabled = False Picture1.Cls For i = 0 To 3 Line1(i).Visible = False Next i Else ProgressBar1.Value = 0 Timer1.Enabled = False Timer2.Enabled = False Form1.Cls For i = 0 To 3 Line1(i).Visible = False Next i End If End Sub Private Sub MkPcBx() Dim dX As Integer, dY As Integer dX = Int(Rnd * 500) dY = Int(Rnd * 100) If iDirection = 1 Then If xx + 1800 + dX >= Picture1.ScaleWidth Then iDirection = -1 ProgressBar1.Value = xx + 1600 Else If xx + 300 - dX <= 0 Then iDirection = 1 ProgressBar1.Value = xx + 300 End If xx = xx + dX * iDirection 'ProgressBar1.Value = xx + 1600 If iDirection = 1 Then If yy + 2100 >= Picture1.Height Then iDirection = -1 Else If yy - 300 <= 0 Then iDirection = 1 End If yy = yy + dY * iDirection Call PcBx(xx, yy) Exit Sub End Sub Private Sub PcBx(x As Integer, y As Integer) Dim c As Integer Picture1.Cls Picture1.DrawWidth = 2 c = Rnd * 10 Picture1.Line (x + 800, y + 600)-(x + 950, y + 300), QBColor(c + 2) Picture1.Line (x + 950, y + 300)-(x + 1100, y + 600), QBColor(c + 2) Picture1.Line (x + 1100, y + 600)-(x + 800, y + 600), QBColor(c + 2) Picture1.Line (x + 1300, y + 2000)-(x + 1450, y + 1700), QBColor(c + 2) Picture1.Line (x + 1450, y + 1700)-(x + 1600, y + 2000), QBColor(c + 2) Picture1.Line (x + 1600, y + 2000)-(x + 1300, y + 2000), QBColor(c + 2) Picture1.Line (x + 300, y + 2000)-(x + 450, y + 1700), QBColor(c + 2) Picture1.Line (x + 450, y + 1700)-(x + 600, y + 2000), QBColor(c + 2) Picture1.Line (x + 600, y + 2000)-(x + 300, y + 2000), QBColor(c + 2) Picture1.Line (x + 800 + c * 10, y + 800)-(x + 1100, y + 1100 + c * 30), QBColor(c + 4), B Picture1.Line (x + 800 + c * 10, y + 1300)-(x + 1100, y + 1600 + c * 30), QBColor(c + 4), B End Sub Private Sub MkLin() Dim YS As Integer Dim i As Integer iPositon = iPositon + 50 * iDirection If iDirection = 1 Then If iPositon + 1000 >= ProgressBar1.Width Then iDirection = -1 * iDirection Else If iPositon - 1000 <= 0 Then iDirection = -1 * iDirection End If ProgressBar1.Value = iPositon + 1000 * iDirection YS = SSTab1.Height - 1000 Line1(0).X1 = iPositon Line1(0).X2 = iPositon + 1000 * iDirection Line1(0).Y1 = YS Line1(0).Y2 = YS Line1(1).X1 = iPositon Line1(1).X2 = iPositon + 1000 * iDirection - 200 * iDirection Line1(1).Y1 = YS + 400 Line1(1).Y2 = YS + 400 Line1(2).X1 = iPositon Line1(2).X2 = iPositon Line1(2).Y1 = YS Line1(2).Y2 = YS + 400 Line1(3).X1 = iPositon + 1000 * iDirection Line1(3).X2 = iPositon + 1000 * iDirection - 200 * iDirection Line1(3).Y1 = YS Line1(3).Y2 = YS + 400 End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д