Я трохи вивчив вихідний код 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 завантажує гру". Код добре коментується.