Программирование
Веб программирование

Программная модель лифта

 
 

Цель данного урока

  1. Показать графические возможности VB.Net
  2. Возможно, у некоторых читающих возникнет интерес к созданию программы моделирующей работу лифта.  Эта программа должна отображать этажи здания и кнопки вызова лифта. Лифт должен работать как это и происходит по вызовам от кнопок, или находится в останове, если вызовов нет.
  3. Если такие программы будут предложены, то можно будет их рассмотреть, сравнить, выбрать интересные решения. Все это будет способствовать обучению программированию.  Разумеется, я сам  в следующем уроке предложу свой вариант.

Итак, начнем.

  1. Создадим новый проект.
  2. Вставим в проект Timer1 и установим его свойства: Enabled=False, Interval=100.
  3. Поместим на форму объект PictureBox1
  4. Поместим на форму объект кнопку Button1

Далее вводим код.  Если он чем-то не устраивает, можно предложить свой. Это заготовка для будущей программы, моделирующей работу лифта.

 

Public Class Form1 Dim i_door, i_cl_op As Integer
Dim l_lift, h_lift, l_liftd2, i_z As Integer

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim h As New Bitmap(80, 100)
Dim g As Graphics = Graphics.FromImage(h)
Dim PenColor1 As New System.Drawing.Pen(System.Drawing.Color.Red, 2)
'******************** 'Переменные программы '********************
'i_door - переменная позиции дверей лифта
'i_cl_op - переменная состояния открытия/закрытия дверей лифта
'i_cl_op=0 -двери открываются
'i_cl_op=1 -двери закрываются
'l_lift - длина картинки лифта в пикселях
'h_lift - высота картинки лифта в пикселях
'l_liftd2=l_lift/2
'i_z переменная для задержки дверей после открытия
If i_cl_op = 1 And i_z < 20 Then
'задержка после открытия
i_z = i_z + 1
End If
If i_cl_op = 0 Or (i_cl_op = 1 And i_z = 20) Then
i_door = i_door + 1
End If
'Открытие дверей лифта (прорисовка)
If l_liftd2 + i_door < l_lift And l_liftd2 - i_door > 0 And i_cl_op = 0 Then
g.Clear(Color.White)
g.DrawLine(PenColor1, l_liftd2 + i_door, 0, l_liftd2 + i_door, h_lift)
g.DrawLine(PenColor1, l_liftd2 - i_door, 0, l_liftd2 - i_door, h_lift)
g.DrawRectangle(PenColor1, l_liftd2 + i_door, 0, l_liftd2 + i_door, h_lift)
g.DrawRectangle(PenColor1, 0, 0, l_liftd2 - i_door, h_lift)
g.FillRectangle(Brushes.Brown, l_liftd2 + i_door + 2, 2, l_liftd2 + i_door + 2, h_lift - 4)
g.FillRectangle(Brushes.Brown, 2, 2, l_liftd2 - i_door - 4, h_lift - 4)
PictureBox1.Image = h
Else
If i_cl_op = 0 Then
i_door = 0
End If
'Переход к закрытию
i_cl_op = 1
End If
'Закрытие дверей лифта (прорисовка)
If i_door < l_liftd2 And l_lift - i_door > l_liftd2 And i_cl_op = 1 Then
g.Clear(Color.White)
g.DrawLine(PenColor1, i_door, 0, i_door, h_lift)
g.DrawLine(PenColor1, l_lift - i_door, 0, l_lift - i_door, h_lift)
g.DrawRectangle(PenColor1, 0, 0, i_door, h_lift)
g.DrawRectangle(PenColor1, l_lift - i_door, 0, l_lift - i_door, h_lift)
g.FillRectangle(Brushes.Brown, 0, 2, i_door - 2, h_lift - 4)
g.FillRectangle(Brushes.Brown, l_lift + 2 - i_door, 2, l_lift - i_door, h_lift - 4)
PictureBox1.Image = h
Else
If i_cl_op = 1 Then
i_door = 0
'Конец цикла - Открытие/Закрытие
Timer1.Enabled = False
End If
i_cl_op = 0
i_z = 0
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim h As New Bitmap(80, 100)
Dim g As Graphics = Graphics.FromImage(h)
Dim PenColor1 As New System.Drawing.Pen(System.Drawing.Color.Red, 2)
i_door = 0
i_cl_op = 0
l_lift = 80
h_lift = 100
l_liftd2 = 0.5 * l_lift
PictureBox1.Left = 100
PictureBox1.Top = 100
PictureBox1.Width = l_lift
PictureBox1.Height = h_lift
Button1.Left = 200
Button1.Top = 200
Button1.Width = 200
Button1.Text = "Смещение-Открытие-Закрытие"
'Прорисовка лифта
g.Clear(Color.White)
g.DrawLine(PenColor1, l_liftd2, 0, l_liftd2, h_lift)
g.DrawLine(PenColor1, l_liftd2, 0, l_liftd2, h_lift)
g.DrawRectangle(PenColor1, l_liftd2, 0, l_liftd2, h_lift)
g.DrawRectangle(PenColor1, 0, 0, l_liftd2, h_lift)
g.FillRectangle(Brushes.Brown, l_liftd2 + 2, 2, l_liftd2 + 2, h_lift - 4)
g.FillRectangle(Brushes.Brown, 2, 2, l_liftd2 - 4, h_lift - 4)
PictureBox1.Image = h
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Инициализация смещения лифта вниз и цикла открытие/закрытие
PictureBox1.Top = PictureBox1.Top + PictureBox1.Height
Timer1.Enabled = True
End Sub
End Class

Запускаем проект,  жмем на кнопку. 


Есть вопросы? Спроси на нашем форуме!!
Нет комментариев

Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.