2012-05-16 4 views
1

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

== сценарий ==

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

У меня есть идея о том, как подойти (я бы нашел способ сохранить положение весла, шара и кирпичей и точного времени), просто у меня нет подсказки о том, как я его выполнил. Как я могу достичь этого успеха?

+2

Это звучит, как он относится на http://gamedev.stackexchange.com/. –

+0

ive попытался использовать FileIO, но не работал, как я планировал. –

+0

@JasonTowne благодарит человека, я понятия не имел, что у stackexchange есть сайт-разработчик –

ответ

5

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

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

Я действительно не знаю технологию, которую вы используете, чтобы сделать вашу игру отличной от C# (XNA?). Но по существу вы хотите использовать какой-то API-интерфейс файловой системы, доступный в вашей среде, и писать свои сериализованные объекты там , Основываясь на вашем вопросе, вам может потребоваться перепроектировать некоторые из ваших игр, чтобы облегчить это. Как правило, хорошая практика состоит в том, чтобы иметь единое представление об истинности вашего игрового состояния, но даже если вы этого не сделаете, вы все равно можете понять это.

Так вот грубая схема шагов я бы ...

Сериализации

  1. Написать программу, которая берет свое состояние игры и выводит простые, сериализуемые объекты.
    • Эти простые объекты будут в основном иметь все общедоступные свойства getter/setter без каких-либо функциональных возможностей.
    • Попробуйте записать только минимальную информацию, необходимую для воссоздания состояния игры позже.
    • , например, увидеть, как шахматы сериализует состояние игры: chess notation
  2. Serialize эти объекты в JSON (потому что его легко и гибко)
  3. Написать, что JSON на диск.
    • Я бы, вероятно, использовал подход к базе конвенций.
    • такой как «Сохранение \ game1.json» - это состояние для первого игрового слота.
    • Просто выведите сохраненные игры на основе наличия файлов с правильным именем.

Десериализация

  1. Посмотрите на игру сейвы на основе вышеприведенного конвенции.
  2. Уничтожьте JSON обратно в простые объекты сериализации.
  3. Восстановите более сложное состояние игры, посмотрев на объекты сериализации.
    • Рассмотрите возможность использования шаблона посетителя.
  4. Возобновить игру, используя новое состояние гидратированной игры.

[EDIT: добавить некоторые дополнительные ссылки и быстрый образец кода]

Здесь является открытым исходным кодом JSON библиотека, которая является довольно хорошим: http://json.codeplex.com/

// somehow convert your game state into a serializable object graph 
var saveState = gameState.Save(); 

// use json.net to convert that to a string 
string json = JsonConvert.SerializeObject(saveState, Formatting.Indented); 

// save that string to the file system using whatever is available to you. 
fileSystemService.WriteAllText("Saves\game1.json", json); 
1

Вы можете просто сохранить его в файле XML, а затем прочитать XML-файл при запуске.

+0

поэтому, когда вы его сохраняете и выполняете, как я могу написать это, возможно, у меня есть пример (извините за то, что я спросил об этом просто очень просто) –

Смежные вопросы