📄 player.cpp
字号:
#include "Player.h"
#include <conio.h>
#include <sstream>
#include <string>
#include <iomanip>
//int CPlayer::m_nKey=0;
CPlayer::CPlayer(void)
{
m_pcInterface = new CInterface();
}
CPlayer::~CPlayer(void)
{
delete m_pcInterface;
}
void CPlayer::InitPlayer(string name,
int nHP,
int nMP,
int nCurrentHP,
int nCurrentMP,
int nAttack,
int nDefence,
int nMoney,
unsigned unExperience,
int nLevel,
int nCurPosX,
int nCurPosY)
{
m_name = name;
m_nHP = nHP;
m_nMP = nMP;
m_nCurrentHP = nCurrentHP;
m_nCurrentMP = nCurrentMP;
m_nAttack = nAttack;
m_nDefence = nDefence;
m_nMoney = nMoney;
m_unExperience = unExperience;
m_nLevel = nLevel;
m_nCurPosX = nCurPosX;
m_nCurPosY = nCurPosY;
m_nKey = 0;
}
//玩家移动
void CPlayer::PlayerMove(int nSpeedX,int nSpeedY)
{
this->m_nCurPosX += nSpeedX;
this->m_nCurPosY += nSpeedY;
}
//战胜怪物
void CPlayer::GetWin(CMonster *pcMonster)
{
int nTempLEV = m_nLevel;
int nAddLEV = 0;
int nEXP = static_cast<int>(m_unExperience);
int nGetMoney;
unsigned nGetEXP;
int nHP,nMP,nAttack,nDefence;
unsigned unEXP;
//临时保留原来的属性值
nHP = m_nHP;
nMP = m_nMP;
nAttack = m_nAttack;
nDefence = m_nDefence;
unEXP = m_unExperience;
//获取的经验值和金钱
nGetMoney = pcMonster->GetMoney();
m_nMoney += nGetMoney;
nGetEXP = pcMonster->GetEXP();
m_unExperience += nGetEXP;
//画出战胜画面
DrawWinMenu(nGetMoney,nGetEXP);
while (m_unExperience >= (100*m_nLevel))
{
m_unExperience -= 100*m_nLevel;
m_nLevel += 1;
}
//判断是否升级
if (m_nLevel > nTempLEV)
{
nAddLEV = m_nLevel - nTempLEV;
m_nHP += 10 * nAddLEV;
m_nMP += 10 * nAddLEV;
m_nCurrentHP = m_nHP;
m_nCurrentMP = m_nMP;
m_nAttack += 10 * nAddLEV;
m_nDefence += 10 * nAddLEV;
DrawUpgrade(nTempLEV,nHP,nMP,nAttack,nDefence);
}
}
//提示胜利画面
void CPlayer::DrawWinMenu(int nGetMoney,unsigned nGetEXP)
{
string strValue;
system("cls");
ostringstream format;
format<<" 获得经验: "<<nGetEXP;
m_pcInterface->ShowMessage(" ★★胜利★★",1);
m_pcInterface->ShowMessage("------------------------------------------",2);
m_pcInterface->ShowMessage(format.str(),3);
format.str("");//清空输出流,重新获取值
format<<" 获得金钱: "<<nGetMoney;
m_pcInterface->ShowMessage(format.str(),4);
//判断是否得到神秘钥匙
if ((rand()%TREASURE_RATE == 0) && m_nKey ==0)
{
m_nKey = 1;
m_pcInterface->ShowMessage(" 获得物品: 一把神秘的钥匙",5);
}
while (1)
{
_getch();
break;
}
}
void CPlayer::DrawUpgrade(int nLevel,int nHP,int nMP,int nAttack,int nDefence)
{
system("cls");
m_pcInterface->ShowMessage(" ★★升级★★",1);
m_pcInterface->ShowMessage("------------------------------------------",2);
ostringstream format;
format<<" 等 级: "<<setw(5)<<nLevel<<" → "<<m_nLevel;
m_pcInterface->ShowMessage(format.str(),3);
format.str("");
format<<" 生 命: "<<setw(5)<<nHP<<" → "<<m_nHP;
m_pcInterface->ShowMessage(format.str(),4);
format.str("");
format<<" 内 力: "<<setw(5)<<nMP<<" → "<<m_nMP;
m_pcInterface->ShowMessage(format.str(),5);
format.str("");
format<<" 攻 击: "<<setw(5)<<nAttack<<" → "<<m_nAttack;
m_pcInterface->ShowMessage(format.str(),6);
format.str("");
format<<" 防 御: "<<setw(5)<<nDefence<<" → "<<m_nDefence;
m_pcInterface->ShowMessage(format.str(),7);
format.str("");
format<<" 经 验: "<<m_unExperience<<" / "<<100 * m_nLevel;
m_pcInterface->ShowMessage(format.str(),8);
while (1)
{
_getch();
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -