Tôi đã nghiên cứu mã nguồn DOOM một chút. Tôi sẽ cho bạn biết làm thế nào nó được thực hiện trong đó.
D_DoomMain chứa tất cả các hàm mở / lưu / tải, cũng như một loạt các thứ khác. Như nó nói ở đầu tập tin,
// 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.
Về cơ bản, toàn bộ tập tin có đầy đủ M_CheckParm
từ đầu đến cuối. Đó là những gì D_DoomLoop bao gồm. Đó là một vòng lặp lớn (dài khoảng 1000-2000 dòng).
Vì câu hỏi của bạn là 'Làm thế nào tôi có thể viết?' Tôi sẽ dán một số đoạn mã đề cập đến các trò chơi, từ D_DoomMain:
đây là những câu lệnh mà công cụ đó được sử dụng, ở cuối vòng lặp.
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
Đây là chức năng truy cập các chuỗi mà bạn tìm thấy nằm rải rác trong mã:
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;
}
}
Bạn cũng đã có một tệp có tên p_savegame.c với nội dung sẽ lưu tất cả dữ liệu liên quan đến người dùng (loại vũ khí bạn có, bạn đang ở cấp độ nào, v.v.).
Và cuối cùng, bạn đã có được tệp tải dữ liệu lưu vào một kịch bản trò chơi, được cho là phức tạp nhất trong tất cả, bởi vì nó cũng tải mọi thứ khác. Cái đó được gọi là p_setup.c, và nằm trong cùng thư mục.
Nó hoạt động tốt cho tôi cat
tất cả những thứ này vào một bộ đệm văn bản và pipe
văn bản đó đến sendmail
địa chỉ email của riêng tôi. Bằng cách đó, tôi có thể đọc qua nó vào những thời điểm kỳ lạ trong ngày và sử dụng 'find' khi tôi muốn tìm kiếm những thứ như 'làm thế nào để DOOM tải một trò chơi'. Các mã được bình luận tốt.