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

📄 game.cpp

📁 控制台小游戏中的Game类,包含游戏的逻辑
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				cout<<"自动恢复生命值"<<g_Global.m_protagonist.m_nMaxHP/10<<"点"<<endl;
			}
			else if(g_Global.m_protagonist.m_nHP==g_Global.m_protagonist.m_nMaxHP)
			{
				cout<<"自动恢复生命值"<<g_Global.m_protagonist.m_nMaxHP/10<<"点"<<endl;
				cout<<"生命值已回满!"<<endl;
			}
			else if(g_Global.m_protagonist.m_nHP>g_Global.m_protagonist.m_nMaxHP)
			{
				cout<<"自动恢复生命值"<<g_Global.m_protagonist.m_nMaxHP/10
					-(g_Global.m_protagonist.m_nHP-g_Global.m_protagonist.m_nMaxHP)<<"点"<<endl;
				cout<<"生命值已回满!"<<endl;
				g_Global.m_protagonist.m_nHP=g_Global.m_protagonist.m_nMaxHP;
			}
		}
		else
			cout<<"目前生命值已经达到最大值!"<<endl;
		if(g_Global.m_protagonist.m_nMP<g_Global.m_protagonist.m_nMaxMP)
		{
			g_Global.m_protagonist.m_nMP+=g_Global.m_protagonist.m_nMaxMP/10;
			if(g_Global.m_protagonist.m_nMP<g_Global.m_protagonist.m_nMaxMP)
			{
				cout<<"自动恢复气力值"<<g_Global.m_protagonist.m_nMaxMP/10<<"点"<<endl;
			}
			else if(g_Global.m_protagonist.m_nMP==g_Global.m_protagonist.m_nMaxMP)
			{
				cout<<"自动恢复气力值"<<g_Global.m_protagonist.m_nMaxMP/10<<"点"<<endl;
				cout<<"气力值已回满!"<<endl;
			}
			else if(g_Global.m_protagonist.m_nMP>g_Global.m_protagonist.m_nMaxMP)
			{
				cout<<"自动恢复气力值"<<g_Global.m_protagonist.m_nMaxMP/10
					-(g_Global.m_protagonist.m_nMP-g_Global.m_protagonist.m_nMaxMP)<<"点"<<endl;
				cout<<"气力值已回满!"<<endl;
				g_Global.m_protagonist.m_nMP=g_Global.m_protagonist.m_nMaxMP;
			}
		}
		else
			cout<<"目前气力值已经达到最大值!"<<endl;
		break;
	case 'h':
	case 'H':
		GameHelp();
		break;
	case 'v':
	case 'V':
		GetMapInfo();
		break;
	case 'q':
	case 'Q':
		g_Global.SetWordsColor(4,0);
		cout<<g_Global.m_protagonist.m_strRoleName;
		g_Global.SetWordsColor(6,2);
		cout<<",你确定要离开游戏吗?(Y/N)"<<endl;
		g_Global.m_nGameState=GAMESTATE_QUIT;
		break;
	case 'w':
	case 'W':
	case 's':
	case 'S':
	case 'a':
	case 'A':
	case 'd':
	case 'D':
		PlayerMove(cCommand);
		break;
	default:
		cout<<"请进行输入有效按键!"<<endl;
		break;			
	}
}

void CGame::GetMapInfo()
{
	int nX,nY;
	nX=g_Global.m_protagonist.m_nPosX;
	nY=g_Global.m_protagonist.m_nPosY;
	{
		vector<SCENARIO_INFO>::iterator iter;
		if (nX<=5&&nY<=5)
		{
			cout<<"所在位置:桃园村("<<nX<<","<<nY<<")"<<endl;
			for(iter=g_Global.m_vScenarioInfo.begin();iter!=g_Global.m_vScenarioInfo.end();iter++)
			{
				if(iter->nSceType==GAMESTATE_FIGHT_VILLAGE)
				{
					g_Global.SetWordsColor();
					cout<<iter->strSceInfo<<endl;
					break;
				}
			}
		}
		else if(nX<=5&&nY>=6)
		{
			cout<<"所在位置:魔兔坡("<<nX<<","<<nY<<")"<<endl;
			for(iter=g_Global.m_vScenarioInfo.begin();iter!=g_Global.m_vScenarioInfo.end();iter++)
			{
				if(iter->nSceType==GAMESTATE_FIGHT_HARE)
				{
					g_Global.SetWordsColor();
					cout<<iter->strSceInfo<<endl;
					break;
				}
			}
		}
		else if(nX>=6&&nY<=10)
		{
			cout<<"所在位置:野狼谷("<<nX<<","<<nY<<")"<<endl;
			for(iter=g_Global.m_vScenarioInfo.begin();iter!=g_Global.m_vScenarioInfo.end();iter++)
			{
				if(iter->nSceType==GAMESTATE_FIGHT_WOLF)
				{
					g_Global.SetWordsColor();
					cout<<iter->strSceInfo<<endl;
					break;
				}
			}
		}
		else if(nX>=6&&nY>=11)
		{
			cout<<"所在位置:黑熊岭("<<nX<<","<<nY<<")"<<endl;
			for(iter=g_Global.m_vScenarioInfo.begin();iter!=g_Global.m_vScenarioInfo.end();iter++)
			{
				if(iter->nSceType==GAMESTATE_FIGHT_BEAR)
				{
					g_Global.SetWordsColor();
					cout<<iter->strSceInfo<<endl;
					break;
				}
			}
		}
	}
	bool bFind=false;
	{
		vector<CRole>::iterator iter;
		for(iter=g_Global.m_vNPC.begin();iter!=g_Global.m_vNPC.end();iter++)
		{
			if(iter->m_nPosX==nX&&iter->m_nPosY==nY-1)
			{
				g_Global.SetWordsColor(4,0);
				cout<<g_Global.m_protagonist.m_strRoleName;
				g_Global.SetWordsColor(6,2);
				cout<<"巡视周围,发现北方有一只"<<iter->m_strRoleName<<"用一双嗜血的眼睛热情的注视着你……"<<endl;
				bFind=true;
			}
			if(iter->m_nPosX==nX&&iter->m_nPosY==nY+1)
			{
				g_Global.SetWordsColor(4,0);
				cout<<g_Global.m_protagonist.m_strRoleName;
				g_Global.SetWordsColor(6,2);
				cout<<"巡视周围,发现南方有一只"<<iter->m_strRoleName<<"用一双嗜血的眼睛热情的注视着你……"<<endl;
				bFind=true;
			}
			if(iter->m_nPosX==nX-1&&iter->m_nPosY==nY)
			{
				g_Global.SetWordsColor(4,0);
				cout<<g_Global.m_protagonist.m_strRoleName;
				g_Global.SetWordsColor(6,2);
				cout<<"巡视周围,发现西方有一只"<<iter->m_strRoleName<<"用一双嗜血的眼睛热情的注视着你……"<<endl;
				bFind=true;
			}
			if(iter->m_nPosX==nX+1&&iter->m_nPosY==nY)
			{
				g_Global.SetWordsColor(4,0);
				cout<<g_Global.m_protagonist.m_strRoleName;
				g_Global.SetWordsColor(6,2);
				cout<<"巡视周围,发现东方有一只"<<iter->m_strRoleName<<"用一双嗜血的眼睛热情的注视着你……"<<endl;
				bFind=true;
			}
		}
	}
	if(!bFind)
	{
		g_Global.SetWordsColor(4,0);
		cout<<g_Global.m_protagonist.m_strRoleName;
		g_Global.SetWordsColor(6,2);
		cout<<"巡视周围,暂时没有发现魔物,继续前进吧!"<<endl;
	}
}

void CGame::PlayerMove(char cDirection)
{
	g_Global.SetWordsColor(FOREGROUND_GREEN);
	int map=g_Global.GetMap(g_Global.m_protagonist.m_nPosX,g_Global.m_protagonist.m_nPosY);
	if(map==0)
	{
		cout<<"地图信息出错"<<endl;
		exit(0);
	}
	switch(cDirection)
	{
	case 'w':
	case 'W':
		switch(map)
		{
		case MAP_VILLAGE:
			if(g_Global.m_protagonist.m_nPosY-1>=0)
			{
				g_Global.m_protagonist.m_nPosY-=1;
				cout<<"向北移动一段距离。"<<endl;
			}
			else
			{
				cout<<"已走到桃源村的最北端,请换方向前进!"<<endl;
			}
			break;
		case MAP_HARE:
			if(g_Global.m_protagonist.m_nPosY-1>=6)
			{
				g_Global.m_protagonist.m_nPosY-=1;
				cout<<"向北移动一段距离。"<<endl;
			}
			else
			{
				g_Global.m_protagonist.m_nPosY-=1;
				cout<<"离开了魔兔坡,来到了桃源村。"<<endl;
			}
			break;
		case MAP_WOLF:
			if(g_Global.m_protagonist.m_nPosY-1>=0)
			{
				g_Global.m_protagonist.m_nPosY-=1;
				cout<<"向北移动一段距离。"<<endl;
			}
			else
			{
				cout<<"已走到野狼谷的最北端,请换方向前进!"<<endl;
			}
			break;
		case MAP_BEAR:
			if(g_Global.m_protagonist.m_nPosY-1>=11)
			{
				g_Global.m_protagonist.m_nPosY-=1;
				cout<<"向北移动一段距离。"<<endl;
			}
			else if(g_Global.m_protagonist.m_nPosX<=8&&g_Global.m_protagonist.m_nPosY-1<11)
			{
				cout<<"已走到黑熊岭的最北端,请换方向前进!"<<endl;
			}
			else if(g_Global.m_protagonist.m_nPosX>8&&g_Global.m_protagonist.m_nPosY-1<11)
			{
				g_Global.m_protagonist.m_nPosY-=1;
				cout<<"离开了黑熊岭,来到了野狼谷。"<<endl;
			}
			break;
		}
		break;
	case 's':
	case 'S':
		switch(map)
		{
		case MAP_VILLAGE:
			if(g_Global.m_protagonist.m_nPosY+1<=5)
			{
				g_Global.m_protagonist.m_nPosY+=1;
				cout<<"向南移动一段距离。"<<endl;
			}
			else
			{
				g_Global.m_protagonist.m_nPosY+=1;
				cout<<"离开了桃源村,来到了魔兔坡。"<<endl;
			}
			break;
		case MAP_HARE:
			if(g_Global.m_protagonist.m_nPosY+1<=10)
			{
				g_Global.m_protagonist.m_nPosY+=1;
				cout<<"向南移动一段距离。"<<endl;
			}
			else
			{
				cout<<"已走到魔兔坡的最南端,请换方向前进!"<<endl;
			}
			break;
		case MAP_WOLF:
			if(g_Global.m_protagonist.m_nPosY+1<=10)
			{
				g_Global.m_protagonist.m_nPosY+=1;
				cout<<"向南移动一段距离。"<<endl;
			}
			else if(g_Global.m_protagonist.m_nPosX<=8&&g_Global.m_protagonist.m_nPosY+1>10)
			{
				cout<<"已走到野狼谷的最南端,请换方向前进!"<<endl;
			}
			else if(g_Global.m_protagonist.m_nPosX>8&&g_Global.m_protagonist.m_nPosY+1>10)
			{
				g_Global.m_protagonist.m_nPosY+=1;
				cout<<"离开了野狼谷,来到了黑熊岭。"<<endl;
			}
			break;
		case MAP_BEAR:
			if(g_Global.m_protagonist.m_nPosY+1<=MAP_MAX_SIZE)
			{
				g_Global.m_protagonist.m_nPosY+=1;
				cout<<"向南移动一段距离。"<<endl;
			}
			else 
			{
				cout<<"已走到黑熊岭的最南端,请换方向前进!"<<endl;
			}
			break;
		}
		break;
	case 'a':
	case 'A':
		switch(map)
		{
		case MAP_VILLAGE:
			if(g_Global.m_protagonist.m_nPosX-1>=0)
			{
				g_Global.m_protagonist.m_nPosX-=1;
				cout<<"向西移动一段距离。"<<endl;
			}
			else
			{
				cout<<"已走到桃源村的最西端,请换方向前进!"<<endl;
			}
			break;
		case MAP_HARE:
			if(g_Global.m_protagonist.m_nPosX-1>=0)
			{
				g_Global.m_protagonist.m_nPosX-=1;
				cout<<"向西移动一段距离。"<<endl;
			}
			else
			{
				cout<<"已走到魔兔坡的最西端,请换方向前进!"<<endl;
			}
			break;
		case MAP_WOLF:
			if(g_Global.m_protagonist.m_nPosX-1>=6)
			{
				g_Global.m_protagonist.m_nPosX-=1;
				cout<<"向西移动一段距离。"<<endl;
			}
			else if(g_Global.m_protagonist.m_nPosY==5&&g_Global.m_protagonist.m_nPosX-1<6)
			{
				g_Global.m_protagonist.m_nPosX-=1;
				cout<<"离开了野狼谷,来到了桃源村。"<<endl;
			}
			else if(g_Global.m_protagonist.m_nPosY==6&&g_Global.m_protagonist.m_nPosX-1<6)
			{
				g_Global.m_protagonist.m_nPosX-=1;
				cout<<"离开了野狼谷,来到了魔兔坡。"<<endl;
			}
			else
			{
				cout<<"已走到野狼谷的最西端,请换方向前进!"<<endl;
			}
			break;
		case MAP_BEAR:
			if(g_Global.m_protagonist.m_nPosX-1>=6)
			{
				g_Global.m_protagonist.m_nPosX-=1;
				cout<<"向西移动一段距离。"<<endl;
			}
			else 
			{
				cout<<"已走到黑熊岭的最西端,请换方向前进!"<<endl;
			}
			break;
		}
		break;
	case 'd':
	case 'D':
		switch(map)
		{
		case MAP_VILLAGE:
			if(g_Global.m_protagonist.m_nPosX+1<=5)
			{
				g_Global.m_protagonist.m_nPosX+=1;
				cout<<"向东移动一段距离。"<<endl;
			}
			else if(g_Global.m_protagonist.m_nPosY==5&&g_Global.m_protagonist.m_nPosX+1>5)
			{
				g_Global.m_protagonist.m_nPosX+=1;
				cout<<"离开了桃源村,来到了野狼谷。"<<endl;
			}
			else
			{
				cout<<"已走到桃源村的最东端,请换方向前进!"<<endl;
			}
			break;
		case MAP_HARE:
			if(g_Global.m_protagonist.m_nPosX+1<=5)
			{
				g_Global.m_protagonist.m_nPosX+=1;
				cout<<"向东移动一段距离。"<<endl;
			}
			else if(g_Global.m_protagonist.m_nPosY==6&&g_Global.m_protagonist.m_nPosX+1>5)
			{
				g_Global.m_protagonist.m_nPosX+=1;
				cout<<"离开了魔兔坡,来到了野狼谷。"<<endl;
			}
			else
			{
				cout<<"已走到魔兔坡的最东端,请换方向前进!"<<endl;
			}
			break;
		case MAP_WOLF:
			if(g_Global.m_protagonist.m_nPosX+1<=10)
			{
				g_Global.m_protagonist.m_nPosX+=1;
				cout<<"向东移动一段距离。"<<endl;
			}
			else
			{
				cout<<"已走到野狼谷的最东端,请换方向前进!"<<endl;
			}
			break;
		case MAP_BEAR:
			if(g_Global.m_protagonist.m_nPosX+1<=10)
			{
				g_Global.m_protagonist.m_nPosX+=1;
				cout<<"向东移动一段距离。"<<endl;
			}
			else 
			{
				cout<<"已走到黑熊岭的最东端,请换方向前进!"<<endl;
			}
			break;
		}
		break;
	}
	if((g_Global.m_protagonist.m_nPosX==7||g_Global.m_protagonist.m_nPosX==8)&&g_Global.m_protagonist.m_nPosY==MAP_MAX_SIZE)
	{
		if(g_Global.m_NPC_Number==0)
		{	
			cout<<"到了这里,前面就是更广阔的天空!"<<endl;
			g_Global.SetWordsColor(6,2);
			cout<<"游戏结束,请按任意键退出!"<<endl;
			g_Global.m_nGameState=GAMESTATE_OVER;
			return;
		}
		else
		{
			cout<<"魔物还没有全部消灭,无法离开!"<<endl;
		}
	}
	vector<CRole>::iterator iter;
	for(iter=g_Global.m_vNPC.begin();iter!=g_Global.m_vNPC.end();iter++)
	{
		if(iter->m_nPosX==g_Global.m_protagonist.m_nPosX&&iter->m_nPosY==g_Global.m_protagonist.m_nPosY)
		{
			g_Global.m_fight.m_nBout=0;
			g_Global.m_fight.m_iterNPC=*iter;
			g_Global.SetWordsColor(4,0);
			cout<<g_Global.m_protagonist.m_strRoleName;
			g_Global.SetWordsColor(6,2);
			cout<<"狭路相逢一只";
			g_Global.SetWordsColor(4,0);
			cout<<iter->m_strRoleName<<"(等级 "<<iter->m_nLevel<<")";
			g_Global.SetWordsColor(6,2);
			cout<<"进入战头状态!"<<endl;
			g_Global.BattleInfo(g_Global.m_protagonist.m_nRoleType,g_Global.m_protagonist.m_nLevel);
			g_Global.m_nGameState=GAMESTATE_FIGHT;
			break;
		}
	}
}

void CGame::GameOver()
{	
	getchar();
	exit(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -