![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Сохранёнки" [Delphi, Windows]
MonoLife © (2005-10-31 05:14:00)Добрых суток. Сто лет не занимался играми, но появилось немного времени, нашел свою старую игруху 2003 г, захотелось поковыряться. Вопрос возник такого плана, как лучше создавать пользовательские сохраненки в файл? Содержание: юзер, здоровье, патроны и т.д. и т.п. Какой файл должен быть? Кроме ini тока. Поделитесь, кто что знает.
MonoLife (2005-11-02 06:24:00) [21]Спасибо, конечно, всем... Всё же, как сохранить массивиз записей типа Recordв файл и как считать его из файла? Ничего не получается :(
Кефир87 (2005-11-01 21:32:00) [22]Зачем карту то сохранять? Когда можно сохранить только изменения относительно свежезагруженной карты? Т.е. на пример что у того вот персонажа хп 20%, а вон тот рулез был взят 8)
JUS (2005-11-01 20:22:00) [23]
> Тем более не понятно какого типа Ваша переменная MapFiles
MapFiles:file of word;
А я не говорю что у меня база данных, я говорю что можно ещё сохранять в базу данных, а свой способ сохранения просто привел как вариант.
Fosgen (2005-11-01 20:13:00) [24]Это все равно получается типизированный файл. Запись у него будет все-таки фиксированной длины.
Write(MapFiles,ScrMap[MapFx,MapFy]);
В этой строчке записывается не что-нибудь, а запись размером в одно слово. Так что в данном случае это даже не база данных, а просто нетипизированный файл.
Тем более не понятно какого типа Ваша переменная MapFiles
JUS (2005-11-01 12:59:00) [25]Можно сохранять в базу данных ещё, а я вот карту сохраняю в своей игре
ScrMap:array[1..SizeMapX,1..SizeMapY] of word;
...
AssignFile(MapFiles,'Map0.nlr');
Rewrite(MapFiles);
For MapFy:=1 to SizeMapY do
For MapFx:=1 to SizeMapX do
Write(MapFiles,ScrMap[MapFx,MapFy]);
CloseFile(MapFiles);
end;
JUS (2005-11-01 12:56:00) [26]Можно сщхранять в базу данных ещё, а я вот карту сохраняю в своей игре
ScrMap:array[1..SizeMapX,1..SizeMapY] of word;
...
> AssignFile(MapFiles,'Map0.nlr');
> Rewrite(MapFiles);
> For MapFy:=1 to SizeMapY do
> For MapFx:=1 to SizeMapX do
> Write(MapFiles,ScrMap[MapFx,MapFy]);
> CloseFile(MapFiles);
> end;
Fosgen (2005-11-01 08:01:00) [27]А какие они могут быть?
Файлы - либо текстовые - см. те же ini.
Либо - типизированные - тогда массивы фиксированной длины.
Либо - нетипизированные - тогда работа с байтовыми блоками, чтение и запись данных из\в память по указателям (организация буферов и т.д.).
Кто-нить знает другие типы файлов? Я - вроде нет. Дельфи - вроде тоже...:)
MonoLife (2005-11-01 06:13:00) [28]Какие еще варианты есть?
Fosgen (2005-10-31 23:18:00) [29]Мда, сталкивался я с такой ситуевиной - неопределенной длины массив не позволяется в типе, используемом для типизированных файлов. Дельфя говорит - размер записи неопределен. Запись позволяется исключительно фиксированной и определенной на момент компиляции длины. Переменной длины массивы можно писать блоками по N-байт в нетипизированные файлы. Читая их соответственно по указателям.
MonoLife (2005-10-31 15:29:00) [30]...нашел статейку АП по файлам (типизированные и не...)... сейчас почитаю...не знаю, пока, в моем случае, наверное, пригодится. Задача - записать типизированный массив в файл... также как п.[1] ? К примеру, (см. п 1) Myplayer array of Tplayer? SetLength и т.д... Ага..надо найти инфу по записи и чтению типизированных массивов из файла и в файл...
MonoLife (2005-10-31 15:14:00) [31]А еще можно записывать подобным образом типизированные массивы в файл[4]
вот! Чуть по-подробнее можно?.
[3] - Как раз, пока я не задумывался над этой проблемой, я так и делал - файл, записанный, по типу [1] для каждого юзвера.
Домовенок (2005-10-31 13:24:00) [32]Можно не только разные "диры" создавать, но и просто разные файлы. А еще можно записывать подобным образом типизированные массивы в файл, если хочется сделать все сохранения в одном файле.
Sniper17 (2005-10-31 12:43:00) [33]хм... создай разные диры с разными сохранёнками.. какие проблемы-то?
MonoLife (2005-10-31 10:01:00) [34]м...м-дя...для одного юзвера я так и делал :). А если пользователей много и каждый хочет загрузить свою игру и у каждого есть свои сохраненки?
Antonn (2005-10-31 06:54:00) [35]можно типизированый забабахать, типа:
type
Tplayer = record
helth:integer;
Ammo:integer;
Shield:integer;
end;
var M:TMemoryStream; P:Tplayer;
begin
M:=TMemoryStream.create;
try
p.ammo:=4;
M.write(p,sizeof(Tplayer));
m.savetofile('c:\1.txt');
finally
m.free;
end;
end;