игра "пятнашки" !!!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
кирилл91
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 20.09.2012 (Чт) 15:03

игра "пятнашки" !!!

Сообщение кирилл91 » 20.09.2012 (Чт) 15:14

Здравствуйте, форумчане! нужна помощь с кодом для игры в пятнашки на VB6
Вот код:
Код: Выделить всё
Dim L As Long, T As Long, K As Long

Private Sub Command1_Click(Index As Integer)
L = Command1(Index).Left
T = Command1(Index).Top
If Pus.Left - 720 = L And Pus.Top = T Then
K = Command1(Index).Left
Command1(Index).Left = Pus.Left
Pus.Left = K
End If


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

If Pus.Top - 600 = T And Pus.Left = L Then
K = Command1(Index).Top
Command1(Index).Top = Pus.Top
Pus.Top = K
End If


If Pus.Top + 600 = T And Pus.Left = L Then
K = Command1(Index).Top
Command1(Index).Top = Pus.Top
Pus.Top = K
End If
End Sub


надо написать год для того чтоб перемешивались кнопки и были цифры на них при помощи функции Rand . я учусь еще так что можно как для " чайника "объяснить :D
[Viper] :: Используй тэг CODE!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 20.09.2012 (Чт) 16:13

кирилл91 писал(а):кнопки и были цифры на них при помощи функции Rand

Плохая идея. Надо расставить цифры в соответствии с индексами, потом выполнить некоторое количество рандомных ходов, чтобы они перемешались.

кирилл91 писал(а):Вот код:

Во-первых, используй тег [code].
Во-вторых, если уж используешь координаты (хотя, не надо так делать), вынеси это в отдельную функцию.
В-третьих, используй двумерный массив кнопок (или их индексов) для определения направления перемещения.

кирилл91
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 20.09.2012 (Чт) 15:03

Re: игра "пятнашки" !!!

Сообщение кирилл91 » 20.09.2012 (Чт) 16:18

идея тут не причем задание учителя просто не пойму как

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 20.09.2012 (Чт) 17:27

кирилл91 писал(а):идея тут не причем задание учителя просто не пойму как

Никак. Это фигня.
И я на 99% уверен, что задание - просто сделать игру, в которой начальное расположение чисел не задаётся из источника.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Как сделать по-нормальному

Сообщение Qwertiy » 20.09.2012 (Чт) 21:46

Игра на поле n строк, m столбцов. Сначала без кнопок, просто логика.

Есть числа i in 0 to n*m-1. Лишнее значение n*m-1 будем рассматривать как пустую клетку. Для каждого числа есть его текущие координаты (x[i], y[i]). Ход - это своп пустой клетки и соседней с ней клетки с числом.

Обозначим last = n*m-1
Будем хранить массивы:
x(0 to last), y(0 to last) - координаты числа i
index(0 to n-1, 0 to m-1) - число, находящееся в позиции (i,j)

Будем рассматривать ход, именно как перемещение путой клетки.
Пусть (dx,dy) - вектор перемещения пустой клетки (в пределах поля), тогда
i = index(x(last)+dx, y(last)+dy) - клетка, с которой происходит обмен
причём x(i)==x(last)+dx and y(i)==y(last)+dy
соответственно, обмен примет вид x(i)-=dx, y(i)-=dy, x(last)+=dx, y(last)+=dy, index(x(i),y(i))=i, index(x(last),y(last))=last

После каждого хода необходимо проверить, не завершилась ли игра, т. е. верно ли, что ForAll i : i = x(i)*m + y(i).

Для того, чтобы сгенерировать поле, для которого решение существует (а оно сущестует не для любой перестановки чисел), поступим следующим образом.
Сначала расположим числа в заключительном состоянии. Затем сделаем некоторое количество рандомных ходов. Желательно при перемешивании гарантировать, что следующий ход не будет движением в направлении, противоположном предыдущему - это значительно улучшает качество перемешивания.

Теперь про реализацию с кнопками.
На каждой кнопке написано число - её индекс, увеличенный на 1 (чтобы отображались числа 1 to n*m-1, а не 0 to n*m-2).
По индексу из массивов x и y можно получить координаты на поле, которые можно преобразовать в координаты формы (для этого можно сделать функцию, а вызов Scale значительно её упростит). При нажатии кнопки надо проверить существующие соседние клетки поля на наличие дырки (по массиву index), после чего выполнить ход и обновить координаты кнопки.

Замечу, что не следует отображать последовательность ходов, перемешивающих поле. Их надо выполнить "тихо", а потом показать перемешанное поле.

Надеюсь, нигде ошибок не насажал сейчас.

кирилл91
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 20.09.2012 (Чт) 15:03

Re: игра "пятнашки" !!!

Сообщение кирилл91 » 21.09.2012 (Пт) 13:36

Спасибо !Все сделал)) Еще вопрос а можно ли как нибудь вместо цифр на кнопках картинку поместить вместо надписи ?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 21.09.2012 (Пт) 14:07

Можно, но не помню точно, как. Там нужное свойство есть. Кроме того, ей надо поставить графический стиль.
Кстати, можно вообще Imag'ы использовать вместо кнопок.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: игра "пятнашки" !!!

Сообщение ark » 22.09.2012 (Сб) 7:44

Qwertiy писал(а):Кстати, можно вообще Imag'ы использовать вместо кнопок
Тогда можно вообще 1 picturebox использовать, на нем решетка с цифрами, при перемещении исходную затирать а в новой печатать цифру

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 22.09.2012 (Сб) 9:35

ark писал(а):
Qwertiy писал(а):Кстати, можно вообще Imag'ы использовать вместо кнопок
Тогда можно вообще 1 picturebox использовать, на нем решетка с цифрами, при перемещении исходную затирать а в новой печатать цифру

Можно, но это сложнее.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: игра "пятнашки" !!!

Сообщение ark » 23.09.2012 (Вс) 5:42

Qwertiy писал(а):Можно, но это сложнее.
Чем? Вся логика в твоём предыдущем посте инвариантна к контролам - координаты, индексы - все это можно хранить не в массиве контролов, а в массиве/коллекции структур (ну, или классов-объектов, если нравится). Единственное обращение к контролу:
Qwertiy писал(а):после чего выполнить ход и обновить координаты кнопки
На PictureBox это
Код: Выделить всё
PB.Line (Старое_Место),BackColor,BF
PB.PSet Новое_Место:PB.Print Index
'Ну или DrawPicture/BitBlt и т.п

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.09.2012 (Вс) 7:55

ark писал(а):Единственное обращение к контролу:

Не единственное. Ещё надо по координатам щелчка (а у события Click координаты не передаются, если не ошибаюсь) определить, какую клетку надо двигать. Причём тупо двигать на MouseDown/MouseUp нелогично.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: игра "пятнашки" !!!

Сообщение ark » 23.09.2012 (Вс) 9:07

Qwertiy писал(а): Причём тупо двигать на MouseDown/MouseUp нелогично
Почему по MouseUp не логично? Кроме того, есть GetCursorPos

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: игра "пятнашки" !!!

Сообщение Mikle » 23.09.2012 (Вс) 9:24

А двигать ничего не нужно, нужно 16 (не 15) Image расставить по местам, на одном из них картинка пустого места, на остальных - цифры. Отлавливать событие Click, если рядом с нажатым Image есть пустой, но свапить картинки (не сами Image). Про координаты вообще можно забыть. Image, в отличие от кнопок, не берут фокус, что тоже плюс.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.09.2012 (Вс) 16:13

ark писал(а):Почему по MouseUp не логично?

Потому что drag-n-drop...

Mikle писал(а):Отлавливать событие Click, если рядом с нажатым Image есть пустой, но свапить картинки (не сами Image).

Так я и предложил Image, а ark хочет один PictureBox.
А свопать картинки вместо сдвига контролов - идея интересная, но не сработает, например, если фон формы сделать немонотонным (градиент, к примеру).

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: игра "пятнашки" !!!

Сообщение Хакер » 23.09.2012 (Вс) 16:21

Mikle писал(а):Отлавливать событие Click, если рядом с нажатым Image есть пустой, но свапить картинки (не сами Image).

Идея двигать косяшку при клике на любом её участке не хороша. Есть куча людей, у которых есть вредная привычка — невольно щёлкать мышкой в случайные места. Я в их числе. Будет сильно раздражать.

Qwertiy писал(а):Потому что drag-n-drop...

Поясни.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.09.2012 (Вс) 16:47

Хакер писал(а):Идея двигать косяшку при клике на любом её участке не хороша.

Хм... Во всех играх, которые по сути являются пятнашками (только собирается не последовательность чисел, а картинка), кусок сдвигается при нажатии на него и при использовании стрелки на клавиатуре. Ну иногда поддерживается перетаскивание. Других реализаций ни разу не видел.

Хакер писал(а):
Qwertiy писал(а):Потому что drag-n-drop...

Поясни.

Сейчас дошло, что MouseUp, а не MouseDown...
Имелось в виду, что человек может передумать двигать элемент и удерживая кнопку мыши перевести её в сторону, куда сдвиг невозможен. Хотя, с MouseUp будет так же, если переместить мышь наверх по диагонали.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.09.2012 (Вс) 16:57

Qwertiy писал(а):А свопать картинки вместо сдвига контролов - идея интересная, но не сработает, например, если фон формы сделать немонотонным (градиент, к примеру).

Хотя, можно ещё Visible менять. Но не вижу причин, почему это лучше сдвига контрола.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: игра "пятнашки" !!!

Сообщение Mikle » 23.09.2012 (Вс) 17:03

Qwertiy писал(а):не вижу причин, почему это лучше сдвига контрола.

Потому, что индексы контролов, если их не двигать, однозначно без всяких расчётов определяют их места, удобно и наглядно.
Хакер писал(а):Есть куча людей, у которых есть вредная привычка — невольно щёлкать мышкой в случайные места.

Можно сделать фичу, чтобы клик по пустой клетке отменял предыдущий ход. Курсор над клетками менять на, к примеру, "палец".

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.09.2012 (Вс) 17:09

Mikle писал(а):Потому, что индексы контролов, если их не двигать, однозначно без всяких расчётов определяют их места, удобно и наглядно.

Имеешь в виду, расставить в дизайнере контролы и забыть про них? Я описал реализацию с возможностью изменения размеров поля, поэтому не прокатит :) К тому же, если захотеть обрабатывать resize формы, то координаты всё равно придётся пересчитывать.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: игра "пятнашки" !!!

Сообщение Хакер » 23.09.2012 (Вс) 18:42

Mikle писал(а):Можно сделать фичу, чтобы клик по пустой клетке отменял предыдущий ход. Курсор над клетками менять на, к примеру, "палец".

Почему бы не сделать так:
Вложения
Game.rar
Сто лет назад сделал :)
(243.38 Кб) Скачиваний: 124
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.09.2012 (Вс) 19:01

Хакер писал(а):Почему бы не сделать так:

Оформлено красиво, но пользоваться непривычно и неудобно, по крайней мере мне... В чём смысл возможности выбора направления, когда есть только один его вариант? Кстати, похоже, что тут допускаются стартовые позиции, неимеющие решения. Или пустая клетка не последняя?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: игра "пятнашки" !!!

Сообщение Хакер » 23.09.2012 (Вс) 20:56

Qwertiy писал(а):В чём смысл возможности выбора направления, когда есть только один его вариант?

А фидбеке в виде звука при щелчке по заведомо неправильном ребре. Не понимаю людей, которые не понимают важности фидбеков в интерфейсе.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.09.2012 (Вс) 21:06

Хакер писал(а):А фидбеке в виде звука при щелчке по заведомо неправильном ребре.

Я про то и говорю, что нет смысла вообще выбирать ребро, когда фишка имеет не более одного возможного хода. Вместо одного варианта предоставляется 4 (причём треугольными областями без пометок) таких, что 3 из них заведомо приводят к сигналу об ошибке.

Хакер писал(а):Не понимаю людей, которые не понимают важности фидбеков в интерфейсе.

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

Кстати, другой вариант - делать перетаскивание фишки (как в играх типа 3 в ряд) - тогда и твоя идея с направлениями сохраняется и фишку можно за центр спокойно брать :)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: игра "пятнашки" !!!

Сообщение Mikle » 23.09.2012 (Вс) 21:20

Qwertiy писал(а):свопать картинки вместо сдвига контролов - идея интересная, но не сработает, например, если фон формы сделать немонотонным (градиент, к примеру).

Всё прекрасно срабатывает, проверил, прозрачность сохраняется, на фон формы поставлена картинка.
Хакер писал(а):Есть куча людей, у которых есть вредная привычка — невольно щёлкать мышкой в случайные места. Я в их числе.

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: игра "пятнашки" !!!

Сообщение Хакер » 23.09.2012 (Вс) 21:20

Qwertiy писал(а):Оформлено красиво,

Кстати, оформление такое, что я бы сейчас вернулся на 10 лет назад и убил себя за такие вещи. :)

Qwertiy писал(а):Важность фидбеков я понимаю и заметил, что они есть. Но, на мой взгляд, только при щелчке по фишке, которую нельзя сдвинуть, они должны происходить.

Не согласен. Представь указатель мышки проекцией пальца. Ты ведь пальцем можешь попытаться толкнуть фишку не в ту сторону. При этом ты почувствуешь тактильный фидбек. И в добавок, нельзя просто коснуться пальцем фишки, чтобы она сдвинулась. Её надо непременно надавливая сдвигать в ту сторону, в какой расположена пустая ячейка. Понятно, что это издержки реального мира, и в компьютере можно сделать перемещение фишки просто по щелчку. Но правила игры менять не стоит. Я под «игрой» в виду не игру «Пятнадцать», если что.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.09.2012 (Вс) 22:07

Хакер писал(а):Кстати, оформление такое, что я бы сейчас вернулся на 10 лет назад и убил себя за такие вещи. :)

Для игры - в самый раз. Это же не программа для финанфовых рассчётов :lol:

Хакер писал(а):Представь указатель мышки проекцией пальца.

Почему-то, у меня нет привычки его так представлять. Игра с направлениями мне встречалась, даже две. В одной из них оно действительно было нужно и обозначало направлене движения кубика по льду. А другой просто показывалась стрелочка единственно-возможного направления, куда поедет кубик в случае щелчка по нему, или крестик, если это вообще невозможно. Как раз второй вариант к пятнашкам в самый раз.
Заметь кстати, что Mikle согласен про 4 направления. Мне они в начале очень сильно мешали, хотя, со временем, к таким вещам привыкаешь... но удобными их от этого считать не начинаешь :(

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: игра "пятнашки" !!!

Сообщение ark » 26.09.2012 (Ср) 10:57

Как-то так:
Class gameCell:
Public index As Long, row As Long, col As Long Ну, можно ещё пропертей добавить, Image, например, или IsCorrectPlace=((row - 1) * 4 + col - 1 = index)' ReadOnly

Form1 (на ней pbGame):
Код: Выделить всё
Option Explicit
Private Type pointAPI
    X  As Long
    Y  As Long
End Type
Private Declare Function GetCursorPos Lib "user32" (lpPoint As pointAPI) As Long
Private Declare Function ScreenToClient Lib "user32" (ByVal hWnd As Long, lpPoint As pointAPI) As Long

Dim cells As New Collection
Dim cellW As Long, cellH As Long

Private Sub Form_Load()
   Dim i As Long, j As Long
   cellW = 1200: cellH = cellW
   pbGame.Width = cellW * 4
   pbGame.Height = cellH * 4
   pbGame.AutoRedraw = True
   pbGame.FontSize = 24
   Dim c As gameCell
   For i = 1 To 4
       For j = 1 To 4
           Set c = New gameCell
           c.index = (i - 1) * 4 + j - 1
           c.row = i: c.col = j
           cells.Add c
           If c.index > 0 Then PrintCell c
       Next j
   Next i
   For i = 1 To 3
       pbGame.Line (0, cellH * i)-(pbGame.Width, cellH * i)
       pbGame.Line (cellW * i, 0)-(cellW * i, pbGame.Height)
   Next i
End Sub

Private Sub pbGame_Click()
   Dim pt As pointAPI
   GetCursorPos pt
   ScreenToClient pbGame.hWnd, pt
   Dim row As Long, col As Long
   col = Int(pt.X * Screen.TwipsPerPixelX / cellW) + 1
   row = Int(pt.Y * Screen.TwipsPerPixelY / cellH) + 1
   Dim clickedCell As gameCell
   Set clickedCell = GetCell(row, col)
   If clickedCell.index > 0 Then
      Dim newCell As gameCell
      Dim r As Long, c As Long
      Dim bFound As Boolean
      For r = Max(row - 1, 1) To Min(row + 1, 4)
          Set newCell = GetCell(r, col)
          If newCell.index = 0 Then
             bFound = True: Exit For
          End If
      Next r
      If Not bFound Then
         For c = Max(col - 1, 1) To Min(col + 1, 4)
             Set newCell = GetCell(row, c)
             If newCell.index = 0 Then
                bFound = True: Exit For
             End If
         Next c
      End If
      If bFound Then SwapCells clickedCell, newCell
   End If
End Sub

Private Function GetCell(row As Long, col As Long) As gameCell
   Dim gc As gameCell
   Set GetCell = Nothing
   For Each gc In cells
       If gc.row = row Then
          If gc.col = col Then
             Set GetCell = gc: Exit For
          End If
       End If
   Next
End Function

Private Sub SwapCells(cell_clicked As gameCell, cell_empty As gameCell)
    ClearCell cell_clicked
    cell_empty.index = cell_clicked.index
    cell_clicked.index = 0
    PrintCell cell_empty
End Sub

Private Sub ClearCell(c As gameCell)
   Dim X As Long, Y As Long
   X = (c.col - 1) * cellW + 16
   Y = (c.row - 1) * cellH + 16
   pbGame.Line (X + 1, Y + 1)-(X + cellW - 32, Y + cellH - 32), pbGame.BackColor, BF
End Sub
Private Sub PrintCell(c As gameCell)
   pbGame.CurrentX = (c.col - 1) * cellW + 320
   pbGame.CurrentY = (c.row - 1) * cellH + 320
   pbGame.Print c.index
End Sub

Private Function Min(X As Long, Y As Long) As Long
   If X > Y Then Min = Y Else Min = X
End Function
Private Function Max(X As Long, Y As Long) As Long
   If X < Y Then Max = Y Else Max = X
End Function

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: игра "пятнашки" !!!

Сообщение ark » 26.09.2012 (Ср) 11:14

ЗЫ:
Код: Выделить всё
Private Sub pbGame_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
   Dim row As Long, col As Long
   col = Int(X / cellW) + 1
   row = Int(Y / cellH) + 1
   Dim currCell As gameCell ' Это можно на уровень формы
   Set curCell = GetCell(row, col)
   If curCell.index = 0 Then
      pbGame.MousePointer = vbNoDrop: Exit Sub
   End If
   Dim newCell As gameCell
   Dim r As Long, c As Long
   Dim bFound As Boolean
   For r = Max(row - 1, 1) To Min(row + 1, 4)
       Set newCell = GetCell(r, col)
       If newCell.index = 0 Then
          If r < row Then
             pbGame.MousePointer = vbUpArrow
          Else
             pbGame.MousePointer = vbSizeNS
          End If
          Exit Sub
       End If
   Next r
   If Not bFound Then
      For c = Max(col - 1, 1) To Min(col + 1, 4)
          Set newCell = GetCell(row, c)
          If newCell.index = 0 Then
             If c < col Then
                pbGame.MousePointer = vbSizeWE
             Else
                pbGame.MousePointer = vbSizeWE
             End If
             Exit Sub
          End If
      Next c
   End If
  pbGame.MousePointer = vbNoDrop
End Sub

Это чтобы курсор менять (правда, стандартных курсоров не хватает). Тогда и pbGame_Click можно попроще сделать, через Select Case pbGame.MousePointer, например.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: игра "пятнашки" !!!

Сообщение ark » 28.09.2012 (Пт) 12:18

Вот, причесал немного
game.zip
(5.04 Кб) Скачиваний: 123
а ark хочет один PictureBox
А мне так больше нравится - мухи (логика) отдельно, котлеты в виде отрисовки - отдельно. И не привязан ни к каким контролам. Хочешь - через GDI/GDI+ рисуй, хочешь - через DirectX/Show. Можно вместо квадратов двигать шарики или какие-нить прозрачные финтифлюшки. Можно поменять логику, скажем, на трёхмерную (ну, вместо row/col - X/Y/Z) и поменять отрисовку в 3D. Гибче как-то.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 28.09.2012 (Пт) 21:30

ark писал(а):Вот, причесал немного

Что-то там кода слишком много... Смотреть лень.

К тому же, ты проверял, как это работает?
2012_09_28 22_23_35 - Пятнашки.png
2012_09_28 22_23_35 - Пятнашки.png (18.05 Кб) Просмотров: 4856
Эта комбинация не имеет решения, если не ошибаюсь. А я оба раза получил её в итоге.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 40

    TopList