www.gusucode.com > VC++游戏圣剑英雄传2双刃剑源程序+开发文档-源码程序 > VC++游戏圣剑英雄传2双刃剑源程序+开发文档-源码程序\code\source\MENU\Rolesel.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"

CRoleSel::CRoleSel()
{
	SelectRole=0;
	Role = NULL;
	PhotoPic = NULL;
}

CRoleSel::~CRoleSel()
{
	_DELETE_ARRAY( Role );
	_DELETE( PhotoPic );
}

//读取窗口
void CRoleSel::LoadRoleSelIni(char *filename, char *index)
{
	//窗口
	CIniSet Ini(filename);
	char* strFile = Ini.ReadText(index, "RoleSelFile");
	char* strIndex = Ini.ReadText(index, "RoleSelIndex");
	LoadWindowIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);
	dialogx-=32;
	dialogy-=32;
	dialogw+=64;
	dialogh+=64;

	//初始化按钮
	ButtonNum=Ini.ReadInt(index, "ButtonNum");
	Role=new CCButton[ButtonNum];

	for(int i=0; i<ButtonNum; i++)
	{
		strFile = Ini.ReadText(index, i*2);
		strIndex = Ini.ReadData(index,i*2);
		Role[i].LoadIni(strFile, strIndex);
		_FREE(strFile);
		_FREE(strIndex);
		Role[i].x=dialogx+45;
		Role[i].y=dialogy+45+70*i;
	}

	//初始化头像
	char *name;
	PhotoPic=new LPDIRECTDRAWSURFACE[ButtonNum];
	for(i=0; i<ButtonNum; i++)
	{
		name=Ini.ReadText(index, i*2+1);
		CreateBitmap(PhotoPic[i], 0,0, name);
		DDSetColorKey(PhotoPic[i], ColorKey);
		_FREE(name);
	}
}

//初始化显示
void CRoleSel::Init(LPDIRECTDRAWSURFACE surf, bool bShowWindow)
{
	ShowWindow(surf, bShowWindow);
}

//显示
void CRoleSel::ShowRoleSelWindow(LPDIRECTDRAWSURFACE surf, bool bShowWindow, int left, int top)
{
	for(int i=0; i<RoleNum; i++)
	{
		if( i==SelectRole )
			Role[role[i].Id].CheckLoop(surf, 2);
		else
			Role[role[i].Id].CheckLoop(surf);
	}
}

//菜单循环
int CRoleSel::DoMenu(LPDIRECTDRAWSURFACE& surf, bool bShowWindow)
{
	int Sel=0;

	//初始化窗口和头像位置
	dialogh=64+45+70*(RoleNum);
	dialogy=(ScreenHeight-dialogh)/2;
	for(int i=0; i<RoleNum; i++)
	{
		Role[role[i].Id].x=dialogx+45;
		Role[role[i].Id].y=dialogy+32+45+70*i;
	}

	ShowWindow(lpDDSBackGround, bShowWindow);
	
	//菜单循环
	MSG msg;
	while(bActive)
	{
		if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
		{
            if (!GetMessage(&msg, NULL, 0, 0)) return -1;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
		}
		else if(bActive)
		{
			//获取输入信息
			GetInputData();

			Blt(surf, 0, 0, lpDDSBackGround, RectScreen, false);
			
			//横线
			Bar(surf, dialogx+32+5, dialogy+64, dialogx+32+dialogw-74, dialogy+65, RGB16(240,211,123));
			Bar(surf, dialogx+32+5, dialogy+65, dialogx+32+dialogw-74, dialogy+66, RGB16(156,119,5));

			Font.SetColor(RGB(255,255,255));
			Font.PrintText(surf, dialogx+40, dialogy+40,  "请选择使用对象:");
			dialogy+=32;
			for(int i=0; i<RoleNum; i++)
			{
				if( Sel != i )
				{
					Font.SetColor(RGB(127,127,127));
					Font.PrintText(surf, dialogx+120, dialogy+42+70*i,  "%6s  Lv:%d", role[i].Name, role[i].Propertiy.Level);
					Font.PrintText(surf, dialogx+120, dialogy+61+70*i, "HP: %6d/%d", role[i].Propertiy.Hp, role[i].Propertiy.MaxHp );
					Font.PrintText(surf, dialogx+120, dialogy+79+70*i, "MP: %6d/%d", role[i].Propertiy.Mp, role[i].Propertiy.MaxMp );
				}
				else
				{
					Font.SetColor(RGB(255,255,255));
					Font.PrintText(surf, dialogx+120, dialogy+42+70*i,  "<c4>%6s</c>  Lv:<c4>%d</c>", role[i].Name, role[i].Propertiy.Level);
					Font.PrintText(surf, dialogx+120, dialogy+61+70*i, "HP: <c4>%6d</c>/<c4>%d</c>", role[i].Propertiy.Hp, role[i].Propertiy.MaxHp );
					Font.PrintText(surf, dialogx+120, dialogy+79+70*i, "MP: <c4>%6d</c>/<c4>%d</c>", role[i].Propertiy.Mp, role[i].Propertiy.MaxMp );
				}
			}
			dialogy-=32;

			//人物选择
			for(i=0; i<RoleNum; i++)
			{
				int temp = Role[role[i].Id].CheckLoop(surf, -1);
				if(temp==1)
				{
					SelectRole=i;
					mouse=key=0;
					return i;
				}
				if(temp==2)
				{
					Sel = i;
				}
			}
			
			ShowMouseCursor(surf,false);
			//显示FPS
			if( bShowFps)
			{
				nFrames++;
				font.PrintText(lpDDSBack, 20, 460, "FPS:%d", CountSpeed());
			}
			_UpdateScreen();

			if( DOWN_DOWN )		//下一个
			{
				Sel++;
				if( Sel>=RoleNum ) Sel=0;
			}
			if( UP_DOWN )			//上一个
			{
				Sel--;
				if( Sel<0 ) Sel=RoleNum-1;
			}
			if( A_UP )	//确定返回
			{
				CMenu::Sound_Click.Play();
				SelectRole=Sel;
				mouse=key=0;
				return Sel;
			}

			if( B_UP || mouse == RB_UP )//取消返回
			{
				CMenu::Sound_Cancel.Play();
				if( g_eDisplayState == DS_NIGHT )
					Clrscr(lpDDSPrimary);
				return -1;
			}
		}
		else WaitMessage();	//等待消息
	}
	return -1;
}