У меня в игре Umbers был баг - игра могла завершиться чуть раньше времени, когда были еще ходы и могла не завершиться даже когда закончились все ходы.
У меня жена начала играть в эту игру и когда увидела баг, то тут же достучалась до разработчика. Сразу же фиксить не было времени, но вчера начал разбираться, исправил, и игра уже доступна для скачивания здесь: Umbers. Скорость утверждения приложения со стороны Apple начинает поражать, все стало очень быстро.
А теперь немного о природе бага. Я написал свой собственный класс для Array2D (код на Swift):
struct Array2D { let columns: Int let rows: Int var array: Array init(columns: Int, rows: Int) { self.columns = columns self.rows = rows array = Array(repeating: nil, count: rows*columns) } subscript(column: Int, row: Int) -> T? { get { return array[row*columns + column] } set { array[row*columns + column] = newValue } } }
И код прекрасно работает, если обращаться к нему как tiles[col, row] и именно так я делал везде, кроме метода проверки доступности ходов, где поменял местами tiles[row, col] и это привело к тому, что проверялись неверные элементы.
Проблема моего класса в том, что он не проверяет на выход за пределы границы. Когда я писал его, то подумал - если я сам использую класс, то никогда не буду пытаться выходить за границы и поэтому при неправильном использовании класс не сообщил о проблеме. Если бы проверка была, то класс при создании массива размерностью tiles[10, 5] сообщил бы об ошибке при попытке обратиться к элементу tiles[4б 9] и я бы нашел ошибку раньше.
Очередной урок себе - делай проверки даже если сам только будешь использовать класс.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Паника, что-то случилось!!! Ничего не найдено в комментариях. Срочно нужно что-то добавить, чтобы это место не оставалось пустым.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.
Добавить Комментарий