Playfield с двоичным файлом

Я программирую настольную игру, и мне нужно создать двоичный файл с именем «write», который всегда записывает текущее игровое поле. Он содержит информацию, такую ​​как активный игрок, самую большую и самую маленькую координаты x / y. Поля без токенов должны иметь значение ноль. Это должно быть сделано для того, чтобы программа могла быть автоматически протестирована автоматически.

Я думал о создании класса с именем CurrentField, который я пишу в своем двоичном файле после каждого хода, но я не уверен, каким образом я могу гарантировать, что все будет записано в том месте, где оно должно быть (мы должны объявить определенный заголовок и определенные вещи, как ожидается, будут в определенном смещении).

Есть идеи по этому поводу? Хорошая идея, или есть лучший способ сделать это?

Редактировать: И кто-нибудь знает способ проверки того, что действительно было записано в двоичный файл?
Edit2: это должно быть решено с помощью стандартных библиотек c ++.
Производительность не так важна, так как это не будет большой файл. Идея записи только при вводе команды хороша.

0

Решение

Есть по крайней мере две хорошие библиотеки, которые могут помочь вам в этом.

  1. Повысить сериализацию предназначен для сериализации некоторых произвольных структур. Он включает в себя некоторые хорошие концепции, такие как управление версиями (вы можете изменить сохраненные данные в обновлении вашей игры и оставить прежнее игровое состояние без изменений) и archives (что, если вы хотите изменить формат файла вообще?

  2. Повысить дух предназначен для анализа и сериализации с большой скоростью любых текстовых и двоичных протоколов. Это работает намного быстрее.

  3. Вы можете обойти любые проблемы, просто сохраняя расположение памяти в файле с отображение файловой памяти. Будьте осторожны с указателями.

Проверьте, действительно ли вам нужно делать это на каждом шаге, так как вызовы файловой системы довольно медленные. По крайней мере, делайте это асинхронно (ищите Boost Asio).

0

Другие решения


По вопросам рекламы [email protected]