Nosok & OneMan
Nosok Nosok
Я тут модель разрабатываю, чтобы оптимальные ходы в тетрисе предсказывать – если бы ты видел следующие фигуры, понимаешь? Как будто идеальный алгоритм игры. Скажи, какую стратегию ты бы выбрал, чтобы в перспективе минимизировать количество очищенных рядов?
OneMan OneMan
Слушай, держи одиночный стена слева по краю и ни одна деталь не должна касаться низа, кроме этой стены. Все детали типа "И" старайся опускать вертикально в стену, чтобы просто добавляла высоту. Используй детали "Дж", "Л", "Т", "С", "З", чтобы заполнять пустоты в этой стене или оставляй такие провалы, которые никогда не выстроятся. Правая сторона должна оставаться свободной. Если деталь завершит линию, поворачивай её так, чтобы она лежала на стене, а не по дну. В перспективе у тебя будет низкая конструкция, линии не пропадают, и счёт останется на нуле.
Nosok Nosok
Звучит как неплохой способ поддерживать равные счета, но на практике этот поток случайных фигур всё равно будет пытаться загнать тебя в угол. Стена работает пару ходов, но как только появится О или Т напротив неё – придётся стену рушить. К тому же, оставлять правую сторону пустой – верный способ потерять полезное пространство для тетриса, в итоге получится просто стена из И. Я бы посоветовал оставить небольшой запас в середине, чтобы смягчать неизбежные фигуры – так ты сможешь держать стопку низкой, не жертвуя всем игровым полем.
OneMan OneMan
Поставь буферную зону посередине шириной в два блока. Используй левую стену для букв "И", правую сторону оставь свободной, а буквы "О", "Т", "С", "Z" размести в буфере, чтобы они не касались стен. Поверни их так, чтобы они поместились, но не завершили строку. Если какая-то фигура заполнила бы строку, опускай её в нижнюю половину буфера. Следи, чтобы буфер не был слишком высоким, иначе ты не сможешь укладывать фигуры. Когда поток вынуждает тебя повернуть, ты сможешь переориентировать буфер и продолжать. Так ты сохраняешь рабочее пространство небольшим и не жертвуешь всем игровым полем.
Nosok Nosok
Вот это интересное решение — добавление двухъячеечной буферной зоны как будто ты возводишь ров вокруг крепости. Единственное, что меня беспокоит – это правило “нового ориентирования” буфера. Если ты будешь постоянно его переключать, начнешь создавать такую закономерность, которую генератор случайных чисел сможет использовать. И еще, тебе все равно нужно будет как-то обрабатывать редкие буквы "S" или "Z", которые идеально впишутся в нижнюю половину буфера и случайно сотрут строку. Но, в теории, стратегия держит стек низким и позволяет избежать жестких очисток, так что я ставлю идее 3.2 из 5, а риску исполнения – 0.8.
OneMan OneMan
Понял, уменьшу буфер до одной ячейки и заблокирую все "С" и "Z", которые могли бы завершить строку, прежде чем упадут. Главное, чтобы стек не поднимался выше нижних трёх рядов; если форма этому угрожает, я заставлю её вращаться, чтобы она оставалась на месте. Так мы не дадим генератору случайных чисел найти повторяющийся шаблон. Просто, эффективно, без командной работы.