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

Игры visual basic. Пятнашки

 
 

Сейчас мы сделаем игру - "Пятнашки", кто в такую не играл, то запоминай правила:
Надо расставить кнопки так, чтоб они были от 1 до 15. Ну короче скачай исходник и потренируйся(ну там поиграй, т.к. в начале надо научиться играть, а потом делать). ОК?
Скажу сразу, что этот шаг создавался по исходнику Павла Чаговского.
Ну, будем считать что ты научился играть, и теперь начнем делать:

На форму кинь кнопку(Command 1, Height = 495, Width = 615, Caption = ""), теперь копируй ее, и 14 раз вставь(короче тебе надо чтоб было 15 кнопок с одним именем и свойствами, но с разными индексами).

На форму кинь еще 1 кнопку(Name = Command2, Caption = "Новая игра"), 1 Shape(Shape = 0 Rectangle, BackStyle = 1 Opaque). Раставь все кнопки, короче вот что у тебя должно получиться:

Код:

'Объявляем переменные
Dim L As Long, T As Long, K As Long

Private Sub Command1_Click(Index As Integer)
L = Command1(Index).Left ' Записываем в переменную значение свойства Left нажатой кнопки(например, если нажата кнопка с индексом 6, то L = Command1(6).Left)
T = Command1(Index).Top ' В переменную записываем значение свойства Top нажатой кнопки
' Двигаем влево:
If Shape1.Left - 720 = L And Shape1.Top = T Then ' Если нажатая кнопка находиться напротив Shapa то:
' Меняем кнопку и Shape местами
K = Command1(Index).Left
Command1(Index).Left = Shape1.Left
Shape1.Left = K
End If
'Двигаем вправо

If Shape1.Left + 720 = L And Shape1.Top = T Then
K = Command1(Index).Left
Command1(Index).Left = Shape1.Left
Shape1.Left = K
End If

' Двигаем в вверх:
If Shape1.Top - 600 = T And Shape1.Left = L Then
K = Command1(Index).Top
Command1(Index).Top = Shape1.Top
Shape1.Top = K
End If
' Двигаем вниз
If Shape1.Top + 600 = T And Shape1.Left = L Then
K = Command1(Index).Top
Command1(Index).Top = Shape1.Top
Shape1.Top = K
End If
' Ну, это если все кнопки правильно выстроены(от 1 до 15, и последняя Shape) то поздравляем победителя
' только если на форме кнопки немного сдвинуты, то этот код работать не будет. ' Символ "_" нужен для переноса строки

If Command1(0).Left = 480 And Command1(1).Left = 1200 And Command1(2).Left = 1920 _ 
And Command1(3).Left = 2640 And Command1(4).Left = 480 And Command1(5).Left = 1200 _
And Command1(6).Left = 1920 And Command1(7).Left = 2640 And Command1(8).Left = 480 _
And Command1(9).Left = 1200 And Command1(10).Left = 1920 And Command1(11).Left = 2640 _
And Command1(12).Left = 480 And Command1(13).Left = 1200 And Command1(14).Left = 1920 _
 _
And Command1(0).Top = 1080 And Command1(1).Top = 1080 And Command1(2).Top = 1080 _
And Command1(3).Top = 1080 And Command1(4).Top = 1680 And Command1(5).Top = 1680 _
And Command1(6).Top = 1680 And Command1(7).Top = 1680 And Command1(8).Top = 2280 _
And Command1(9).Top = 2280 And Command1(10).Top = 2280 And Command1(11).Top = 2280 _
And Command1(12).Top = 2880 And Command1(13).Top = 2880 And Command1(14).Top = 2880 Then
MsgBox "Ты победил"
End If
End Sub

Function Meshalka() ' Создаем Функцию Meshalka
Randomize ' генерируем всегда разные числа
For i = 0 To 900 ' Делаем цикл от 0 до 900(это чтоб хорошо перемешалось)
d = Fix(Rnd * 14) ' В переменную d записываем случайное число от 0 до 14
' Записываем в переменную координаты случайно выбранной кнопки
q = Command1(d).Left
w = Command1(d).Top
' Запиcываем координаты Shape
e = Shape1.Left
r = Shape1.Top

' Ставим кнопку на место Shape
Command1(d).Left = e
Command1(d).Top = r
' Ставим Shape на место кнопки
Shape1.Left = q
Shape1.Top = w
' P.S. и так 900 раз
Next i
End Function

Private Sub Command2_Click()
Meshalka ' При нажатии на кнопку, мешаем
End Sub

Private Sub Form_Load()
' Устанавливаем заголовки для всех кнопок
For i = 0 To 14 ' Устанавливаем надписи на кнопках
Command1(i).Caption = i + 1 ' К индексу кнопки прибавляется 1, т.к. у самой первой кнопки index = 0
Next i
Meshalka ' Мешаем кнопки
End Sub

Исходник


Есть вопросы? Спроси на нашем форуме!!
Valera [03.11.2010 14:25]

Как можно задать одно и тоже имя нескольким кнопкам?

To Valera [10.12.2010 17:55]

На форме скопируй (Ctrl+C) и вставь (Ctrl+V) кнопку, он спросит что уже существует и надо создать ли создать массив - Да.

To Valera [10.12.2010 18:00]

На форме скопируй (Ctrl+C) и вставь (Ctrl+V) кнопку, он спросит что уже существует и надо создать ли создать массив - Да.

kostya1 [16.01.2013 17:01]

В этом варианте игры, алгоритм перемешивания неверный, так как он приводит к нерешаемым вариантам.
Вообще перед тем как чтото писать, надо хотябы научиться играть.
Я писал такую игрушку, вот фрагмент кода.
Сначало формируем масив, а затем делаем перемешивание.
Алгоритм довольно простой перемешивание производится тройками,
исключая пустышку, поэтому все варианты решаемые!!!

Option Explicit
Dim ap(1 To 4, 1 To 4) As Integer
Dim x1, z1, i, j, k, l, vv, nn, mm, ct As Integer


Private Sub Command1_Click()
ct = 0
Randomize

For i = 1 To 4
For j = 1 To 4
ap(i, j) = mm
mm = mm + 1
Next j
Next i
mm = 1

For j = 1 To 21
nn = Int(Rnd * 2) + 1
vv = Int(Rnd * 2) + 1
k = Int(Rnd * 4) + 1
l = Int(Rnd * 4) + 1
If nn > 1 And k 1 And l < 4 Then z1 = ap(2, l): ap(2, l) = ap(4, l): ap(4, l) = ap(3, l): ap(3, l) = z1
If nn = 1 Then x1 = ap(k, 1): ap(k, 1) = ap(k, 3): ap(k, 3) = ap(k, 2): ap(k, 2) = x1
If vv = 1 Then z1 = ap(1, l): ap(1, l) = ap(3, l): ap(3, l) = ap(2, l): ap(2, l) = z1
Next j


Sigma20 [01.08.2013 10:35]

В жизни мы тоже мешаем тройками? Нет конечно. Складываем пятнашки как придётся и играем. А дальше как получится: сложил - хорошо, нет - ну и ладно.



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




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