Я пытаюсь создать каскадный симулятор Bejeweled с долотами. Пока что я смог обнаружить и удалить матчи, но теперь мне нужно, чтобы драгоценности упали. Мое состояние представлено списком досок, по одному для каждого типа драгоценностей. У меня есть маска всех драгоценностей, которые удалены.Bejeweled bit board с применением силы тяжести
Можно ли использовать некоторую побитную магию для этого?
Пример двух начальных бит-досок (давайте предположим, что есть только два типа драгоценностей и что это плата 4x4 вместо 8x8). Первый бит - нижний левый, четвертый бит - верхний левый, а последний бит - верхний правый.
0 0 1 1 1 1 0 0
1 0 0 0 0 1 1 1
1 1 1 1 0 0 0 0
0 0 1 0 1 1 0 1
После удаления матчей:
0 0 1 1 1 1 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 0 1 1 0 1
Маска используется:
0 0 0 0
0 1 1 1
1 1 1 1
0 0 0 0
И после того, как силы тяжести он должен выглядеть следующим образом:
0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0
1 0 1 1 0 1 0 0
0 0 1 0 1 1 0 1
Это реализуется с целыми числами , и этапы выглядят так:
[43814, 21721] # Initial state
[35076, 4249], 26210 # State after matches have been removed, mask used to remove matches
[8962, 4149] # State after gravity has been applied
Не могли бы вы добавить минимальный пример того, как выглядят эти доски? –
@tobias_k Понятно? –
Да, это лучше. Ну, вам нужно будет проверить, является ли ячейка '0' на всех досках, тогда вы можете сбросить ячейку выше. Это было бы намного проще, если бы вы использовали одну доску для всех драгоценностей, например. '1' для синего,' 2' для зеленого и т. Д. Любая конкретная причина, по которой вы используете несколько досок? Даже тогда вы можете легко получить эти доски из этой комбинированной доски. –