Как стать автором
Обновить

Особенность оригинальной реализации Color Lines

Время на прочтение 2 мин
Количество просмотров 19K

Игра Color Lines aka «Шарики» в особом представлении, вероятно, не нуждается: компьютер заваливает доску 9*9 шариками разных цветов, человек может перемещать их по свободным клеткам, выстраивая в ряды. Ряды от 5 и более шариков одного цвета самоуничтожаются; если это произошло после хода человека, ему начисляются очки и даётся ещё один ход; если в процессе наброса от компьютера, то очки самоуничтожаются вместе с шариками.

Игра имеет большое число клонов, от входящих в поставку Gnome и KDE до реализаций на JavaScript в 30 строк. Тем не менее, большинство реализаций не учитывает одну интересную особенность, присутствующую в оригинальной DOS-игре, и заметно влияющую на геймплей.

Опытные игроки (в компетентности которых не позволяли сомневаться их рекорды, намного большие, чем у меня) уверяли, что компьютер выбирает места для новых шариков вовсе не случайно, а так, чтобы «ломать» горизонтальные и вертикальные ряды и, как следствие, рекомендовали концентрироваться на выстраивании диагональных рядов. Понятно, что естественная реализация выбора места «взять случайное поле из свободных» безразлична к направлению рядов. Что же под капотом у DOS-реализации?

IDA знает всё. Оказывается, выбор места для нового шарика происходит так. Сначала выбираем случайное поле из всей* доски. Если оно свободно — берём его. Если же оно занято — идём, начиная с выбранного поля, слева-направо сверху-вниз, пока не найдём свободное поле. (Если дошли до правого нижнего угла доски — продолжаем с левого верхнего). Такой метод приводит к тому, что разные свободные поля получают резко разные шансы в зависимости от количества занятых полей перед ними — и поля, продолжающие горизонтальные ряды, автоматически попадают в зону риска. Что насчёт сравнения вертикальных и диагональных рядов? Полагаю, тут проявляется психологический эффект — в случае диагональных рядов интуитивно хочется оставить свободные поля со всех сторон, в случае вертикальных рядов «забитость» полей слева воспринимается нормально.

*кроме, почему-то, правого нижнего угла. Есть всего две сложные вещи в Computer Science — очистка кэшей, выбор имён и ошибки на единицу.

Удачной пятницы!
Теги:
Хабы:
+63
Комментарии 15
Комментарии Комментарии 15

Публикации

Истории

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн