⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loadsave.cpp

📁 RPG单机游戏圣剑英雄传的源代码(声音、图片、剧情等)希望给对于想制作游戏的人有一定帮助。
💻 CPP
字号:
//==============存取进度函数==================

void SaveIt(int Num)
{
	char *FileName[]={"save\\1.sav","save\\2.sav","save\\3.sav","save\\4.sav","save\\5.sav"};
	FILE *fp;
	fp=fopen(FileName[Num],"wb");

	fwrite(&Scene,4,1,fp);
	fwrite(&SX,4,1,fp);
	fwrite(&SY,4,1,fp);
	fwrite(&old_SX,4,1,fp);
	fwrite(&old_SY,4,1,fp);
	fwrite(&DX,4,1,fp);
	fwrite(&DY,4,1,fp);
	fwrite(&old_DX,4,1,fp);
	fwrite(&old_DY,4,1,fp);
	fwrite(&Flag_OutCity,4,1,fp);
	fwrite(&Flag_GotoPalace,4,1,fp);
    
	fwrite(&Hero,sizeof(Role),1,fp);
	for(int i=0; i<MAPS; i++)
	{
		fwrite(Map[i].Name,32,1,fp);
		fwrite(&Map[i].Width,4,1,fp);
		fwrite(&Map[i].Hight,4,1,fp);
		fwrite(&Map[i].Ground,4,1,fp);
		fwrite(Map[i].res,7,1,fp);
		fwrite(Map[i].Data, Map[i].Width*Map[i].Hight*2, 1, fp);
		fwrite(&Map[i].Npc_Nums, 4, 1, fp);
		fwrite(Map[i].NPC, sizeof(Role), Map[i].Npc_Nums, fp);
	}
	fclose(fp);
}

//**************************8
//存进度
BOOL SaveGame()
{
	int MenuIt=0;
	char *Menu[]={"进度一","进度二","进度三","进度四","进度五","取 消"};
	int x=0,y=280;

	Blt(lpDDSBackGround, x,y, lpDDSMainMenu, GetRect(0,0,150,200), FALSE);
	ShowMenu(x+50, y+20, MenuIt, Menu, 6, RGB(255,255,255));
	PressKey(VK_RETURN,1);

	while( 1 )
	{
		if( GetAsyncKeyState(VK_DOWN) )	//下一项
		{
			PressKey(VK_DOWN,1);
			MenuIt=(MenuIt+1)%6;
			Blt(lpDDSBackGround, x,y, lpDDSMainMenu, GetRect(0,0,150,200), FALSE);
			ShowMenu(x+50, y+20, MenuIt, Menu, 6, RGB(255,255,255));
		}
		if( GetAsyncKeyState(VK_UP) )	//上一项
		{
			PressKey(VK_UP,1);
			if( MenuIt==0 ) MenuIt=5;
			else MenuIt--;
			Blt(lpDDSBackGround, x,y, lpDDSMainMenu, GetRect(0,0,150,200), FALSE);
			ShowMenu(x+50, y+20, MenuIt, Menu, 6, RGB(255,255,255));
		}
		if( GetAsyncKeyState(VK_RETURN) )	//确定
		{
			while( GetAsyncKeyState(VK_RETURN) ) {}
			switch( MenuIt )
			{
			case 0:					
			case 1: 
			case 2:
			case 3:
			case 4:
				//存盘
				SaveIt(MenuIt);
				return TRUE;
				break;
			case 5:	//取消
				//ChangePalette(MainPal,NullPal,-1);
				//PostMessage(hWnd, WM_CLOSE, 0, 0);
				//GameTitle();
				return FALSE;
				break;
			}
		}
		if( GetAsyncKeyState(VK_ESCAPE) )	//返回
		{
			while( GetAsyncKeyState(VK_ESCAPE) ) {}
			//MainMove();
			//Flip();
			return FALSE;
		}
	}
	
}

//读进度
BOOL LoadIt(int Num)
{
	char *FileName[]={"save\\1.sav","save\\2.sav","save\\3.sav","save\\4.sav","save\\5.sav"};
	FILE *fp;
	if( (fp=fopen(FileName[Num],"rb"))==NULL )
	{
		//fclose(fp);
		return FALSE;
	}

	fread(&Scene,4,1,fp);
	fread(&SX,4,1,fp);
	fread(&SY,4,1,fp);
	fread(&old_SX,4,1,fp);
	fread(&old_SY,4,1,fp);
	fread(&DX,4,1,fp);
	fread(&DY,4,1,fp);
	fread(&old_DX,4,1,fp);
	fread(&old_DY,4,1,fp);
	fread(&Flag_OutCity,4,1,fp);
	fread(&Flag_GotoPalace,4,1,fp);
    
	fread(&Hero,sizeof(Role),1,fp);
	Hero.Surface=lpDDSSpirit;	//页面关联
	
	for(int i=0; i<MAPS; i++)
	{
		fread(Map[i].Name,32,1,fp);
		fread(&Map[i].Width,4,1,fp);
		fread(&Map[i].Hight,4,1,fp);
		fread(&Map[i].Ground,4,1,fp);
		fread(Map[i].res,7,1,fp);
		fread(Map[i].Data, Map[i].Width*Map[i].Hight*2, 1, fp);
		fread(&Map[i].Npc_Nums, 4, 1, fp);
		fread(Map[i].NPC, sizeof(Role), Map[i].Npc_Nums, fp);
		for(int j=0; j<Map[i].Npc_Nums; j++)
		{
			//页面关联
			Map[i].NPC[j].Surface=lpDDSNpc[ Map[i].NPC[j].Pic ];
		}
	}
	fclose(fp);

	return TRUE;
}

//**************************8
//读进度
BOOL LoadGame()
{
	int MenuIt=0;
	char *Menu[]={"进度一","进度二","进度三","进度四","进度五","取 消"};
	int x=0,y=280;

	Blt(lpDDSBackGround, x,y, lpDDSMainMenu, GetRect(0,0,150,200), FALSE);
	ShowMenu(x+45, y+20, MenuIt, Menu, 6, RGB(255,255,255));
	PressKey(VK_RETURN,1);

	while( 1 )
	{
		if( GetAsyncKeyState(VK_DOWN) )	//下一项
		{
			PressKey(VK_DOWN,1);
			MenuIt=(MenuIt+1)%6;
			Blt(lpDDSBackGround, x,y, lpDDSMainMenu, GetRect(0,0,150,200), FALSE);
			ShowMenu(x+45, y+20, MenuIt, Menu, 6, RGB(255,255,255));
		}
		if( GetAsyncKeyState(VK_UP) )	//上一项
		{
			PressKey(VK_UP,1);
			if( MenuIt==0 ) MenuIt=5;
			else MenuIt--;
			Blt(lpDDSBackGround, x,y, lpDDSMainMenu, GetRect(0,0,150,200), FALSE);
			ShowMenu(x+45, y+20, MenuIt, Menu, 6, RGB(255,255,255));
		}
		if( GetAsyncKeyState(VK_RETURN) )	//确定
		{
			while( GetAsyncKeyState(VK_RETURN) ) {}
			switch( MenuIt )
			{
			case 0:					
			case 1: 
			case 2:
			case 3:
			case 4:
				//读盘
				if( LoadIt(MenuIt)==TRUE )
					return TRUE;
				break;
			case 5:	//取消
				//ChangePalette(MainPal,NullPal,-1);
				//PostMessage(hWnd, WM_CLOSE, 0, 0);
				//GameTitle();
				return FALSE;
				break;
			}
		}
		if( GetAsyncKeyState(VK_ESCAPE) )	//返回
		{
			while( GetAsyncKeyState(VK_ESCAPE) ) {}
			//MainMove();
			//Flip();
			return FALSE;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -