Я немного изучил исходный код DOOM. Я расскажу вам, как это делается там.
D_DoomMain содержит все функции открытия / сохранения / загрузки, а также множество других вещей. Как говорится в начале файла,
// DESCRIPTION:
// DOOM main program (D_DoomMain) and game loop (D_DoomLoop),
// plus functions to determine game mode (shareware, registered),
// parse command line parameters, configure game parameters (turbo),
// and call the startup functions.
По сути, весь файл полон M_CheckParm
s от начала до конца. Вот из чего состоит D_DoomLoop. Это один массивный цикл (что-то вроде 1000-2000 строк).
Так как ваш вопрос «Как я могу написать?» Я просто собираюсь вставить некоторые фрагменты кода, относящиеся к игровому листу, из D_DoomMain:
Вот операторы, в которых этот материал используется, в самом конце цикла.
p = M_CheckParm ("-loadgame");
if (p && p < myargc-1)
{
if (M_CheckParm("-cdrom"))
sprintf(file, "c:\\doomdata\\"SAVEGAMENAME"%c.dsg",myargv[p+1][0]);
else
sprintf(file, SAVEGAMENAME"%c.dsg",myargv[p+1][0]);
G_LoadGame (file);
}
if ( gameaction != ga_loadgame )
{
if (autostart || netgame)
G_InitNew (startskill, startepisode, startmap);
else
D_StartTitle (); // start up intro loop
}
D_DoomLoop (); // never returns
Вот функция, которая обращается к строкам, разбросанным по всему коду:
void M_ReadSaveStrings(void)
{
int handle;
int count;
int i;
char name[256];
for (i = 0;i < load_end;i++)
{
if (M_CheckParm("-cdrom"))
sprintf(name,"c:\\doomdata\\"SAVEGAMENAME"%d.dsg",i);
else
sprintf(name,SAVEGAMENAME"%d.dsg",i);
handle = open (name, O_RDONLY | 0, 0666);
if (handle == -1)
{
strcpy(&savegamestrings[i][0],EMPTYSTRING);
LoadMenu[i].status = 0;
continue;
}
count = read (handle, &savegamestrings[i], SAVESTRINGSIZE);
close (handle);
LoadMenu[i].status = 1;
}
}
У вас также есть файл p_savegame.c, в котором хранятся все данные, связанные с пользователем (какое у вас оружие, где вы находитесь, на каком уровне и т. Д.).
И, наконец, у вас есть файл, который загружает данные сохраненных игр в игровой сценарий, возможно, самый сложный из всех, потому что он также загружает все остальное. Это называется p_setup.c и находится в том же каталоге.
Для меня cat
это хорошо сработало, когда все это было в текстовом буфере, а pipe
этот текст - sendmail
на мой собственный адрес электронной почты. Таким образом, я могу читать его в нечетные моменты дня и использовать «найти», когда хочу найти что-то вроде «как DOOM загружает игру». Код хорошо прокомментирован.