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

OSCHINA-MIRROR/Yongi-RPG

Клонировать/Скачать
Fighting.cpp 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
永义 Отправлено 01.11.2018 04:20 0c4db85
#include "stdafx.h"
#include "Fighting.h"
CFighting::CFighting()
{
m_pMonster = new sMonsterDt();
m_pPlayer = new CPlayer();
m_iFightState = E_FIGHT_ING;
m_iMenuState = E_MENU_START;
m_iRoundNum = 0;
m_bWhoAck = true;
m_iMonsterAck = 0;
m_iPlayerAck = 0;
m_iMonsterPos = 0;
m_iFightData = 0;
m_szMonsterName = new char;
m_iMonsterAck = new char;
m_bIslive = true;
m_iTimer = 1000;
}
CFighting::~CFighting()
{
SAFE_DEL(m_pMonster);
SAFE_DEL(m_pPlayer);
SAFE_DEL(m_szMonsterName);
SAFE_DEL(m_iMonsterAck);
}
void CFighting::UpData()
{
if (E_FIGHT_ING == m_iFightState)
{
if (KEY_DOWN(VK_ESCAPE))
{
m_iFightState = E_FIGHT_PAUSE;
}
}
else if(E_FIGHT_PAUSE == m_iFightState)
{
//游戏菜单按上功能键
if (KEY_DOWN(VK_UP))
{
m_iMenuState--;
if (E_MENU_START > m_iMenuState)
{
m_iMenuState = E_MENU_CONTINUE;
}
}
//游戏菜单按下功能键
if (KEY_DOWN(VK_DOWN))
{
m_iMenuState++;
if (E_MENU_CONTINUE < m_iMenuState)
{
m_iMenuState = E_MENU_START;
}
}
//点击开始游戏进入地图,仅当箭头指向游戏开始时才能使用
if (KEY_DOWN(VK_RETURN))
{
if (E_MENU_START == m_iMenuState)
{
m_iFightState = E_FIGHT_ING;
}
else if (E_MENU_CONTINUE == m_iMenuState)
{
CGameMgr::GetInstance()->RestoreWnd();
}
}
}
else if (E_FIGHT_DEATH == m_iFightState)
{
//死亡时菜单按上功能键
if (KEY_DOWN(VK_UP))
{
m_iMenuState--;
if (E_MENU_START > m_iMenuState)
{
m_iMenuState = E_MENU_CONTINUE;
}
}
//死亡时菜单按下功能键
else if (KEY_DOWN(VK_DOWN))
{
m_iMenuState++;
if (E_MENU_CONTINUE < m_iMenuState)
{
m_iMenuState = E_MENU_START;
}
}
if (KEY_DOWN(VK_RETURN))
{
if (E_MENU_START == m_iMenuState)
{
//死亡时满血复活
m_pPlayer->SetNowHp(m_pPlayer->GetHp());
CGameMgr::GetInstance()->RestoreWnd();
}
else if (E_MENU_CONTINUE == m_iMenuState)
{
//死亡时重新开始
CGameMap* pGameMap = new CGameMap();
CGameMgr::GetInstance()->ChangeWnd(pGameMap);
}
}
}
//判断对局正在进行
if (0 <= m_pPlayer->GetNowHp() && 0 <= m_pMonster->iHp)
{
if (true == m_bWhoAck)
{
Sleep(500);
//玩家当前攻击力
m_iPlayerAck= m_pPlayer->GetAck();
//怪物扣血
m_pMonster->iHp -= m_iPlayerAck;
m_bWhoAck = false;
}
else if(false== m_bWhoAck)
{
Sleep(500);
m_szMonsterName =m_pMonster->arrSkill[0][rand() % m_pMonster->iSkillRow];
m_pPlayer->SetNowHp(-m_pMonster->iAck);
m_bWhoAck = true;
}
}
if (0 >= m_pMonster->iHp)
{
//添加战利品
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->AddItem(m_pMonster->iRewardID,1);
CGameMgr::GetInstance()->GetGameMap()->GetPlayer()->GetBag()->DelRePeat();
//删除已杀死的怪物
CMonsterMgr* m_pMonterMgr = new CMonsterMgr();
m_pMonterMgr->DelMonster(m_iMonsterPos);
gotoxy(103, 5);
cout << "获得物品:" << m_pMonster->szReward << endl;
//Sleep(500);
CGameMgr::GetInstance()->RestoreWnd();
}
if (0 >= m_pPlayer->GetNowHp())
{
//人死亡
m_iFightState = E_FIGHT_DEATH;
//进入复活或是返回城镇窗口
//
}
}
void CFighting::OnRender()
{
if (E_FIGHT_ING == m_iFightState)
{
for (int i = 0; i < 40; i++)
{
for (int j = 0; j < 50; j++)
{
if (0 == i || 39 == i || 0 == j || 49 == j)
{
cout << "■";
}
//头像框
else if ( (2 == i||7==i) && (2<= j && 8>j)
|| (2 < i && 7 > i) && (j == 2 || j == 7))
{
if (false == m_bWhoAck)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN | FOREGROUND_BLUE);
}
cout << "□";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
else if ((2 == i || 7 == i) && (42 <= j && 48>j)|| (2 < i && 7 > i) && ( j == 42 || j == 47))
{
if (m_bWhoAck)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
cout << "□";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
//画 v
else if ((15==i&&20==j)||(16 == i && 21 == j)||(17 == i && 22 == j)||(18 == i && 23 == j)
||(19 == i && 24 == j)||(18 == i && 25 == j)||(17 == i && 26 == j) || (16 == i && 27 == j)
|| (15 == i && 28 == j))
{
cout << "●";
}
//画 s
else if ((25 == i && 25 == j) || (26 == i && 24 == j) || (27 == i && 23 == j) || (28 == i && 22 == j)
|| (29 == i && 22 == j)
|| (30 == i && 23 == j) || (31 == i && 24 == j) || (32 == i && 25 == j) || (33 == i && 25 == j)
|| (34== i && 24 == j) || (35 == i && 23 == j) || (36 == i && 22 == j))
{
cout << "●";
}
else
{
cout << " ";
}
// cout << Monster->szDescribe;
}
cout << endl;
}
gotoxy(8, 4);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "♀";
gotoxy(90, 4);
cout << m_pMonster->szPic;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
gotoxy(3, 8);
cout << "流浪武士"<<"\t LV:"<<m_pPlayer->GetPlayerLevel();
gotoxy(63, 8);
cout << m_pMonster->szName<<"\t\t LV:"<<m_pMonster->iLevel;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
gotoxy(2, 9);
cout << "血量:";
gotoxy(8, 9);
cout << "□□□□□□□□□□";
gotoxy(29, 9);
cout <<"("<<m_pPlayer->GetNowHp() << "/" << m_pPlayer->GetHp()<<")";
gotoxy(2, 10);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout << "魔力:";
gotoxy(8, 10);
cout << "□□□□□□□□□□";
gotoxy(29, 10);
cout <<"("<< m_pPlayer->GetNowMp() << "/" << m_pPlayer->GetMp()<<")";
//怪物
gotoxy(63, 9);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "血量:";
gotoxy(68, 9);
cout << "□□□□□□□□□□";
gotoxy(89, 9);
cout << "("<<m_pMonster->iHp<<"/"<<m_pMonster->iAllHp<<")";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
gotoxy(63, 10);
cout << "魔力:";
gotoxy(68, 10);
cout << "□□□□□□□□□□";
gotoxy(89, 10);
cout << "(" << m_pMonster->iMp << "/" << m_pMonster->iAllMp << ")";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
//检测血量和蓝量,实时显示
for (int i = 10 * m_pPlayer->GetNowHp()/ m_pPlayer->GetHp() ; 0<i ; i--)
{
gotoxy(6+2*i, 9);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "■";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
for (int i = 10 * m_pPlayer->GetNowMp()/m_pPlayer->GetMp(); 0<i; i--)
{
gotoxy(6 + 2 * i, 10);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout << "■";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
for (int i = 10 * m_pMonster->iHp/m_pMonster->iAllHp; 0<i; i--)
{
gotoxy(66 + 2 * i, 9);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "■";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
for (int i = 10 * m_pMonster->iMp / m_pMonster->iAllMp; 0<i; i--)
{
gotoxy(66 + 2 * i, 10);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout << "■";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
//显示玩家信息
for (int i = 0; i < 26; i++)
{
if (0 == i || 25 == i || 4 == i || 11 == i || 18 == i)
{
gotoxy(2, 11 + i);
cout << "□□□□□□□□□□□□□□□□□□";
}
else
{
gotoxy(2, 11 + i);
cout << "□ □";
}
}
gotoxy(5, 13);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "攻击力:" << m_pPlayer->GetAck();
gotoxy(20, 13);
cout << "防御力:" << m_pPlayer->GetDef();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
gotoxy(80, 11);
//显示怪物详细信息
for (int i = 0; i < 26; i++)
{
if (0 == i || 25 == i || 4 == i || 11 == i || 18 == i)
{
gotoxy(62, 11 + i);
cout << "□□□□□□□□□□□□□□□□□□";
}
else
{
gotoxy(62, 11 + i);
cout << "□ □";
}
}
gotoxy(66, 13);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "攻击力:";
gotoxy(74, 13);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
cout<< m_pMonster->iAck;
gotoxy(80, 13);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "防御力:";
gotoxy(88, 13);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
cout<< m_pMonster->iDef;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
int i = 6;
for (int m = 0; m < m_pMonster->iSkillRow; m++)
{
gotoxy(68, 16 + i * m);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "技能" << m+1 << ":" << endl;
gotoxy(68, 17 + i * m);
cout << "名字:";
gotoxy(68, 18 + i * m);
cout << "攻击力:";
gotoxy(68, 19 + i * m);
cout << "消耗:";
gotoxy(68, 20 + i * m);
cout << "冷却:";
gotoxy(68, 21 + i * m);
cout << "伤害:";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
for (int n = 0; n < m_pMonster->iSkillCol; n++)
{
gotoxy(75, 17 + i * m + n);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "\t" << m_pMonster->arrSkill[n][m] << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
i=7;
}
if (0 <= m_pPlayer->GetNowHp() && 0 <= m_pMonster->iHp)
{
if (false == m_bWhoAck)
{
gotoxy(103, 5+ m_iFightData);
cout << "玩家 用普通攻击攻击 " << m_pMonster->szPic << " ,造成了" << m_pPlayer->GetAck() << "点攻击力";
m_iFightData++;
}
else if (true == m_bWhoAck)
{
gotoxy(103, 5 + m_iFightData);
cout << m_pMonster->szPic << " 用"<<m_szMonsterName<<"\t"<<"攻击 玩家,造成了" << m_pMonster->iAck << "点攻击力";
m_iFightData++;
}
}
if (2 <= m_iFightData)
{
m_iFightData = 0;
}
}
else if (E_FIGHT_PAUSE == m_iFightState)
{
if (E_MENU_START == m_iMenuState)
{
gotoxy(130, 15);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "->继续战斗" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
gotoxy(130, 17);
cout << " 撤退" << endl;
}
else if (E_MENU_CONTINUE == m_iMenuState)
{
gotoxy(130, 15);
cout << " 继续战斗" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
gotoxy(130, 17);
cout << "->撤退" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
}
else if (E_FIGHT_DEATH==m_iFightState)
{
gotoxy(125, 18);
cout << " ";
gotoxy(125, 18);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << m_iTimer/100;
//Sleep(500);
m_iTimer--;
gotoxy(120, 20);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "是否立即复活";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
if (E_MENU_START == m_iMenuState)
{
gotoxy(130, 22);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "->满血复活" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
gotoxy(130, 25);
cout << " 骚不动了" << endl;
}
else if (E_MENU_CONTINUE == m_iMenuState)
{
gotoxy(130, 22);
cout << " 满血复活" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
gotoxy(130, 25);
cout << "->骚不动了" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
}
}
}
void CFighting::SetMonster(int iPos, CPlayer* pPlayer)
{
CMonsterMgr* m_pMonterMgr = new CMonsterMgr();
m_pMonster = m_pMonterMgr->GetMonster(iPos);
m_pPlayer = pPlayer;
m_iMonsterPos = iPos;
}
void CFighting::PlayerOperation()
{
}
void CFighting::gotoxy(short x, short y)
{
COORD position = { x, y };
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, position);
}

Опубликовать ( 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