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

CState::CState()
{
}

CState::~CState()
{
}

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

	PhotoWidth=Ini.ReadInt(index, "PhotoWidth");
	PhotoHeight=Ini.ReadInt(index, "PhotoHeight");
	PhotoRect=GetRect(0, 0, PhotoWidth, PhotoHeight);

	Button_Left.LoadIni(filename, "left");
	Button_Left.x+=dialogx;
	Button_Left.y+=dialogy;

	Button_Right.LoadIni(filename, "right");
	Button_Right.x+=dialogx;
	Button_Right.y+=dialogy;

	//魔法窗口
	strFile = Ini.ReadText(index, "MagicWindowFile");
	strIndex = Ini.ReadText(index, "MagicWindowIndex");
	Window_Magic.LoadWindowIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);
	Window_Magic.dialogx+=dialogx;
	Window_Magic.dialogy+=dialogy;
	Window_Magic.dialogx-=32;
	Window_Magic.dialogy-=32;
	Window_Magic.dialogw+=64;
	Window_Magic.dialogh+=64;

	//装备窗口
	strFile = Ini.ReadText(index, "SetupWindowFile");
	strIndex = Ini.ReadText(index, "SetupWindowIndex");
	Window_Setup.LoadWindowIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);
	Window_Setup.dialogx+=dialogx;
	Window_Setup.dialogy+=dialogy;
	Window_Setup.dialogx-=32;
	Window_Setup.dialogy-=32;
	Window_Setup.dialogw+=64;
	Window_Setup.dialogh+=64;
}

//初始化数据
void CState::Init(LPDIRECTDRAWSURFACE surf)
{
	GetGameSurface(surf);		//得到一个游戏画面
	PopWindow(surf, PopWindowStyle, PopWindowStep);		//弹出窗口
}

//显示
void CState::ShowStateWindow(LPDIRECTDRAWSURFACE surf, bool bShowWindow, int left, int top)
{
	int sel_role=CMenu::RoleSel.SelectRole;			//选择的主角

	//头像
	Blt(surf, dialogx+60, dialogy+42, CMenu::RoleSel.PhotoPic[role[sel_role].Id], PhotoRect, true);

	//横线
	Bar(surf, dialogx+32+5, dialogy+102, dialogx+32+dialogw-74, dialogy+103, RGB16(240,211,123));
	Bar(surf, dialogx+32+5, dialogy+103, dialogx+32+dialogw-74, dialogy+104, RGB16(156,119,5));
	Bar(surf, dialogx+32+5, dialogy+330, dialogx+32+dialogw-74, dialogy+331, RGB16(240,211,123));
	Bar(surf, dialogx+32+5, dialogy+331, dialogx+32+dialogw-74, dialogy+332, RGB16(156,119,5));
	//阴影显示
	DWORD c=Font.GetColor();
	Font.SetColor(0);
	dialogx++;
	dialogy++;

	Font.PrintText(surf, dialogx+200, dialogy+42,  "%6s  Lv:%d", role[sel_role].Name, role[sel_role].Propertiy.Level);
	Font.PrintText(surf, dialogx+200, dialogy+61, "HP: %6d/%d", role[sel_role].Propertiy.Hp, role[sel_role].Propertiy.MaxHp );
	Font.PrintText(surf, dialogx+200, dialogy+79, "MP: %6d/%d", role[sel_role].Propertiy.Mp, role[sel_role].Propertiy.MaxMp );
	Font.PrintText(surf, dialogx+50, dialogy+120, "攻击:%8d", role[sel_role].Propertiy.Attack );
	Font.PrintText(surf, dialogx+50, dialogy+145, "防御:%8d", role[sel_role].Propertiy.Defend );
	Font.PrintText(surf, dialogx+50, dialogy+170, "魔法:%8d", role[sel_role].Propertiy.Magic );
	Font.PrintText(surf, dialogx+50, dialogy+220, "耐力:%8d", role[sel_role].Propertiy.Stamina );
	Font.PrintText(surf, dialogx+50, dialogy+245, "幸运:%8d", role[sel_role].Propertiy.Luck );
	Font.PrintText(surf, dialogx+50, dialogy+270, "敏捷:%8d", role[sel_role].Propertiy.Speed );
	Font.PrintText(surf, Window_Setup.dialogx+36, Window_Setup.dialogy+39, "武器:%s", CGoods::GOODS[role[sel_role].Propertiy.Arms].Name );
	Font.PrintText(surf, Window_Setup.dialogx+36, Window_Setup.dialogy+69, "护具:%s", CGoods::GOODS[role[sel_role].Propertiy.Corselet].Name );
	Font.PrintText(surf, dialogx+50, dialogy+340,  "经  验:%6d/%d", role[sel_role].Propertiy.Exp, role[sel_role].Propertiy.MaxExp );

	Font.SetColor(c);
	dialogx--;
	dialogy--;

	Font.PrintText(surf, dialogx+200, dialogy+42,  "<c4>%6s</c>  Lv:<c4>%d</c>", role[sel_role].Name, role[sel_role].Propertiy.Level);
	Font.PrintText(surf, dialogx+200, dialogy+61, "HP: <c4>%6d</c>/<c4>%d</c>", role[sel_role].Propertiy.Hp, role[sel_role].Propertiy.MaxHp );
	Font.PrintText(surf, dialogx+200, dialogy+79, "MP: <c4>%6d</c>/<c4>%d</c>", role[sel_role].Propertiy.Mp, role[sel_role].Propertiy.MaxMp );
	Font.PrintText(surf, dialogx+50, dialogy+120, "攻击:<c4>%8d", role[sel_role].Propertiy.Attack );
	Font.PrintText(surf, dialogx+50, dialogy+145, "防御:<c4>%8d", role[sel_role].Propertiy.Defend );
	Font.PrintText(surf, dialogx+50, dialogy+170, "魔法:<c4>%8d", role[sel_role].Propertiy.Magic );
	Font.PrintText(surf, dialogx+50, dialogy+220, "耐力:<c4>%8d", role[sel_role].Propertiy.Stamina );
	Font.PrintText(surf, dialogx+50, dialogy+245, "幸运:<c4>%8d", role[sel_role].Propertiy.Luck );
	Font.PrintText(surf, dialogx+50, dialogy+270, "敏捷:<c4>%8d", role[sel_role].Propertiy.Speed );
	Font.PrintText(surf, Window_Setup.dialogx+36, Window_Setup.dialogy+39, "武器:<c4>%s</c>", CGoods::GOODS[role[sel_role].Propertiy.Arms].Name );
	Font.PrintText(surf, Window_Setup.dialogx+36, Window_Setup.dialogy+69, "护具:<c4>%s</c>", CGoods::GOODS[role[sel_role].Propertiy.Corselet].Name );
	Font.PrintText(surf, dialogx+50, dialogy+340,  "经  验:<c4>%6d</c>/<c4>%d</c>", role[sel_role].Propertiy.Exp, role[sel_role].Propertiy.MaxExp );
	//显示装备窗口的内容
	Blt(surf, Window_Setup.dialogx+145, Window_Setup.dialogy+34, CGoods::GOODS[role[sel_role].Propertiy.Arms].Pic, CGoods::GoodsRect, true);
	Blt(surf, Window_Setup.dialogx+145, Window_Setup.dialogy+64, CGoods::GOODS[role[sel_role].Propertiy.Corselet].Pic, CGoods::GoodsRect, true);
	//魔法窗口的内容
	for(int i=0;i<role[sel_role].Propertiy.MagicsNum/5+1;i++)
		for(int j=0;j<role[sel_role].Propertiy.MagicsNum%5;j++)
			Blt(surf,Window_Magic.dialogx+36+j*30,Window_Magic.dialogy+39+i*30,
				CMagic::MAGIC[role[sel_role].Propertiy.Magics[i*4+j]].Pic,CMagic::MagicRect,true);
}

//循环
void CState::DoMenu(LPDIRECTDRAWSURFACE surf, bool bShow)
{
	//切换按钮
	if( Button_Right.CheckLoop(surf)==1 || LEFT_DOWN )
	{
		CMenu::Sound_Click.Play();
		CMenu::RoleSel.SelectRole++;
		if( CMenu::RoleSel.SelectRole>=RoleNum )
			CMenu::RoleSel.SelectRole=0;
		CMenu::ReInitMenu();
	}

	if( Button_Left.CheckLoop(surf)==1 || RIGHT_DOWN )
	{
		CMenu::Sound_Click.Play();
		CMenu::RoleSel.SelectRole--;
		if( CMenu::RoleSel.SelectRole<0 )
			CMenu::RoleSel.SelectRole=RoleNum-1;
		CMenu::ReInitMenu();
	}

}