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

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

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

Сообщение ViruZ » 28.08.2014 11:49:02

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

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

Вопрос в том, как мне сделать корректное изменение размеров динамической матрицы? Если добавляются строки/колонки, новые элементы должны заполняться пробелами.
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

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

Сообщение Дож » 28.08.2014 12:24:41

Вот уже больше недели меня переклинило на этом, раза три с "нуля" переписывал код изменения размеров, всё равно не работает так как нужно.

А как нужно и что не так в текущей версии?
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение ViruZ » 28.08.2014 12:37:14

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

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

Сообщение Sergei I. Gorelkin » 28.08.2014 14:12:32

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

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

Сообщение ViruZ » 28.08.2014 15:05:33

Большое спасибо! Теперь знаю, что делать дальше.
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru