Шаг влево, шаг вправо…
Дело было давно, когда я только учился программировать. Один баг запомнился особенно. Решил написать игру в шашки. Ну, сделал поле, расставил шашки, объяснил компу основные правила – куда ходить, как есть, как ходить нельзя и т.д. Мой ход, ход компа – и на цикл.
Стал тестировать – играть. Сначала, вроде, всё нормально: комп примитивно играет, но правильно. Вдруг замечаю, что шашек компа становится всё меньше (я столько не съедаю). Задумался… А, хрень какая-то, играем дальше. Через несколько ходов мои шашки стали тоже исчезать, причём в тылу, а на их месте стали появляться шашки компа! Ничего не понятно!. Несколько прогонов – то же самое.
Когда разобрался, выяснил: так как компу было прописано «ходить вперёд на соседнее свободное место» (по правилам шашек), то он просто уходил за край доски – там же препятствий нет! У меня прорисовывалось только поле шашек 8х8, а его шашки уходили на 0-й, 9-й, 10-й столбец массива. Потом коварно, из невидимости, у меня в тылу ел мои шашки по всем правилам «если рядом наискосок вражеская шашка, и за ней – пусто, то надо есть».
Исправил сей баг по-русски: чтобы не писать везде в коде ограничения по координатам, просто расширил массив (-2 to 11)х(-2 to 11) и все неотображаемые клетки вокруг игрового поля забил тройным рядом своих шашек. Теперь шашки компа за край не совались – занято!