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

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

CFightGoods::CFightGoods()
{
	Select=-1;		//当前选择,-1:没有选择。
}

CFightGoods::~CFightGoods()
{
}

//读取窗口
void CFightGoods::LoadWindowIni(char *filename, char *index)
{
	LoadListWindowIni(filename, index);	//初始化列表窗口

	//物品介绍窗口
	CIniSet Ini(filename);
	char* strFile = Ini.ReadText(index, "AboutWindowFile");
	char* strIndex = Ini.ReadText(index, "AboutWindowIndex");
	AboutWindow.LoadWindowIni(strFile, strIndex);
	_FREE(strFile);
	_FREE(strIndex);
	AboutWindow.dialogx-=32;
	AboutWindow.dialogy-=32;
	AboutWindow.dialogw+=64;
	AboutWindow.dialogh+=64;
}

//显示物品列表框
//return 1:想要使用一个物品,2:取消,0:其他
int CFightGoods::ShowGoodsListWindow(LPDIRECTDRAWSURFACE surf, bool bShowWindow, int left, int top)
{
	int n;
	static int MouseY=-1;
	ShowListWindow(surf, bShowWindow, left, top);	//显示列表窗口

	//鼠标移动选择
	if( MouseY != point.y )
	{
		MouseY=point.y;
		if( point.x > x && point.x < x+Width-ScrollBar.Width &&
			point.y > y && point.y < y+Height )
		{
			Select=(point.y-y)/LineHeight + ScrollBar.CurNum;	//得到当前选择的元素
			if( Select >= role[0].Propertiy.CurGoodsNum ) 
				Select=role[0].Propertiy.CurGoodsNum-1;			//超出,处理成最后一个
		}
	}

	//显示个数
	int shownum=(ScrollBar.PageNum<role[0].Propertiy.CurGoodsNum)?
			ScrollBar.PageNum:role[0].Propertiy.CurGoodsNum;

	for(int i=0; i<shownum; i++)
	{		
		n=ScrollBar.CurNum+i;
		//高亮显示
		if( n==Select )
		{
			//留出部分画滚动条
			if( ScrollBar.PageNum < ScrollBar.MaxNum-ScrollBar.MinNum )
				Bar(surf, x, y+LineHeight*i+2, x+Width-ScrollBar.Width, 
							y+LineHeight*(i+1)-2, SelectColor);
			else
				Bar(surf, x, y+LineHeight*i+2, x+Width-1, y+LineHeight*(i+1)-2, 
							SelectColor);
		}
		//画物品的示意图
		Blt(surf, x, y+LineHeight*i, CGoods::GOODS[role[0].Propertiy.Goods[n]].Pic, 
			GetRect(0, 0, CGoods::PicWidth, LineHeight), true);

		//阴影显示文字
		DWORD c=Font.GetColor();
		Font.SetColor(0);
		Font.PrintText(surf, x+Column[1].x+1, y+4+LineHeight*i+1, CGoods::GOODS[role[0].Propertiy.Goods[n]].Name);
		Font.PrintText(surf, x+Column[3].x+1, y+4+LineHeight*i+1, "%5d", role[0].Propertiy.GoodsNum[n]);
		Font.SetColor(c);
		Font.PrintText(surf, x+Column[1].x, y+4+LineHeight*i, CGoods::GOODS[role[0].Propertiy.Goods[n]].Name);
		Font.PrintText(surf, x+Column[3].x, y+4+LineHeight*i, "%5d", role[0].Propertiy.GoodsNum[n]);
	}

	//选择
	if( mouse == LB_UP )
	{
		if( point.x > x && point.x < x+Width-ScrollBar.Width &&
			point.y > y && point.y < y+Height )
		{
			//点鼠标的时候的选择
			int sel=(point.y-y)/LineHeight + ScrollBar.CurNum;
			if( sel == Select )	//使用
			{
				number = role[0].Propertiy.Goods[sel];
				Select =-1;
				return 1;
			}
		}
	}
	if(mouse == RB_UP||	B_UP)
	{
		Select =-1;
		return 2;
	}

	//使用
	if(	A_UP )
	{
		if( role[0].Propertiy.CurGoodsNum > 0 &&Select!=-1)
		{
			CMenu::Sound_Click.Play();
			number = role[0].Propertiy.Goods[Select];
			Select = -1;
			return 1;
		}
	}
	
	//下一个
	
	if( DOWN_DOWN && Select < ScrollBar.MaxNum-1 )
	{
		CMenu::Sound_Change.Play();
		Select++;
		if( Select >= ScrollBar.CurNum + ScrollBar.PageNum )
		{
			Select = ScrollBar.CurNum+1;
			ScrollBar.SetCurNum(Select);
		}

		if( Select >= ScrollBar.MinNum + role[0].Propertiy.CurGoodsNum )
		{
			Select = ScrollBar.MinNum;
			ScrollBar.SetCurNum(Select);
		}
	}

	//上一个
	if( UP_DOWN && Select > 0 )
	{
		CMenu::Sound_Change.Play();
		Select--;
		if( Select < ScrollBar.CurNum )
			ScrollBar.SetCurNum(ScrollBar.CurNum-1);
	}
	return 0;
}

//显示物品说明
void CFightGoods::ShowAboutWindow(LPDIRECTDRAWSURFACE surf, bool bShowWindow)
{
	AboutWindow.ShowWindow(surf, bShowWindow);//显示about窗口
	//显示说明文字
	if(Select>-1)
		Font.PrintText(surf, AboutWindow.dialogx+34, AboutWindow.dialogy+34, CGoods::GOODS[role[0].Propertiy.Goods[Select]].About);
}

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

//初始化数据
void CFightGoods::Init(LPDIRECTDRAWSURFACE surf)
{
	ScrollBar.MinNum=0;
	ScrollBar.MaxNum=role[0].Propertiy.CurGoodsNum;

	GetGameSurface(lpDDSBackGround);
	FillSurface(lpDDSBack, RGB16(0));
	ABlt(lpDDSBackGround, 0,0, lpDDSBack, RectScreen, 0, 24);
	PopWindow(surf, PopWindowStyle, PopWindowStep);
	AboutWindow.ShowWindow(surf);
}

//菜单循环
int CFightGoods::DoMenu(LPDIRECTDRAWSURFACE surf, bool bShow)
{
	ShowAboutWindow(lpDDSBack, bShow);
	return ShowGoodsListWindow(lpDDSBack, bShow);
}

//使用物品的结果
int CFightGoods::GoodEffect(int GoodNum, stRolePropertiy * Propertiy,int rolesel)
{
	if( CGoods::GOODS[GoodNum].Class==GC_GOODS )//类型,能够使用
	{
		Propertiy->Exp+=CGoods::GOODS[GoodNum].Exp;			//经验

		Propertiy->MaxHp+=CGoods::GOODS[GoodNum].MaxHp;		//生命最大值
		Propertiy->Hp+=CGoods::GOODS[GoodNum].Hp;			//生命
		if( Propertiy->Hp > Propertiy->MaxHp )
			Propertiy->Hp = Propertiy->MaxHp;

		Propertiy->MaxMp+=CGoods::GOODS[GoodNum].MaxMp;		//魔法最大值
		Propertiy->Mp+=CGoods::GOODS[GoodNum].Mp;			//魔法
		if( Propertiy->Mp > Propertiy->MaxMp )
			Propertiy->Mp = Propertiy->MaxMp;		

		role[rolesel].oldAttack+= CGoods::GOODS[GoodNum].Attack;		//攻击
		role[rolesel].oldAttack = (int)role[rolesel].oldAttack*(100.0+CGoods::GOODS[GoodNum].AttackPer)/100.0f;

		role[rolesel].oldDefend+= CGoods::GOODS[GoodNum].Defend;		//防御
		role[rolesel].oldDefend = (int)role[rolesel].oldDefend*(100.0+CGoods::GOODS[GoodNum].DefendPer)/100.0f;

		role[rolesel].ReCalcPro();

		Propertiy->Magic+=CGoods::GOODS[GoodNum].Magic;		//魔法

		Propertiy->Stamina+=CGoods::GOODS[GoodNum].Stamina;	//耐力
		Propertiy->Luck+=CGoods::GOODS[GoodNum].Luck;		//幸运
		Propertiy->Speed+=CGoods::GOODS[GoodNum].Speed;		//敏捷
		Propertiy->Bp+=CGoods::GOODS[GoodNum].Bp;			//体力
		Propertiy->Ip+=CGoods::GOODS[GoodNum].Ip;			//精神
		role[0].DelObject(CGoods::GOODS[GoodNum].Name, 1);	//删除该物品一个
	}
	return 1;
}
//该物品能不能使用
bool CFightGoods::IsCanUse(int GoodNum)
{
	//检察数目,小于等于0就不能用
	if(role[0].CheckObject(CGoods::GOODS[GoodNum].Name) <= 0)
		return false;

	return true;
}
//得到物品的编号
int CFightGoods::GetGoodsID()
{
	return number;
}
//得到一页的物品种数
int CFightGoods::GetGoodsNumber(void)
{
	return (ScrollBar.PageNum<role[0].Propertiy.CurGoodsNum)?ScrollBar.PageNum:role[0].Propertiy.CurGoodsNum;
}