Алгоритм игры "Кварт"

В игре "Quath" вы заполняете блок и превращаете его в прямоугольник. Блок будет удален.

Нормальное стирание

[
 [1,1,1,1,1],
 [1,0,0,0,0]
]
// when rectangle complete ⤵️
[
 [1,1,1,1,1],
 [1,1,1,1,1]
]

Стирание цепи

Но если два блока соединены, когда они станут большим прямоугольником, они будут стерты вместе.

[
  [1,1,1,1],
  [1,0,0,1],
  [1,2,2,1],
  [0,0,2,0],
  [0,0,2,0]
]
//when rectangle complete,two block erase at same time
[
  [1,1,1,1],
  [1,0,0,1],
  [1,2,2,1],
  [1,2,2,1],
  [1,2,2,1]
]

Макет блока кажется более сложным в реальной игре.

Я хочу знать, как судить, что является самым большим прямоугольником на карте.

Youtube: игровое видео для этой игры

1 ответ

стереть целевое изображение
нашел решение этого вопроса на себе.
используйте картинку выше, например.
дать каждому блоку идентификатор, тогда карта может быть выражена в виде массива ниже

[
  [a,a,a,a,a,b,b,b,0,0,0,0]
  [d,d,a,c,c,c,c,b,0,i,i,i]
  [d,0,0,0,0,0,0,b,h,h,h,i]
  [d,0,0,0,0,0,0,g,g,g,h,i]
  [d,0,0,0,0,f,f,f,f,g,h,0]
  [d,e,e,e,e,0,0,0,0,g,0,0]
]

попробуйте заполнить блок "F"

[
  [a,a,a,a,a,b,b,b,0,0,0,0]
  [d,d,a,c,c,c,c,b,0,i,i,i]
  [d,0,0,0,0,0,0,b,h,h,h,i]
  [d,0,0,0,0,0,0,g,g,g,h,i]
  [d,0,0,0,0,f,f,f,f,g,h,0]
  [d,e,e,e,e,f,f,f,0,g,0,0]
]

переместите курсор в направлении 4, если найдете 0, уменьшите высоту или ширину прямоугольника
получить прямоугольник ниже, я назвал его "связанный ходок"

[
  [a,a,a,a,a,b,b,b]
  [d,d,a,c,c,c,c,b]
  [d,0,0,0,0,0,0,b]
  [d,0,0,0,0,0,0,g]
  [d,0,0,0,0,f,f,f]
  [d,e,e,e,e,f,f,f]
]

но части "блока я" все еще снаружи большого прямоугольника
мы можем удалить область прямоугольника в массиве карты,
и найти там есть части блока осталось

если не осталось частей, мы можем стереть большой прямоугольник

продолжать заполнять "блок F" "связанный ходок" может легко найти его стать заполненным прямоугольником и стереть его

затем попробуйте заполнить "блок г"
мы получим такой прямоугольник

[
    [b,h,h]
    [g,g,g]
    [g,g,g]
    [g,g,g]
]

прямоугольник включает в себя прямоугольник необходимо стереть
поэтому нам нужно удалить лишние части, а затем стереть нужную область

шаги, чтобы судить:
1. стрелять блоки, блок станет частью набора блоков
2. запустить "связанный ходок"
3.Если прямоугольник результата имеет только один столбец или строку, это не допустимый прямоугольник (конечный судья)
4. найти дополнительные части в прямоугольнике
5. если нет, стереть прямоугольник (конечный судья)
6.Если да, удалите лишние детали, найдите прямоугольник слева, снова бегите с ограниченным ходом (конечный судья)

я думаю, что это не лучший способ решить этот вопрос.
это может быть очень медленно, у кого-нибудь есть идея?

Другие вопросы по тегам