www.gusucode.com > VC++游戏圣剑英雄传2双刃剑源程序+开发文档-源码程序 > VC++游戏圣剑英雄传2双刃剑源程序+开发文档-源码程序\code\source\FIGHT\FightMagic.cpp
//Download by http://www.NewXing.com //-------------------------------------------------------------------- // 战斗魔法 相关函数 // 创建于2002年4月25日 //-------------------------------------------------------------------- #include "..\gamelib\goldpoint2.h" #include "..\interface\interface2.h" #include "..\main.h" #include "..\map.h" #include "..\role.h" #include "..\menu\menu_inc.h" #include "FightMagic.h" CFightMagic::CFightMagic() { Select =-1; } CFightMagic::~CFightMagic() { } // 初始化窗口 void CFightMagic::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; } // 显示魔法列表 int CFightMagic::ShowMagicListWindow(LPDIRECTDRAWSURFACE surf, bool bShowWindow,int rol_sel, 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[rol_sel].Propertiy.MagicsNum ) Select=role[rol_sel].Propertiy.MagicsNum-1; //超出,处理成最后一个 } } //显示个数 int shownum=(ScrollBar.PageNum<role[rol_sel].Propertiy.MagicsNum)? ScrollBar.PageNum:role[rol_sel].Propertiy.MagicsNum; 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, CMagic::MAGIC[role[rol_sel].Propertiy.Magics[n]].Pic, GetRect(0, 0, CMagic::PicWidth, LineHeight), true); //阴影显示文字 DWORD c=Font.GetColor(); Font.SetColor(0); Font.PrintText(surf, x+Column[1].x+1, y+4+LineHeight*i+1, CMagic::MAGIC[role[rol_sel].Propertiy.Magics[n]].Name); Font.SetColor(c); Font.PrintText(surf, x+Column[1].x, y+4+LineHeight*i, CMagic::MAGIC[role[rol_sel].Propertiy.Magics[n]].Name); } //选择 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[rol_sel].Propertiy.Magics[sel]; Select =-1; return 1; } } } // 取消 if(mouse == RB_UP|| B_UP) { Select =-1; return 2; } //使用 if( A_UP ) { if( role[rol_sel].Propertiy.MagicsNum > 0 &&Select!=-1) { CMenu::Sound_Click.Play(); number = role[rol_sel].Propertiy.Magics[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.MagicsNum ) { 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; } // about窗口 void CFightMagic::ShowAboutWindow(LPDIRECTDRAWSURFACE surf, bool bShowWindow,int rol_sel) { AboutWindow.ShowWindow(surf, bShowWindow);//显示about窗口 //显示说明文字 if(Select>-1) Font.PrintText(surf, AboutWindow.dialogx+34, AboutWindow.dialogy+34, CMagic::MAGIC[role[rol_sel].Propertiy.Magics[Select]].About); } // 初始化 void CFightMagic::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 CFightMagic::DoMenu(LPDIRECTDRAWSURFACE surf, bool bShow,int rol_sel) { ShowAboutWindow(lpDDSBack, bShow,rol_sel); return ShowMagicListWindow(lpDDSBack, bShow,rol_sel); } // 能否用这个魔法 bool CFightMagic::IsCanUse(int n,int rol_sel) { //检查消耗魔法值和人物魔法值 return CMagic::MAGIC[n].Mp <=role[rol_sel].Propertiy.Mp; } // 得到魔法的id int CFightMagic::GetMagicID() { return number; } // 魔法效果 int CFightMagic::MagicEffect(int Num, stRolePropertiy * Propertiy,stRolePropertiy * Propertiy2) { //类型要是对自己使用的,然后魔法值要足够 if( CMagic::MAGIC[Num].Class==MC_SELF&&CMagic::MAGIC[Num].Mp<=Propertiy->Mp) { Propertiy2->MaxHp+=CMagic::MAGIC[Num].MaxHp; //生命最大值 Propertiy2->Hp+=CMagic::MAGIC[Num].Hp; //生命 if( Propertiy2->Hp > Propertiy2->MaxHp ) Propertiy2->Hp = Propertiy2->MaxHp; Propertiy2->Attack+=CMagic::MAGIC[Num].Attack; //攻击 Propertiy2->Defend+=CMagic::MAGIC[Num].Defend; //防御 Propertiy2->Magic+=CMagic::MAGIC[Num].Magic; //魔力 Propertiy2->Stamina+=CMagic::MAGIC[Num].Stamina; //耐力 Propertiy2->Luck+=CMagic::MAGIC[Num].Luck; //幸运 Propertiy2->Speed+=CMagic::MAGIC[Num].Speed; //敏捷 Propertiy2->Bp+=CMagic::MAGIC[Num].Bp; //体力 Propertiy2->Ip+=CMagic::MAGIC[Num].Ip; //精神 Propertiy->Mp-=CMagic::MAGIC[Num].Mp; return 1; } return 0; }