www.gusucode.com > VC++游戏圣剑英雄传2双刃剑源程序+开发文档-源码程序 > VC++游戏圣剑英雄传2双刃剑源程序+开发文档-源码程序\code\source\MENU\Menu.cpp

    //Download by http://www.NewXing.com
//********************************************
//	菜单 相关函数
//  创建于2000年7月09日
//********************************************
#include "..\gamelib\goldpoint2.h"
#include "..\interface\interface2.h"
#include "..\main.h"
#include "..\map.h"
#include "..\role.h"
#include "menu_inc.h"

int CMenu::SelectItem=0;			//当前处的菜单项
bool CMenu::bMenuRun=true;
CMenuTop CMenu::MenuTop;			//顶级菜单
CRoleSel CMenu::RoleSel;			//人物
CState CMenu::State;				//属性
CGoods CMenu::Goods;				//物品项
CArm CMenu::Arm;					//装备
CMagic CMenu::Magic;				//魔法
CSystem CMenu::System;				//系统
CLoadSave CMenu::LoadSave;			//进度
CHelp CMenu::Help;					//关于

CSound CMenu::Sound_TileClick;		//开头的音效
CSound CMenu::Sound_HighLight;		//鼠标划过
CSound CMenu::Sound_Click;			//音效
CSound CMenu::Sound_Change;			//切换
CSound CMenu::Sound_Pop;			//菜单弹出
CSound CMenu::Sound_Cancel;			//菜单取消

CMenu::CMenu()
{
}

CMenu::~CMenu()
{
}

//读取
void CMenu::LoadMenuIni(char *filename, char *index)
{
	char* strFile, *strIndex;
	CIniSet Ini(filename);

	//人物
	strFile = Ini.ReadText(index, "RoleSelFile");
	strIndex = Ini.ReadText(index, "RoleSelIndex");
	RoleSel.LoadRoleSelIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);

	//顶极菜单
	strFile = Ini.ReadText(index, "MenuTopFile");
	strIndex = Ini.ReadText(index, "MenuTopIndex");
	MenuTop.LoadMenuTopIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);

	//属性
	strFile = Ini.ReadText(index, "StateFile");
	strIndex = Ini.ReadText(index, "StateIndex");
	State.LoadStateIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);

	//物品
	strFile = Ini.ReadText(index, "GoodsFile");
	strIndex = Ini.ReadText(index, "GoodsIndex");
	Goods.LoadWindowIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);

	//魔法
	strFile = Ini.ReadText(index, "MagicFile");
	strIndex = Ini.ReadText(index, "MagicIndex");
	Magic.LoadWindowIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);

	//装备
	strFile = Ini.ReadText(index, "ArmFile");
	strIndex = Ini.ReadText(index, "ArmIndex");
	Arm.LoadArmIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);

	//系统
	strFile = Ini.ReadText(index, "SystemFile");
	strIndex = Ini.ReadText(index, "SystemIndex");
	System.LoadSystemIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);

	//进度
	strFile = Ini.ReadText(index, "LoadSaveFile");
	strIndex = Ini.ReadText(index, "LoadSaveIndex");
	LoadSave.LoadWindowIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);

	//关于
	strFile = Ini.ReadText(index, "HelpFile");
	strIndex = Ini.ReadText(index, "HelpIndex");
	Help.LoadHelpIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);

	//读入音效
	Sound_TileClick.LoadSoundFX(hWnd, "Sound\\tileclick.wav");	//开头
	Sound_HighLight.LoadSoundFX(hWnd, "Sound\\high.wav");	//鼠标划过
	Sound_Click.LoadSoundFX(hWnd, "Sound\\click.wav");		//按键
	Sound_Change.LoadSoundFX(hWnd, "Sound\\change.wav");	//切换
	Sound_Pop.LoadSoundFX(hWnd, "Sound\\pop.wav");;			//菜单弹出
	Sound_Cancel.LoadSoundFX(hWnd, "Sound\\cancel.wav");	//菜单取消	
}

//------------------------------------

//菜单初始化
void CMenu::InitMenu()
{
	RoleSel.ButtonNum=RoleNum;
	bMenuRun=true;

	//初始化
	switch( SelectItem )
	{
	case 0:
		State.Init(lpDDSBack);			//弹出窗口
		State.Window_Magic.ShowWindow(lpDDSBack);		//魔法
		State.Window_Setup.ShowWindow(lpDDSBack);		//装备
		State.ShowStateWindow(lpDDSBack);				//状态
		break;

	case 1:
		Goods.Init(lpDDSBack);
		Goods.AboutWindow.ShowWindow(lpDDSBack, false);
		Goods.ScrollBar.CountNewRect();
		break;

	case 2:
		Arm.Init(lpDDSBack);
		Arm.Window_Setup.ShowWindow(lpDDSBack);
		Arm.ArmList.ShowWindow(lpDDSBack);
		Arm.ShowArmWindow(lpDDSBack);
		break;
	case 3:
		Magic.Init(lpDDSBack);
		Magic.AboutWindow.ShowWindow(lpDDSBack,false);
		Magic.ScrollBar.CountNewRect();
		break;
	}
	//保存到lpDDSBackGround
	Blt(lpDDSBackGround, 0, 0, lpDDSBack, RectScreen, false);
}

//重置菜单
void CMenu::ReInitMenu()
{
	RoleSel.ButtonNum=RoleNum;
	bMenuRun=true;
	//得到一个游戏画面
	GetGameSurface(lpDDSBack);

	//初始化
	switch( SelectItem )
	{
	case 0:		//状态
		State.ShowWindow(lpDDSBack);
		State.Window_Magic.ShowWindow(lpDDSBack);
		State.Window_Setup.ShowWindow(lpDDSBack);
		State.ShowStateWindow(lpDDSBack);
		break;

	case 1:		//物品
		Goods.ShowWindow(lpDDSBack);
		Goods.AboutWindow.ShowWindow(lpDDSBack);
		Goods.ScrollBar.MinNum=0;
		Goods.ScrollBar.MaxNum=role[0].Propertiy.CurGoodsNum;
		Goods.ScrollBar.CountNewRect();
		break;

	case 2:		//装备
		Arm.ShowWindow(lpDDSBack);
		Arm.Window_Setup.ShowWindow(lpDDSBack);
		Arm.ArmList.ScrollBar.MinNum=0;
		Arm.ArmList.ScrollBar.MaxNum=role[0].Propertiy.CurArmNum;
		Arm.ArmList.ScrollBar.CountNewRect();
		Arm.ArmList.ShowWindow(lpDDSBack);
		Arm.ShowArmWindow(lpDDSBack);
		break;

	case 3:		//魔法
		Magic.ShowWindow(lpDDSBack);
		Magic.AboutWindow.ShowWindow(lpDDSBack);
		Magic.ScrollBar.MinNum=0;
		Magic.ScrollBar.MaxNum=role[0].Propertiy.MagicsNum;
		Magic.ScrollBar.CountNewRect();
		break;

	case 4:		//系统
		System.ShowWindow(lpDDSBack);
		break;

	case 5:		//关于
		Help.ShowWindow(lpDDSBack);
		Help.ShowHelpWindow(lpDDSBack);
		break;
	}

	MenuTop.ShowMenuTop(lpDDSBack);		//显示顶层菜单
	//保存
	Blt(lpDDSBackGround, 0, 0, lpDDSBack, RectScreen, false);
}

//菜单循环
void CMenu::DoMenuLoop()
{
	Goods.ScrollBar.MinNum=0;
	Goods.ScrollBar.MaxNum=role[0].Propertiy.CurGoodsNum;
	Magic.ScrollBar.MinNum=0;
	Magic.ScrollBar.MaxNum=role[0].Propertiy.MagicsNum;
	CMenu::Sound_Pop.Play();

	InitMenu();

	//菜单循环
	MSG msg;
	while(bMenuRun)
	{
		if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
		{
            if (!GetMessage(&msg, NULL, 0, 0)) return;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
		}
		else if(bActive)
		{
			//获取输入信息
			GetInputData();
			
			if( B_UP || mouse == RB_UP ) 
			{
				CMenu::Sound_Cancel.Play();
				if( g_eDisplayState == DS_NIGHT )
					Clrscr(lpDDSPrimary);
				SelectItem=0;
				return;
			}
			
			//恢复画面
			Blt(lpDDSBack, 0, 0, lpDDSBackGround, RectScreen, false);
			//显示顶层菜单
			MenuTop.DoMenu(lpDDSBack, false);

			switch( SelectItem )
			{
			case 0:		//状态
				State.DoMenu(lpDDSBack, false);
				break;

			case 1:		//装备
				Goods.DoMenu(lpDDSBack, false);
				break;

			case 2:		//装备
				Arm.DoMenu(lpDDSBack, false);
				break;
			case 3:		//魔法
				Magic.DoMenu(lpDDSBack,false);
				break;
			case 4:		//系统
				switch( System.DoMenu(lpDDSBack, false) )
				{
				case 1:		//load
					SelectItem=0;
					FadeIn(2);
					map.ShowMap();

					if( CMusic::bPlay )	//背景音乐
					{
						Music.Resume();
					}
					return;
					
				case 2:		//save
					break;

				case 3:		//退出游戏
					ColorIn(100, RGB16(0,0,0));
					Title.DoMenu(lpDDSBack);
					SelectItem=0;
					return;
				}
				break;

				case 5:		//关于
					Help.DoMenu(lpDDSBack, false);
					break;
			}

			ShowMouseCursor(lpDDSBack, false);
			if( bShowFps)
			{
				nFrames++;
				font.PrintText(lpDDSBack, 20, 460, "FPS:%d", CountSpeed());
			}
			_UpdateScreen();
		}
		else WaitMessage();	//等待消息
	}

	if( g_eDisplayState == DS_NIGHT )
		Clrscr(lpDDSPrimary);
}