Страница 1 из 1

Переклинило меня на динамической матрице...

СообщениеДобавлено: 28.08.2014 11:49:02
ViruZ
Здравствуйте!
Пишу игру - клон сокобана, для логического представления использую динамическую матрицу:
Код: Выделить всё
TSklad = array of array of Char;

Загрузка уровня происходит из текстового файла. Сама игра работает нормально, хочу доделать редактор уровней, в принципе всё работает, за исключением изменения размеров уровня. Вот уже больше недели меня переклинило на этом, раза три с "нуля" переписывал код изменения размеров, всё равно не работает так как нужно.
Проект игры доступен по SVN:
Код: Выделить всё
svn checkout http://lazsokoban.googlecode.com/svn/trunk/ lazsokoban-read-only

Вопрос в том, как мне сделать корректное изменение размеров динамической матрицы? Если добавляются строки/колонки, новые элементы должны заполняться пробелами.

Re: Переклинило меня на динамической матрице...

СообщениеДобавлено: 28.08.2014 12:24:41
Дож
Вот уже больше недели меня переклинило на этом, раза три с "нуля" переписывал код изменения размеров, всё равно не работает так как нужно.

А как нужно и что не так в текущей версии?

Re: Переклинило меня на динамической матрице...

СообщениеДобавлено: 28.08.2014 12:37:14
ViruZ
После изменения размеров уровня происходит и визуальное изменение интерфейса, аналогично как при открытии формы, но отрабатывает это не совсем так, как должно - при добавлении новой колонки "затирается" и предыдущая, при удалении колонки появляется сообщение о превышении диапазона, при добавлении строки добавляется две, причём предпоследняя также затирается пробелами и тоже появляется сообщение о превышении диапазона. Если есть возможность, попробуйте собрать игру (работает в Windows/Linux - проверено), и потестируйте режим редактора. Возможно, проблема не в изменении размеров, а что-то делаю не то после изменения при отрисовке?

Re: Переклинило меня на динамической матрице...

СообщениеДобавлено: 28.08.2014 14:12:32
Sergei I. Gorelkin
В начале обеих процедур ChangeMatrixHeight и ChangeMatrixWidth переменная "d" вычисляется неправильно, т.к. high() возвращает на единицу меньше, чем количество элементов массива. Из-за этого делается попытка добавить строку/столбец, если новое значение ширины/высоты равно старому и не нужно ничего делать. Потом эта ошибка где-то компенсируется добавлением единицы, где-то нет.
Концептуально все правильно, но с диапазонами полный и абсолютный бардак.

Re: Переклинило меня на динамической матрице...

СообщениеДобавлено: 28.08.2014 15:05:33
ViruZ
Большое спасибо! Теперь знаю, что делать дальше.