Как сохранить и загрузить игру в текстовом режиме - PullRequest
2 голосов
/ 11 января 2009

Я опоздал в проекте gamedev простой текстовой игры на C ++. Я изучал проект и думаю, что знаю, как все сделать, но я застрял в одном: как сохранить и загрузите игру как предложено. Я не хочу, чтобы что-то было сделано для меня, только вы показываете мне способ сделать это.

Ответы [ 6 ]

7 голосов
/ 11 января 2009

Ну, самый простой способ, который я могу придумать, - это иметь структуру / класс, который представляет целое «состояние» игры. А при сохранении вы просто записываете всю эту структуру из памяти на диск. Загрузка будет противоположной.

Какой это формат на диске, полностью зависит от вас, если ваше состояние полностью состоит из простых типов данных, вы можете просто захотеть написать двоичный двоичный объект. Или вы можете захотеть использовать что-то более универсальное, например, сериализовать его в XML, это действительно ваше дело.

4 голосов
/ 12 января 2009

Я только взглянул на почту, но вот мое предложение:

Состояние вашей игры может состоять из пары структур и нескольких массивов данных. Структуры будут определять игрока (имя, здоровье, деньги, что угодно), оружие (атака, шанс и т. Д.), Броню и т. Д. И т. Д. ...

Сначала вы должны написать состояние игрока, сохранив его структуру. Следующим будет количество оружия, которым владеет игрок, за которым следует массив оружейных структур, одинаковых для брони ...

Тогда формат файла будет

STRUCT player
INT num_of_weapons
STRUCT weapon
STRUCT weapon
STRUCT weapon
INT num_of_armor
STRUCT armor
STRUCT armor

Это легко сделать с помощью fstream.

3 голосов
/ 11 января 2009

Процесс, который вы описываете, известен как «сериализация», то есть получение объекта в памяти и преобразование его в некую форму, которую можно сохранить на диск. Это может быть простой дамп памяти или что-то сложное, например, XML.

Предлагаю взглянуть на статью в Википедии на эту тему: http://en.wikipedia.org/wiki/Serialization

2 голосов
/ 11 января 2009

Я не читал сайт, на который вы ссылались, но вы, вероятно, захотите написать код, который читает / пишет в основной текстовый файл, чтобы загрузить / сохранить вашу игру.

Сначала выясните, как отформатировать ваш текстовый файл. Например, если я пишу игру pacman, которая позволяет игроку сохранять игры, текстовый файл может выглядеть примерно так:

5 
54700
3

Я бы написал свой код для чтения файла по одной строке за раз:

Строка 1: уровень, на котором находится игрок.

Строка 2: количество очков, набранных игроком.

Строка 3: количество жизней, которые имеет игрок.

Выполните поиск в Google для ввода / вывода файла C ++, чтобы выяснить, как написать настоящий код.

1 голос
/ 11 января 2009

XML-сериализация кажется самым простым решением. С небольшими легкими библиотеками, такими как TinyXML , это еще проще. Что касается того, чтобы сделать файлы нечитаемыми, вы можете использовать простое запутывание XOR с помощью короткого ключа. Или вы можете попробовать JSON .

0 голосов
/ 11 января 2009

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

...