Сохранение в игре.

Темы, связанные с проектированием и программированием roguelike-игр

Модераторы: Sanja, Максим Кич

altmax
Сообщения: 94
Зарегистрирован: 15 сен 2012, 11:59

Re: Сохранение в игре.

Сообщение altmax » 13 фев 2017, 15:24

Ну я пока думаю попробовать делать сохранения более радикальным способом - либо при загрузке удалять таблицы сразу после считывания, либо при сохранении очищать таблицы перед записью. Так что информация будет содержаться либо в памяти в игре, либо в базе данных. А то действительно возможны различные баги с сохранениями - типа сохранился на первом уровне, а при загрузке тебе подмешали десяток высокоуровневых монстров из прошлого сохранения.

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1560
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Re: Сохранение в игре.

Сообщение Максим Кич » 14 фев 2017, 14:17

altmax писал(а):
13 фев 2017, 15:24
Ну я пока думаю попробовать делать сохранения более радикальным способом - либо при загрузке удалять таблицы сразу после считывания, либо при сохранении очищать таблицы перед записью. Так что информация будет содержаться либо в памяти в игре, либо в базе данных. А то действительно возможны различные баги с сохранениями - типа сохранился на первом уровне, а при загрузке тебе подмешали десяток высокоуровневых монстров из прошлого сохранения.
Вот для этого достаточно хранить campaign_id или ещё какой идентификатор каждого прохождения. И потом по нему же вычищать, буде появится необходимость. Тем более, SQLite поддерживает каскадное удаление по внешнему ключу.

Либо, учитывая специфику SQLite, заводить по файлу на прохождение.
Dump the screen? [y/n]

altmax
Сообщения: 94
Зарегистрирован: 15 сен 2012, 11:59

Re: Сохранение в игре.

Сообщение altmax » 27 июл 2017, 12:55

Решил делать сохранение путем простой записи в файл в бинарном режиме. Функциональность базы данных для этой цели явно излишня. В общем то ничего сложного аккуратно записать в файл данные, а потом их оттуда в определённом порядке и извлечь.

Аватара пользователя
Cfyz
Сообщения: 761
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: Сохранение в игре.

Сообщение Cfyz » 27 июл 2017, 14:01

Простота работы с бинарным представлением довольно обманчива. Пока работает все хорошо, но стоит чему-нибудь сломаться и наступает отладка, ад и Пакистан. Запись в текстовом виде (или через SQL) требует хоть какого-то промежуточного слоя (разбор-конвертация), который облегчает обнаружение и репорт ошибок. Конкретно текстовый формат имеет плюс беглого визуального контроля происходящего.
Cfyz теперь - наглая морда.

altmax
Сообщения: 94
Зарегистрирован: 15 сен 2012, 11:59

Re: Сохранение в игре.

Сообщение altmax » 27 июл 2017, 15:54

Переделать никогда не поздно, и писать буду не в один, а в несколько файлов - каждый класс отдельно, что облегчит отладку. А так да - ошибку будет найти не просто, вроде записал, считал - а в результате какой-то хлам пишется в поля класса. Просто из-за одного забытого байта.
Ну и пишу я не целиком участок памяти на диск, а каждое значение отдельно - т.е. какой-то промежуточный слой конвертации есть.

altmax
Сообщения: 94
Зарегистрирован: 15 сен 2012, 11:59

Re: Сохранение в игре.

Сообщение altmax » 02 авг 2017, 12:45

Доделал и почти протестировал сохранение. Ну по крайней мере сохранение карты уровня и всего на неё хранящегося работает - а это около 120 кбайт информации на один уровень. И даже заработало почти без отладки, пришлось только две строчки добавить в сохранении, упустил некоторые переменные когда писал.
В итоге сохранение и последующая загрузка игры - это более 1000 строк кода получилось, немало, думал будет меньше. Ну и отладку очень удобно вести в отладчике Visual Studio - идешь по шагам и смотришь, что пишется в переменные. Как только какая-нибудь координата X получает значение -7874637839, ищешь где ошибся.

Аватара пользователя
Apromix
Мастер
Сообщения: 1092
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: Сохранение в игре.

Сообщение Apromix » 02 авг 2017, 13:12

Запаковывай сохранку в zip-архив с паролем, будет меньше весить :D
Изображение Изображение

altmax
Сообщения: 94
Зарегистрирован: 15 сен 2012, 11:59

Re: Сохранение в игре.

Сообщение altmax » 02 авг 2017, 13:25

Apromix писал(а):
02 авг 2017, 13:12
Запаковывай сохранку в zip-архив с паролем, будет меньше весить :D
Да там много возможностей для оптимизации, у меня все переменные тина int, занимают 4 байта, а там на большинство достаточно по 2 байта, т.к. они вряд ли даже больше 1000 будут, а некоторым и 1 байта за глаза, просто лень сидеть и разбираться, каким сколько надо.

Да и вообще памяти много, диски большие - зачем оптимизировать? А потом удивляемся, почему на четырехядерном проце с 8 гб оперативки просто приложение начинает тормозить, при том что подобное по функциональности на 3-м пентиуме просто летало :D

Ответить

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

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