Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
revaldo666
9 / 9 / 1
Регистрация: 18.07.2010
Сообщений: 180
#1

Сохранение-Загрузка игры - C++

07.02.2012, 13:31. Просмотров 1042. Ответов 3
Метки нет (Все метки)

Всем доброго времени суток, слёзно прошу помощи, не получается реализовать сохранение и загрузку игры.
Имеется класс CGame который инкапсулирует в себе ещё несколько классов, в общем мне нужно чтоб всё содержимое CGame записалось в файл, ну а потом при вызове метода загрузилось обратно.
Вот класс CGame
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class CGame
{
    shared_ptr<CDestroyer> destroyer;
    shared_ptr<CBomber> bomb;
    shared_ptr<CCreiser> creiser;
    shared_ptr<CKsenDest> ksen;
    std::vector <shared_ptr<CEnemy>>:: iterator iter;
    std::vector <shared_ptr<CEnemy>> lst;
    std::vector<shared_ptr<CBonuses>> bonus;
    shared_ptr<CBonuses> bon;
    std::vector<shared_ptr<CBonuses>>::iterator it;
    std::vector<shared_ptr<CItem>> ittem;
    shared_ptr<CItem> item;
    std::vector<shared_ptr<CItem>>::iterator itm;
    CPlayer player;
    int wave;
    int Gamelevel;
    int counter;
    bool correct;
        int g,j;
        BITMAP* bg;
        BITMAP* health;
        BITMAP* armor;
        BITMAP* exp;
        BITMAP * buffer;
        BITMAP * lv[3];
        BITMAP * station;
        bool done;
        char sprt[200];
public:
    CGame(void);
    void Init();
    void Update();
    void Save(char * filename);
    void Load(char * filename);
    void Menu();
    void Craft();
    void Draw();
    void ChangeLevel();
    void StartGame();
    ~CGame(void);
};
Вот так я написал методы для сохранения и загрузки, вроде сохраняет, а вот загружатся не хочет
C++
1
2
3
4
5
6
7
8
9
10
11
12
void CGame::Save(char * filename)
{
    ofstream save(filename,ios::binary);
    save.write((char *)this,sizeof(CGame));
    save.close();
}
void CGame::Load(char * filename)
{
    ifstream load(filename,ios::binary);
    load.read((char *)this,sizeof(CGame));
    load.close();
}
Подскажите истинный путь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2012, 13:31     Сохранение-Загрузка игры
Посмотрите здесь:

Сохранение прогресса игры - C++
Всем привет подскажите пожалуйста как сохранить мне прогресс игры и потом что бы я смог его открыть и продолжить развивать? есть...

Сохранение/загрузка структуры - C++
Всем привет! Подскажите, что я делаю не так и где ошибки? Глаза уже все замылил, не могу нормально сохранить/открыть. По факту,...

INI - Загрузка и сохранение настроек - C++
Добрый день. Подскажите пожалуйста. Существует ли какой либо класс в C++ в Visual Studio для &quot;INI - Загрузка и сохранение настроек&quot;...

Сохранение и загрузка данных в файл - C++
Добрый вечер всем. Столкнулся с какой-то элементарной проблемой, и не могу никак понять в чем траблы. Вот код: ... int main() ...

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

Сохранение и загрузка в бинарный файл - C++
Доброго времени суток. Прошу помочь с сохранением/загрузкой в/из файла. Есть два класса: CClient: class CClient { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Felsurt
5 / 5 / 0
Регистрация: 06.02.2012
Сообщений: 19
07.02.2012, 13:46     Сохранение-Загрузка игры #2
Цитата Сообщение от revaldo666 Посмотреть сообщение
save.write((char *)this,sizeof(CGame));
дословно читаю, как это видит компилятор
взять адрес из поля this и привести к типу адреса на символ
взять размер класса CGame
передать эти данные методу write объекта save класса ofstream

далее читаем про метод write

Write block of data

Writes the block of data pointed by s, with a size of n characters, into the output buffer. The characters are written sequentially until n have been written.

This is an unformatted output function and what is written is not necessarily a c-string, therefore any null-character found in the array s is copied to the destination and does not end the writing process.

Parameters
s
Pointer to a block data with the content to be written.
n
Integer value of type streamsize representing the size in characters of the block of data to write.

т.е. что сделает метод write возьмет sizeog(CGame) байт начиная с адреса this и скопирует их в файл
если допустить, что ваш компилятор хранит объект соответствующим образом (хотя я сомневаюсь что вы читали его документацию по этому поводу), то в файл попадут все адреса ваших BITMAP-ов
но я не думаю, что вы поняли в чем проблема
это видно из того, что у вас не объявлен конструктор копий

очень рекомендую прочесть про него, тогда часть вопросов отпадет сама собой

да, и хранить итераторы контейнера - очень плохо
если контейнер был изменен, то итератор может стать не валидным
(конечно, если вы знакомы с тонкостями всех контейнеров STL, то возможно вы знаете когда и какие итераторы становятся не валидными)
revaldo666
9 / 9 / 1
Регистрация: 18.07.2010
Сообщений: 180
07.02.2012, 14:08  [ТС]     Сохранение-Загрузка игры #3
Контейнеры работают нормально.
Конструктор копирования написал,
BITMAP ы не записываю, всё равно не работает, можете на примере показать, как осуществить запись?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2012, 14:33     Сохранение-Загрузка игры
Еще ссылки по теме:

Массив стуктур - загрузка/сохранение в файл - C++
Всем привет, Есть обыкновенный массив структур, например: struct lists1 { long int name; long int option; char descrip; ...

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

Сохранение/Загрузка указателя на указатель типа char - C++
char **data = new char*; Подскажите, пожалуйста, как записать содержимое всего выше написанного в файл в двоичном виде, а также,...

Сохранение и загрузка данных из ListView в txt файл - C++
Добрый вечер! Возникла проблема при сохранении данных таблицы компонента ListView в txt файл и ,соответственно, при загрузке из txt в...

Сохранение(загрузка) свойств элементов формы в файл - C++
Здравствуйте! Необходимо реализовать взможность сохрнения/загрузки свойств элементов ComboBox (itemindex), Label(caption) и Edit(text) в/из...

Двусвязный список. Загрузка, сохранение в файл, сортировка по вводимому параметру - C++
Здравствуйте! Нужна помощь с функцией загрузки информации из файла. Файл создается, информация сохраняется, но не извлекается. Выдает,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Felsurt
5 / 5 / 0
Регистрация: 06.02.2012
Сообщений: 19
07.02.2012, 14:33     Сохранение-Загрузка игры #4
C++
1
2
3
4
int i = 5;
ofstream out(filename);
out << i;
out.close();
Yandex
Объявления
07.02.2012, 14:33     Сохранение-Загрузка игры
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru