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

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

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

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

07.02.2012, 13:31. Просмотров 966. Ответов 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++ Массив стуктур - загрузка/сохранение в файл
C++ Сохранение(загрузка) свойств элементов формы в файл
Сохранение и загрузка в бинарный файл C++
Сохранение и загрузка данных в файл C++
Сохранение/загрузка структуры C++
INI - Загрузка и сохранение настроек C++
C++ Загрузка и сохранение в двоичный файл
Сохранение/Загрузка указателя на указатель типа char C++
C++ Двусвязный список. Загрузка, сохранение в файл, сортировка по вводимому параметру
Сохранение и загрузка данных из ListView в txt файл C++
Сохранение прогресса игры C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 ы не записываю, всё равно не работает, можете на примере показать, как осуществить запись?
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