Как правильно проверять возможные комбинации игры 3 в ряд?
Я сделал проверку на возможные комбинации, но она слишком громоздкая, а именно я проверяю так - сначала проверяю есть ли возможные клетки с префабами справа +1 +2 + 3, если есть то проверяю значения у клеток 0 +2 +3, то есть что если клетка будет перемещена вправо, если у всех этих клеток значения равны ( то есть одинаковые цвета к примеру) то плюс комбинация, далее тоже самое проверяюесли так же вправо но клетки правее и выше, правее и ниже, ну и слева, далее те же манипуляции если вверх, вниз, влево сдвиг, это все проверяется для каждой клетки после появления новых цветов (то есть после того как какие цвета совпали и уничтожились)...
Понимаю что данная схема крайне громоздкая, неудобная, да и вообще выглядит достаточно бредово, хоть и работает...
Подскажите как правильно проверять подобного рода комбинации?
Да у программистов часто такая фраза вылетает :D
Просто появились новые плюшки типа не двигаемые блоки пока рядом не разобьешь, вот теперь придется весь этот велосипед переделывать, ну ничего что нибудь придумаю, по сути нужно учесть все возможные варианты и учесть их в условиях...
Ну во первых - уйти от префабов и хранить модель отдельно.
Во вторых - самое банальное - проверять паттернами. Типичная задача - найти есть ли в массиве паттерн.
Ну у меня префабы помимо всего имеют переменную ActiveColor, то есть какой у него там цвет, а так же переменные координат y и x, то есть по сути при проверке можно эти данные загнать в отдельный словарик для проверки...
Касательно паттернов - вы имеете ввиду создать шаблоны типа
1011
1101
1 1
0 1
1 0
1 1
то есть 4 возможных смещения и потом прогнать по всем цветам, мол если есть к примеру одного цвета один и через один 2 таких же цвета и т.д.?
По моему оно на то и выйдет, или я не так понял...
В паттернах вам не надо учитывать цвета - достаточно что они равны (если мы о классическом меч3).
А так да, идею вы ухватили правильно.
Создаете кучу паттернов вида "1 1 1 1", "1 1 1", "1 1 1 1 1" (ну и по вертикали то же самое, и квадраты если надо), добавляете им приоритеты и по ним уже проверяете.
То на то не выйдет - код будет компактнее за счет единого цикла обработки по паттернам. Ну смотря конечно как напишете.