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

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

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

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

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

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

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

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

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

Публикации

Истории

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

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн