Практическая работа 1 Проект «Пазлы»
Предварительная подготовка к работе: в любом графическом редакторе разбить произвольный рисунок на 4 части и сохранить в разных файлах (Ris1.bmp, Ris2.bmp, Ris3.bmp, Ris4.bmp). Например, в Paint. Не изменяйте пропорций рисунков. Создайте ещё один рисунок Ris5.bmp – квадрат с однотонной заливкой (будем использовать его в качестве фона, когда необходимо скрыть предыдущие рисунки).
Задание. Разработать проект «Пазлы». Исходный рисунок разбит на 4 части. Необходимо сложить его на пустом поле, разбитом на 4 части.
Интерфейс проекта. На форме разместить следующие элементы управления:
Программный код.
Dim Mx, My As Single, Path As String, k, i, j, t As Integer, A(0 To 3) As Integer
‘Массив А - для хранения номеров перемещённых картинок;
‘Mx, My – координаты объекта при перемещении; Path – путь к файлу с рисунком;
‘k - количество верных ответов; t - номер рисунка, который нужно вернуть на место
Private Sub Form_Load() ‘загрузка формы
For i = 0 To 3
A(i) = -1 ‘заполнение массива -1 – признак того, что соответствующие поля Image2 пустые
Next
End Sub
Private Sub Command1_Click() ‘Выход
End
End Sub
Private Sub Command2_Click() 'Проверка
k = 0 ‘количество верных ответов
For i = 0 To 3
If Image2(i).Index = A(i) Then k = k + 1 'индекс в массиве рисунков должен совпадать с номером рисунка
Next
If k = 4 Then
Label1.Caption = "Игра завершена!!! Верных ответов - " & Str(k)
Else
Label1.Caption = "Попробуй еще раз!!! Верных ответов - " & Str(k)
End If
End Sub
Private Sub Command3_Click() 'Сброс
Label2.Visible = False
For i = 0 To 3
Image3(i).Visible = True ‘восстанавливаем все рисунки
Image2(i).Picture = LoadPicture("Ris5.bmp") ‘загружаем пустой фон
A(i) = -1 ‘в массив заносим -1 - признак пустого поля
Next
Label1.Caption = "Собери картинку"
End Sub
Private Sub Command4_Click() 'Справка
Label2.Visible = True ‘метка становится видимой и появляется текст справки
Label2.Caption = "Перемещайте картинки при нажатой левой кнопке мыши в нужные клетки. При двойном щелчке по картинке она вернётся на прежнее место!"
Timer1.Enabled = True ‘включаем таймер
End Sub
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single) 'Поправка
SourceMove (X - Mx), (Y - My)
End Sub
Private Sub Image2_DblClick(Index As Integer) 'Возвратить картинку на место по двойному щелчку по рисунку
Image2(Index).Picture = LoadPicture("Ris5.bmp") ‘загружаем пустой фон
t = A(Index) ‘запоминаем номер рисунка, который нужно вернуть на место
Image3(t).Visible = True ‘делаем рисунок с номером t видимым
End Sub
Private Sub Image2_DragDrop(Index As Integer, Source As Control, X As Single, Y As Single) 'завершение перетаскивания
Source.Visible = False
Image2(Index).Picture = LoadPicture(Path)
j = Index: A(j) = Val(Mid$(Path, 4, 1)) - 1 'запомнить номер перемещённого рисунка в массиве А
End Sub
Private Sub Image3_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Call Image3(Index).Drag(vbBeginDrag) 'начало перетаскивания рисунка
Mx = X
My = Y
End If
i = Index ‘запоминаем индекс поля в Image3, из которого перемещаем рисунок
If i = 0 Then Path = "Ris1.bmp" 'путь к рисунку
If i = 1 Then Path = "Ris2.bmp"
If i = 2 Then Path = "Ris3.bmp"
If i = 3 Then Path = "Ris4.bmp"
End Sub
Private Sub Timer1_Timer() 'Таймер
Label2.Visible = False ‘скрыть текст справки
End Sub
Задания:
© ООО «Знанио»
С вами с 2009 года.