DOOM kaynak kodunu biraz çalıştım. Sana orada nasıl yapıldığını anlatacağım.
D_DoomMain, tüm açma / kaydetme / yükleme işlevlerinin yanı sıra başka şeyleri de içerir. Dosyanın başında söylediği gibi,
// 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.
Temel olarak, tüm dosya M_CheckParm
baştan sona s ile doludur . D_DoomLoop bundan oluşur. Bu büyük bir döngü (1000-2000 satır uzunluğunda bir şey).
Sorunuz 'Nasıl yazabilirim?' Ben sadece D_DoomMain gelen oyun kaydetme atıfta bazı kod parçaları yapıştıracağım:
döngünün sonunda, bu şeylerin kullanıldığı ifadeler.
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
Kod boyunca dağınık bulduğunuz dizelere erişen işlev şunlardır:
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;
}
}
Ayrıca kullanıcıyla ilişkili tüm verileri (hangi silahlara sahip olduğunuzu, hangi seviyede olduğunuzu vb.) Kaydedecek şeyler içeren p_savegame.c adlı bir dosyanız var.
Ve son olarak, savegame verilerini bir oyun senaryosuna yükleyen dosyaya sahipsiniz, muhtemelen en karmaşık olanı, çünkü her şeyi de yüklüyor. Buna p_setup.c denir ve aynı dizinde bulunur.
cat
Bunların hepsinde bir metin arabelleğine ve pipe
o metni sendmail
kendi e-posta adresime kadar benim için iyi çalıştı . Bu şekilde günün garip anlarında okuyabilirim ve 'DOOM nasıl oyun yükler' gibi şeyler aramak istediğimde 'find'ı kullanabilirim. Kod iyi yorumlanmıştır.