Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2009, 12:06   #1
INCIC
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 22
Вопрос Как сохранить текущую игру ?

У меня есть игра меморина.Нужно чтобы при закрытии формы сохранялась текущая игра.И при следующем запуске была сохранённая игра.
меморина.rar
INCIC вне форума Ответить с цитированием
Старый 26.06.2009, 14:39   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Моя точка зрения такова:
1. Обрабатываем закрытие формы (не помню как, но это можно сделать)
2. В обработке события (1) вызываем функцию сохранения (ну вобщем как-нибудь сохраняем).
3. Так же программе понадобится файл-напоминалка, в который мы запишем имя файла с сохранением из пункта 2.
4. При запуске программы открываем файл-напоминалку. Если его не существует, либо он не содержит информации об последней сохраненной игре, то не будет вам сохраененной игры при запуске. Если там указана сохраненная игра, то просто ее загружаем.

Альтернатива пунктам 3 и 4:
Никаких напоминалок, при запуске игра ищет в папке с сохранениями файл с самой поздней датой создания и запускает его (если нету сохранений, то небудет и старой игры)
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 26.06.2009, 15:35   #3
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Не очень понятен смысл игры.
Для начала дам один важный совет: если хотите, что бы Вам помогли, уважайте чужое время, трафик и дисковое пространство.Старайтесь во вложениях оставлять только необходимую информацию.Убирайте из вложений .exe -шник, файлы .dcu ( они появятся все равно при компиляции проекта), и все не нужные файлы, которые не используются непосредственно в проекте.(Вместо никому не интересного Word -овского файла "Отчет", в котором повторяются коды всех Unit, и бессмысленных скриншотов - и все это объемом более 3 Мб, лучше бы прикрепили маленькое пояснение к игре).
Непосредственно по вопросу - конкретно, что в игре Вы хотите сохранить и в каком виде эта информация находится в проекте?.Проект объемный и вряд ли кому то охота сидеть и разбирать дотошно всю игру, что бы понять смысл.
Так что старайтесь задавать вопросы более конкретно.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 26.06.2009, 18:36   #4
INCIC
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 22
По умолчанию

Нужно чтобы сохранилось игровое поле,точнее его состояние.
Это должно быть буквально строчки 3-4 написать
Или ввести новую процедуру
P.S.Спасибо за информацию.
INCIC вне форума Ответить с цитированием
Старый 26.06.2009, 22:06   #5
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

В похожих играх обычно игровое поле привязано к двухмерному массиву, элементы которого хранят значения каждого поля (т.н. индексы), которые соответствуют состоянию поля (или ячейки).
Например - mas_index[0,1]:= 1 (соответствует, скажем цвету Red), mas_index[2,1]:= 3 (Green) и т.д. Получим численный массив (типа byte или integer).Перед выходом из игры записываем этот масив в файл (можно текстовый), а при запуске игры считываем массив из файла и передаем эти значения в программу.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 27.06.2009, 16:38   #6
INCIC
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 22
По умолчанию

Ну в принципе нужный алгоритм. Но как реализовать запись массива в файл?Ну и считываине тоже
INCIC вне форума Ответить с цитированием
Старый 27.06.2009, 19:03   #7
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Запись:
Код:
procedure WriteIndex;

var i,j,s: integer;  // счетчики циклов
    wi: integer;     // переменная  записи  в  файл "индексов" блоков  уровня
    masWI: array[0..14,0..14] of integer;
begin
  AssignFile(i_file,'mem_index.txt');
  Rewrite(i_file); 
    Writeln(i_file,' ');
    for i:= 0 to 14 do
    begin
      for j:= 0 to 14 do
      begin
        wi:= masWI[i,j];
        if j = 14 then Writeln(i_file,wi,' ')
        else
        Write(i_file,wi,' ');
      end;
    end;
  CloseFile(i_file);
end;
Чтение из файла:
Код:
procedure  ReadIndex;

var i,j,s: integer;  // счетчики циклов
    ri: integer;     // переменная  записи  в  файл "индексов" блоков  уровня
    masRI: array[0..14,0..14] of integer;
begin
  i:= 0; j:= 0;       //  требование  компилятора об  инициализации
    AssignFile(i_file,'mem_index.txt');
    {$I-}                                // перевод контроля ошибок на программу
    Reset(i_file);
    {$I+}                            //  востановление режима автоматич. обработки ошибок
    if IOResult = 0 then      //  проверка ошибки открытия  файла
    begin
      for s:=0 to 225 do
      begin
        Read(i_file,ri);
        if i = 15 then
        begin
          i:= 0; j:= j+1;
          if j = 15 then j:= 0;
        end;
        masRI[j,i]:= ri;
        i:= i+1;
      end;
      CloseFile(i_file);
    end
    else
    begin
    Application.MessageBox(PChar('ИГРА не сохранена.Начните ИГРУ сначала.Нажмите OK'),
                             PChar(' <  Имя Вашей игры  >'),
                             MB_ICONQUESTION+MB_OK);
    end;
end;
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 27.06.2009, 23:35   #8
INCIC
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 22
По умолчанию

А как правильно объявить процедуры?!
Вроде самое,то )
INCIC вне форума Ответить с цитированием
Старый 27.06.2009, 23:51   #9
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Создайте глобально массив, в который заносите состояние полей (ячеек) игрового поля.(В выше приведенных примерах masWI и masRI -это по сути один и тот же массив).Введите в проект компонент(кнопку или меню) "Сохранить игру", по которому сохраняется игра.В обработчике этого компонента и вызывайте процедуру WriteIndex.При запуске игры аналогично введите компонент "Загрузить сохраненную игру" и в обработчике вызывайте ReadIndex.
Cами процедуры описываются в начале раздела implementation.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 28.06.2009, 14:43   #10
INCIC
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 22
По умолчанию

Спасибс)посмотрим что получится)
INCIC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать текущую форму главной? TaTT DoGG Общие вопросы .NET 2 10.06.2009 15:34
как добавить в имя файла текущую дату? Markan Microsoft Office Excel 3 27.05.2009 13:19
Как мне узнать текущую строку в БД (InterBase) Edward БД в Delphi 2 05.03.2009 17:09
Как получить текущую дату из SQL запроса? _ozzy_ SQL, базы данных 2 09.09.2008 21:15
как в мемо добавить в текущую строчку символ из переменной Kukkk Общие вопросы Delphi 6 01.09.2007 16:48