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

📄 header.cpp

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

void ShowMenu(int x, int y, int MenuIt, char *MainMenu[], int Num, DWORD FontColor=RGB(0,0,0), DWORD BackColor=RGB(255,255,0));
void InitGameData();

//****************
//游戏字幕
void GameHeader(char *chr, DWORD color=RGB(255,255,255))
{
	char tmp[1000];

	PressKey(VK_RETURN,1);

	for(unsigned int i=0; i<strlen(chr); i++)
	{
		memset(tmp, 0, 1000);
		memcpy(tmp, chr, i);
		PrintText(lpDDSPrimary, 40,100,tmp, color);
		Delay(80);
		if( GetAsyncKeyState(VK_RETURN) ) return;
	}
		PressKey(VK_RETURN);
}

//*******************************************
//游戏片头
void GameTitle()
{
	int MenuIt=0;
	int flag=1;
	int x=16,y=380;
	char *MainMenu[]={"新游戏","读进度","退 出"};

	//读取地图数据
	if( !LoadMaps() )
	{
		MessageBox(GetActiveWindow(), "地图文件出错","error",MB_OK);
		FreeDDraw();
		return ;
	}
	
	//读取NPC数据
	LoadNpcData(0);	
	
	//初始化游戏数据
	InitGameData();

	//显示片头
	PressKey(VK_RETURN,1);
	if( SoundAble==TRUE )
	{
		char buf[256];
		mciSendString("close all", buf, sizeof(buf), NULL);
		mciSendString("open voc\\title.mid",buf,sizeof(buf),NULL);
		mciSendString("play voc\\title.mid", buf, sizeof(buf), NULL);
	}

	Clrscr();
	lpDDPal->SetEntries(0,0,256,TitlePal);
	DDReLoadBitmap(lpDDSBackGround,"pic\\title.bmp");

	lpDDPal->SetEntries(0,0,256,NullPal);
	rect=GetRect(0,0,ScreenX,ScreenY);
	Blt(lpDDSPrimary, 0,0, lpDDSBackGround, rect, FALSE);
	ChangePalette(NullPal, TitlePal, 1);	//淡出

	ShowMenu(x, y, MenuIt, MainMenu, 3, RGB(255,255,255));
	while(flag)
	{
		if( GetAsyncKeyState(VK_DOWN) )	//下一项
		{
			PressKey(VK_DOWN,1);
			MenuIt=(MenuIt+1)%3;
			ShowMenu(x, y, MenuIt, MainMenu, 3, RGB(255,255,255));
		}
		if( GetAsyncKeyState(VK_UP) )	//上一项
		{
			PressKey(VK_UP,1);
			if( MenuIt==0 ) MenuIt=2;
			else MenuIt--;
			ShowMenu(x, y, MenuIt, MainMenu, 3, RGB(255,255,255));
		}
		if( GetAsyncKeyState(VK_RETURN) )	//确定
		{
			while( GetAsyncKeyState(VK_RETURN) ) {}
			switch( MenuIt )
			{
			case 0:	//新游戏
				flag=0;
				break;
			case 1: //读进度
				if( LoadGame()==TRUE )
				{
					ChangePalette(TitlePal, NullPal, -1);
					MainMove();
					Flip();
					ChangePalette(NullPal, MainPal, 1);
					if( SoundAble==TRUE )
					{
						char buf[256];
						mciSendString("close all", buf, sizeof(buf), NULL);
						mciSendString("open voc\\back.mid",buf,sizeof(buf),NULL);
						mciSendString("play voc\\back.mid", buf, sizeof(buf), NULL);
					}
					return;
				}
				else //取消
				{
					DDReLoadBitmap(lpDDSBackGround,"pic\\title.bmp");
					ShowMenu(x, y, MenuIt, MainMenu, 3, RGB(255,255,255));
				}
				break;
			case 2: //退出
				ChangePalette(TitlePal,NullPal,-1);
				PostMessage(hWnd, WM_CLOSE, 0, 0);
				return;
				break;
			}
		}
	}

	ChangePalette(TitlePal, NullPal, -1);	//淡入
	Clrscr();	//清屏
	ChangePalette(NullPal, MainPal, 1);		//淡出
	
	GameHeader( GetTalk(99001,0) ); //游戏片头
	
	ChangePalette(MainPal, NullPal, -1);
	MainMove(); //生成地图
	Flip();
	ChangePalette(NullPal, MainPal, 1);

	PressKey(VK_RETURN,1);
	PressKey(VK_CONTROL,1);

	if( SoundAble==TRUE )
	{
		char buf[256];
		mciSendString("close all", buf, sizeof(buf), NULL);
		mciSendString("open voc\\back.mid",buf,sizeof(buf),NULL);
		mciSendString("play voc\\back.mid", buf, sizeof(buf), NULL);
	}
	
	ShowDialog(0, 10000, 0); //自言自语
}

//显示菜单(X,Y,当前项,菜单数组,数组的长度,字色,背景色)
void ShowMenu(int x, int y, int MenuIt, char *MainMenu[], int Num, DWORD FontColor, DWORD BackColor)
{
	
	Blt(lpDDSBack, 0,0, lpDDSBackGround, GetRect(0,0,ScreenX,ScreenY), FALSE);

	for( int i=0; i<Num; i++ )
	{
		DWORD T1=0,T2=0;
		if( MenuIt == i )
		{
			T1=OPAQUE;
			T2=BackColor;
		}
		//PrintText(lpDDSBack, x+2, y+12+i*24, MainMenu[i], RGB(0,0,0), T1, T2);
		PrintText(lpDDSBack, x, y+10+i*24, MainMenu[i],FontColor, T1, T2);
	}
	Flip();
}

//初始化游戏数据
void InitGameData()
{
     Scene=0;		//所处场景标志
     SX=0;
	 SY=0;			//所处场景的左上坐标
     old_SX=0; 
	 old_SY=0;
     DX=0; 
	 DY=0;			 //生成场景时的左上坐标
     old_DX=0;
	 old_DY=0;

	 Flag_OutCity=0;		//出城的标志
	 Flag_GotoPalace=0;		//进魔宫的标志

Role  Temp={999,
			999,
			0,
			0,
			1,
			1,
			"小飞刀",
			32,48,
			180,164,
			180,164,
			0,
			0,
			1,
			0,
			50,
			50,
			10,
			10,
			8,
			"                ",
			50,
			lpDDSSpirit};

Hero=Temp;
}

⌨️ 快捷键说明

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