⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 player.cpp

📁 MUD文字游戏开发
💻 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 + -