1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Yongi-RPG

Клонировать/Скачать
Bag.cpp 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
永义 Отправлено 01.11.2018 04:20 0c4db85
#include "stdafx.h"
#include "Bag.h"
CBag::CBag()
{
m_iNowItem = 0;
m_bExit = true;
//m_VecBagDatas= CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag();
}
CBag::~CBag()
{
}
void CBag::UpData()
{
//进入背包列表
if (m_bExit)
{
if (KEY_DOWN(VK_ESCAPE))
{
CGameMgr::GetInstance()->RestoreWnd();
}
else if (KEY_DOWN(VK_DOWN))
{
m_iNowItem++;
}
else if (KEY_DOWN(VK_UP))
{
m_iNowItem--;
}
else if (KEY_DOWN(VK_RETURN))
{
//按回车进入确认框
m_bExit = false;
m_iConfirm = 0;
}
//列表上下光标移动
if (CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag().size() - 1 < m_iNowItem)
{
m_iNowItem = 0;
}
else if (0 > m_iNowItem)
{
m_iNowItem = CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag().size() - 1;
}
}
//按回车进入确认框
else
{
if (KEY_DOWN(VK_ESCAPE))
{
//返回上一级
m_bExit = true;
}
else if (KEY_DOWN(VK_RIGHT))
{
m_iConfirm++;
if (1 < m_iConfirm)
{
m_iConfirm = 0;
}
}
else if (KEY_DOWN(VK_LEFT))
{
m_iConfirm--;
if (0 > m_iConfirm)
{
m_iConfirm = 1;
}
}
else if (KEY_DOWN(VK_RETURN))
{
//确认操作
if (0 == m_iConfirm)
{
//背包不为空进行操作,这里如果不从游戏管理者拿玩家数据=》拿背包数据就什么都没有,
if (!CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag().empty())
{
sItemDt* Item = CDataMgr::GetDataMgr()->GetItemDtMgr()->GetDataByID(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iId);
//使用一次性消耗品
if (E_ITEM_CONSUMABLES == CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iType)
{
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetNowHp(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iHp);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetNowMp(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iMp);
if (CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetNowHp() > CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetHp())
{
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetNowHp(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetHp() - CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetNowHp());
}
if (CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetNowMp() > CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetMp())
{
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetNowMp(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetMp());
}
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iNum--;
DelNull();
cout << "使用成功";
}
//装备武器
else if (E_ITEM_WEAPONS == CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iType)
{
//装备武器
//判断之前有没有武器,有就卸下之前的武器
ChangeEquip(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetWeapons());
//将武器装备
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetWeapons(Item);
//数据更新
PlayerUpData();
}
//装备防具
else if (E_ITEM_ARMOR == CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iType)
{
ChangeEquip(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetArmor());
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetArmor(Item);
PlayerUpData();
}
//装备首饰
else if (E_ITEM_JEWELRY == CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iType)
{
ChangeEquip(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetJewelry());
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetJewelry(Item);
PlayerUpData();
}
//装备特殊装备
else if (E_ITEM_SPECIAL == CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iType)
{
ChangeEquip(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetSpecial());
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetSpecial(Item);
PlayerUpData();
}
//使用永久消耗品
else if (E_ITEM_NONE == CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iType)
{
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetHp(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iHp);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetMp(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iMp);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetNowHp(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iHp);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetNowMp(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iMp);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetBaseHp(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iHp);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetBaseMp(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iMp);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetAck(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iAck);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetDef(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iDef);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetNowAck(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iAck);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->SetNowDef(CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iDef);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[m_iNowItem]->iNum--;
DelNull();
cout << "使用成功";
}
m_bExit = true;
}
}
//放弃操作
else
{
m_bExit = true;
}
}
}
}
void CBag::OnRender()
{
//列表渲染
if (m_bExit)
{
for (int i = 0; i < 40; i++)
{
for (int j = 0; j < 30; j++)
{
cout << "□";
}
cout << endl;
}
gotoxy(32, 4);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << " 武 器 :";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
cout << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetWeapons()->szName;
gotoxy(32, 7);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << " 防 具 :";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
cout << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetArmor()->szName;
gotoxy(32, 10);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << " 首 饰 :";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
cout << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetJewelry()->szName;
gotoxy(32, 13);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "特殊装备:";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
cout << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetSpecial()->szName;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
gotoxy(2, 20);
cout << "-------------------------------------------------------";
gotoxy(15, 22);
cout << "等级:" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetLevel();
gotoxy(40, 22);
cout << "经验:" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetExp();
gotoxy(15, 27);
cout << "血量:" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetNowHp() << "/" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetHp();
gotoxy(40, 27);
cout << "魔力:" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetNowMp() << "/" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetMp();
gotoxy(15, 32);
cout << "攻击力:" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetAck();
gotoxy(40, 32);
cout << "防御力:" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetDef();
gotoxy(85, 2);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "我的背包" << endl;
gotoxy(75, 4);
cout << "名称";
gotoxy(90, 4);
cout << "图片";
gotoxy(100, 4);
cout << "数量";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
for (int i = 0; i < CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag().size(); i++)
{
gotoxy(68, 6 + i);
cout << " ";
gotoxy(68, 6 + i);
if (i == m_iNowItem)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "→";
}
gotoxy(70, 6 + i);
cout << " ";
gotoxy(70, 6 + i);
cout << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[i]->szName;
gotoxy(90, 6 + i);
cout << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[i]->szPic;
gotoxy(100, 6 + i);
cout << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[i]->iNum << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
gotoxy(125, 8);
//显示物品详情
if (i == m_iNowItem)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "物品详情:" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
gotoxy(110, 10);
cout << " " << endl;
gotoxy(110, 10);
cout << "血量" << "\t" << "+" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[i]->iHp << endl;
gotoxy(110, 12);
cout << " " << endl;
gotoxy(110, 12);
cout << "魔力:" << "\t" << "+" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[i]->iMp << endl;
gotoxy(110, 14);
cout << " " << endl;
gotoxy(110, 14);
cout << "攻击:" << "\t" << "+" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[i]->iAck << endl;
gotoxy(110, 16);
cout << " " << endl;
gotoxy(110, 16);
cout << "防御:" << "\t" << "+" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[i]->iDef << endl;
gotoxy(110, 18);
cout << " " << endl;
gotoxy(110, 18);
cout << "价格:" << "\t" << "+" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[i]->iPrice << endl;
gotoxy(110, 20);
cout << " " << endl;
gotoxy(110, 20);
cout << "介绍:" << "\t" << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[i]->szDescribe << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
}
//gotoxy(80, 35);
//cout << " ";
gotoxy(125, 32);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
cout << "我的金币:";
gotoxy(135, 32);
cout << CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetMoney();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
//确认框渲染
else
{
for (int i = 0; i < 6; i++)
{
gotoxy(75, 15 + i);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
if (0 == i || 5 == i)
{
cout << "□□□□□□□□□";
}
else
{
cout << "□ □";
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
gotoxy(80, 16);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "是否使用";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
gotoxy(78 + 3 * m_iConfirm, 18);
if (0 == m_iConfirm)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "->";
cout << " 使用";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
cout << " 丢弃";
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
cout << "使用";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "->";
cout << "丢弃";
}
}
}
void CBag::gotoxy(short x, short y)
{
COORD position = { x, y };
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, position);
}
void CBag::AddItem(int iID,int iNum)
{
m_VecBagDatas.push_back(CDataMgr::GetDataMgr()->GetItemDtMgr()->GetDataByID(iID));
m_VecBagDatas.back()->iNum += iNum;
}
void CBag::DelItem(int iID, int iNum)
{
for (int i = 0; i < m_VecBagDatas.size(); i++)
{
if (iID == m_VecBagDatas[i]->iId)
{
m_VecBagDatas[i]->iNum -= iNum;
}
}
}
void CBag::DelRePeat()
{
if (0 == m_VecBagDatas.back()->iNum)
{
m_VecBagDatas.back()->iNum = 1;
}
for (int i = 0; i < m_VecBagDatas.size()-1; i++)
{
if (m_VecBagDatas[i]->iId == m_VecBagDatas.back()->iId)
{
m_VecBagDatas[i]->iNum++;
m_VecBagDatas.pop_back();
}
}
}
void CBag::DelNull()
{
for (int i = 0; i < CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag().size(); i++)
{
if (0 >= CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->GetVecBag()[i]->iNum)
{
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->m_VecBagDatas.erase(
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->m_VecBagDatas.begin() + i);
}
}
}
void CBag::ChangeEquip(sItemDt* pEquip)
{
//装备武器
//判断之前有没有武器
if (1<=pEquip->iId)
{
//将当前武器放入背包
m_VecBagDatas.push_back(CDataMgr::GetDataMgr()->GetItemDtMgr()->GetDataByID(pEquip->iId));
if (0 == m_VecBagDatas.back()->iNum)
{
m_VecBagDatas.back()->iNum=1;
}
//删除重复武器
DelRePeat();
}
}
void CBag::PlayerUpData()
{
//m_pPlayer->UpData();
m_VecBagDatas[m_iNowItem]->iNum--;
DelNull();
//m_pPlayer->DelNull();
}
sItemDt * CBag::GetById(int id)
{
sItemDt* m_pItem = new sItemDt();
for (int i = 0; i < m_VecBagDatas.size(); i++)
{
if (id == m_VecBagDatas[i]->iId)
{
m_pItem = m_VecBagDatas[i];
}
}
return m_pItem;
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Yongi-RPG.git
git@api.gitlife.ru:oschina-mirror/Yongi-RPG.git
oschina-mirror
Yongi-RPG
Yongi-RPG
master