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

📄 game.cpp

📁 游戏是我在3月5日离职后花3周时间做的。主要目的是验证自己在游戏上相关的编程能力
💻 CPP
📖 第 1 页 / 共 5 页
字号:
fontGameCityJLF->DrawText(
						 m_map.TT_CityGeneral[i],
						 -1, &m_map.T_CityGeneral[i],
						 DT_TOP| DT_LEFT,
                         COLORCityGeneral);//
fontGameCityJLF->DrawText(
						 m_map.TT_CityFighter[i],
						 -1, &m_map.T_CityFighter[i],
						 DT_TOP| DT_LEFT,
                         COLORCityFighter);//
fontGameCityJLF->DrawText(
						 m_map.TT_CityStaff[i],
						 -1, &m_map.T_CityStaff[i],
						 DT_TOP| DT_LEFT,
                         COLORCityStaff);//
fontGameCityJLF->DrawText(
						 m_map.TT_CityPolitician[i],
						 -1, &m_map.T_CityPolitician[i],
						 DT_TOP| DT_LEFT,
                         COLORCityPolitician);//
fontGameCS->DrawText(
						 m_map.TT_CityCarryOut[i],
						 -1, &m_map.T_CityCarryOut[i],
						 DT_TOP| DT_LEFT,
                         COLORCityCarryOut);// 
}
i = 0;
for(m_map.c_TT_Show = m_map.TT_Show.begin(); m_map.c_TT_Show != m_map.TT_Show.end(); m_map.c_TT_Show ++)
{
if((*m_map.c_TT_Show).i_Show == 1)
fontGameChoice->DrawText(
						 (*m_map.c_TT_Show).Text,
						 -1, &m_map.T_Show[i],
						 DT_TOP| DT_LEFT,
                         COLORShowText0);
else if((*m_map.c_TT_Show).i_Show == 2)
fontGameChoice->DrawText(
						 (*m_map.c_TT_Show).Text,
						 -1, &m_map.T_Show[i],
						 DT_TOP| DT_LEFT,
                         COLORShowText1);
i++;
}
    return TRUE;
}

BOOL Game::InitS_GameCourse()
{
	int s = m_JiangLing.InitAllJiangLing();  ////初始武将
	if(!m_JiangLing.RandArrange(s))   ////将将领随即排列
		return FALSE;

	int Data[10];
	int i =0;
	for(i = 0;i <10; i++)
		Data[i] = -1;

	Data[0] = 0;
    S_LoadSend(C_GameCourse,Data); ///游戏开始

	m_player.CityPossess[2] = 1;  ///主机第二位为可用城市
	m_player.CitySoldier[2] = 10000;  ////初试兵力为10000

	SetCitySoldier(2,10000);
	SetGameTimer(2);
	m_player.CCityI = 2;   ////设置当前控制的城市编号
	strcpy(m_player.CCityT,m_WP.CCityT[2]);///设置选择城市的文本
	m_player1->CityPossess[7] = 1;   /////副机第7位为可用城市
	m_player1->CitySoldier[7] = 10000;  
//	TCHAR SetGame[100];  ////游戏设置命令
	Data[0] = 7;
	Data[1] = 10000;
	S_LoadSend(C_Soldier,Data); ///发出设置城市兵力

	m_WP.m_JLF[2] = m_JiangLing.GetJLF(USEJLF); //第二个城市的将领表
	m_WP.m_JLFhead[2] = m_WP.m_JLF[2];
	m_WP.m_JLF[7] = m_JiangLing.GetJLF(USEJLF); //第七个城市的将领表
	m_WP.m_JLFhead[7] = m_WP.m_JLF[7];
	m_WP.CityPossess[2] = 1;  ////主
	m_WP.CityPossess[7] = 2;  /////副
	Data[0] = 7;
	for(i = 1; i<(USEJLF+1); i++)
	{
		Data[i] = m_WP.m_JLF[7]->Codify;
		++ m_WP.m_JLF[7];
	}
	m_WP.m_JLF[7] = m_WP.m_JLFhead[7];  ///还原头指针
	S_LoadSend(C_CityJLF,Data); ////发出设置城市使用将领
	i_gamework = GAMECOURSE;
	::SetTimer(hWnd,RecoveryHP,TimeRecovery,0);  /////启动恢复生命记时
	::SetTimer(hWnd,VictorySC,TimeVictory,0);
	return TRUE;
}

void Game::Init_ShowGameCourse()
{

}

int Game::PtInRectGameCourse(int Cx, int Cy)
{
	POINT pt;
	pt.x = Cx;
	pt.y = Cy;
	if(PtInRect(&m_map.City[0],pt))
		return City00;
	else if(PtInRect(&m_map.City[1],pt))
		return City10;
	else if(PtInRect(&m_map.City[2],pt))
		return City20;
	else if(PtInRect(&m_map.City[3],pt))
		return City30;
	else if(PtInRect(&m_map.City[4],pt))
		return City40;
	else if(PtInRect(&m_map.City[5],pt))
		return City50;
	else if(PtInRect(&m_map.City[6],pt))
		return City60;
	else if(PtInRect(&m_map.City[7],pt))
		return City70;
	else if(PtInRect(&m_map.City[8],pt))
		return City80;
	else if(PtInRect(&m_map.City[9],pt))
		return City90;
    if(m_player.CCityI != -1)
	{
        if (PtInRect(&m_map.Attack,pt))
    		return CAttack0;
    	else if(PtInRect(&m_map.Swap,pt))
    		return CSwap0;
    	else if(PtInRect(&m_map.Enrol,pt))
    		return CEnrol0;
    	else if(PtInRect(&m_map.Appoint,pt))
    		return CAppoint0;
    	else if(PtInRect(&m_map.Absolve,pt))
    		return CAbsolve0;
		else if(PtInRect(&m_map.Conscripy,pt))
			return CConscripy0;
	}
	if(m_player.Choice >9 && m_player.Choice <1000)
	{
		for(int i = 0; i< 10 ; i++)
		{
	    	if(PtInRect(&m_map.Choice[i],pt))
				return i;
		}
	}
	return -1;
}


void Game::GameChoice(int Choice)
{
    int i=0;
	int Data[10];
	int S_Timer = 0;
	for(i =0; i<10; i++)
	{
		memset(m_map.T_Choice[i],0,50);  /////将文本清零
		Data[i] = -1;
	}
	switch(Choice) 
    { 
        case CAttack0:
			for(i =0 ; i<10 ; i++)
			{
				if(m_player.CityPossess[i] != 1)
					strcpy(m_map.T_Choice[i],m_WP.CCityT[i]);
			}
			m_player.Choice = Choice;
			break;
		case CSwap0:
			for(i =0; i<10 ; i++)
			{
				if(m_player.CityPossess[i] == 1)
					strcpy(m_map.T_Choice[i],m_WP.CCityT[i]);
			}
			m_player.Choice = Choice;
			break;
		case CEnrol0:
			for(i =0; i<USEJLF; i++)
			{
				if(m_WP.m_JLF[m_player.CCityI]->Codify == -1)
					continue;
			    sprintf(m_map.T_Choice[i],"%s.%d.%d.%d.%d.%d",
			     	   m_WP.m_JLF[m_player.CCityI]->Name,
					   m_WP.m_JLF[m_player.CCityI]->TongLing,
					   m_WP.m_JLF[m_player.CCityI]->WuLi,
					   m_WP.m_JLF[m_player.CCityI]->ZhiLi,
					   m_WP.m_JLF[m_player.CCityI]->ZhengZhi,
					   m_WP.m_JLF[m_player.CCityI]->HPS);
			   ++ m_WP.m_JLF[m_player.CCityI];
			}
			m_WP.m_JLF[m_player.CCityI] = m_WP.m_JLFhead[m_player.CCityI]; ///还原原位
			m_player.Choice = Choice;
			break;
		case CAppoint0:
			sprintf(m_map.T_Choice[0],"%s","太守");
			sprintf(m_map.T_Choice[1],"%s","武将");
			sprintf(m_map.T_Choice[2],"%s","参军");
			sprintf(m_map.T_Choice[3],"%s","侍中");
			m_player.Choice = Choice;
			break;
		case CConscripy0:
			if(m_WP.CityPossess[m_player.CCityI] == 2)
			{
		    	Data[0] = m_player.CCityI;
		    	Data[1] = 0;
				C_LoadSend(S_Conscripy, Data);
			}
			else if(m_WP.CityPossess[m_player.CCityI] == 1)
			{
            	int soldier = 0;
				soldier = GetConscripy(m_player.CCityI);
				///////设置生命
				if(m_player.C_JLF[m_player.CCityI][3].Codify != -1)
                    SetJLFCityHP(m_player.CCityI,3,&m_player.C_JLF[m_player.CCityI][3]);   /////本机需要通知
				m_player.CitySoldier[m_player.CCityI] = m_player.CitySoldier[m_player.CCityI] + soldier;
				SetCitySoldier(m_player.CCityI,m_player.CitySoldier[m_player.CCityI]);
			}
			S_Timer = GetGameTimer(m_player.CCityI,TimeConscripy);
			::SetTimer(hWnd,m_player.CCityI,S_Timer,0);
			break;
		case CAbsolve0:
			if(m_player.C_JLF[m_player.CCityI][0].Codify != -1)
		    	sprintf(m_map.T_Choice[0],"%s","太守");
			if(m_player.C_JLF[m_player.CCityI][1].Codify != -1)
		    	sprintf(m_map.T_Choice[1],"%s","武将");
			if(m_player.C_JLF[m_player.CCityI][2].Codify != -1)
		    	sprintf(m_map.T_Choice[2],"%s","参军");
			if(m_player.C_JLF[m_player.CCityI][3].Codify != -1)
		    	sprintf(m_map.T_Choice[3],"%s","侍中");
			m_player.Choice = Choice;
			break;
		case 0:
            WGameCohice(0,m_player.Choice);
			break;
		case 1:
	        WGameCohice(1,m_player.Choice);
			break;
		case 2:
		    WGameCohice(2,m_player.Choice);
			break;
		case 3:
			WGameCohice(3,m_player.Choice);
			break;
		case 4:
			WGameCohice(4,m_player.Choice);
			break;
		case 5:
			WGameCohice(5,m_player.Choice);
			break;
		case 6:
			WGameCohice(6,m_player.Choice);
			break;
		case 7:
			WGameCohice(7,m_player.Choice);
			break;
		case 8:
			WGameCohice(8,m_player.Choice);
			break;
		case 9:
			WGameCohice(9,m_player.Choice);
			break;
	}
}

void Game::WGameCohice(int Wint, int Choice)
{
	int i=0;
	int S_Timer =0;
	int Data[10];
	int Soldier = 0;
	for(i = 0; i<10; i++)
		Data[i] = -1;

	if(Choice == CAttack0)
	{
		if(m_player.CityPossess[Wint] == 1)
			return;
     	if(m_player.SC == 2)
		{
	    	Data[0] = m_player.CCityI;
	    	Data[1] = Wint;
	    	C_LoadSend(S_Attack,Data); ///发出S, Cliect -> Server的命令
		}
    	else if(m_player.SC == 1)
		{
	    	AttackAalculate(m_player.CCityI,Wint);
		}
		S_Timer = GetGameTimer(m_player.CCityI,TimeAttack);
		::SetTimer(hWnd,m_player.CCityI,S_Timer,0);
	}
	else if(Choice == CSwap0)
	{
		if(m_player.SC == 2)
		{
			Data[0] = m_player.CCityI;
			Data[1] = Wint;
			C_LoadSend(S_Swap, Data);
		}
		else if(m_player.SC == 1)
		{
			Soldier = GetSwap(m_player.CCityI, Wint);
		}
		S_Timer = GetGameTimer(m_player.CCityI,TimeSwap);
		::SetTimer(hWnd,m_player.CCityI,S_Timer,0);
	}
	else if(Choice == CAppoint0)
	{
		if(Wint == 0)
	    	m_player.Choice = CAppoint00;
		else if(Wint == 1)
	    	m_player.Choice = CAppoint01;
		else if(Wint == 2)
	    	m_player.Choice = CAppoint02;
		else if(Wint == 3)
	    	m_player.Choice = CAppoint03;
		if(Wint <4)
		{
     		for(i =0; i<10; i++)
			{
		    	if(m_player.W_JLF[i].Codify == -1)
		    		continue;
		    	sprintf(m_map.T_Choice[i],"%s,%d,%d,%d,%d,%d",
		        		m_player.W_JLF[i].Name,
		    			m_player.W_JLF[i].TongLing,
		    			m_player.W_JLF[i].WuLi,
		    			m_player.W_JLF[i].ZhiLi,
		    			m_player.W_JLF[i].ZhengZhi,
		    			m_player.W_JLF[i].HP);
			}	
		}
	}
	else if(Choice == CAppoint00 || Choice == CAppoint01 || Choice == CAppoint02 || Choice == CAppoint03)
	{
		int CA;
		if(Choice == CAppoint00)
			CA = CAppoint00 - 400;
		else if(Choice == CAppoint01)
			CA = CAppoint01 - 400;
		else if(Choice == CAppoint02)
			CA = CAppoint02 - 400;
		else if(Choice == CAppoint03)
			CA = CAppoint03 - 400;
		if(m_player.W_JLF[Wint].Codify != -1)
		{
	    	JLF m_jlf;
			m_jlf.Codify = -1;
			if(m_player.C_JLF[m_player.CCityI][CA].Codify != -1)
			{
				m_jlf.Codify   = m_player.C_JLF[m_player.CCityI][CA].Codify;
				m_jlf.Country1 = m_player.C_JLF[m_player.CCityI][CA].Country1;
				m_jlf.Country2 = m_player.C_JLF[m_player.CCityI][CA].Country2;
				m_jlf.HP       = m_player.C_JLF[m_player.CCityI][CA].HP;
				m_jlf.HPS      = m_player.C_JLF[m_player.CCityI][CA].HPS;
				strcpy(m_jlf.Name,m_player.C_JLF[m_player.CCityI][CA].Name);
				m_jlf.TongLing = m_player.C_JLF[m_player.CCityI][CA].TongLing;
				m_jlf.WuLi     = m_player.C_JLF[m_player.CCityI][CA].WuLi;
				m_jlf.ZhengZhi = m_player.C_JLF[m_player.CCityI][CA].ZhengZhi;
				m_jlf.ZhiLi    = m_player.C_JLF[m_player.CCityI][CA].ZhiLi;
			}
			SetCityJLF(m_player.CCityI,CA,&m_player.W_JLF[Wint]);
			if(m_jlf.Codify != -1)
			{
                m_player.W_JLF[Wint].Codify   = m_jlf.Codify;
				m_player.W_JLF[Wint].Country1 = m_jlf.Country1;
		        m_player.W_JLF[Wint].Country2 = m_jlf.Country2;
				m_player.W_JLF[Wint].HP       = m_jlf.HP;
			    m_player.W_JLF[Wint].HPS      = m_jlf.HPS;
				strcpy(m_player.W_JLF[Wint].Name,m_jlf.Name);
				m_player.W_JLF[Wint].TongLing = m_jlf.TongLing;
				m_player.W_JLF[Wint].WuLi     = m_jlf.WuLi;
				m_player.W_JLF[Wint].ZhengZhi = m_jlf.ZhengZhi;
				m_player.W_JLF[Wint].ZhiLi    = m_jlf.ZhiLi;
			}
			else
			{
				m_player.W_JLF[Wint].Codify = -1;  ////////如果要任命的没有将领则无须替换直接清-1
			}
			S_Timer = GetGameTimer(m_player.CCityI,TimeTAppoint);
			::SetTimer(hWnd,m_player.CCityI,S_Timer,0);
		}

	}
	else if(Choice == CEnrol0)
	{
		if(Wint >= USEJLF)  ////不能超过这个数否则无效
			return;
	  	m_WP.m_JLF[m_player.CCityI] = m_WP.m_JLF[m_player.CCityI] + Wint;//定位指针
		if(m_WP.m_JLF[m_player.CCityI]->Codify == -1)  ////如果为-1表示没有将领
				return;
		for(i = 0; i<10; i++)
		{
			if(m_player.W_JLF[i].Codify == -1)
			{
		    	m_player.W_JLF[i].Codify   = m_WP.m_JLF[m_player.CCityI]->Codify;
		    	m_player.W_JLF[i].Country1 = m_WP.m_JLF[m_player.CCityI]->Country1;
		    	m_player.W_JLF[i].Country2 = m_WP.m_JLF[m_player.CCityI]->Country2;
		    	m_player.W_JLF[i].HP       = m_WP.m_JLF[m_player.CCityI]->HP;
		    	m_player.W_JLF[i].HPS      = m_WP.m_JLF[m_player.CCityI]->HPS;
		    	strcpy(m_player.W_JLF[i].Name,m_WP.m_JLF[m_player.CCityI]->Name);
		    	m_player.W_JLF[i].TongLing = m_WP.m_JLF[m_player.CCityI]->TongLing;
		    	m_player.W_JLF[i].WuLi     = m_WP.m_JLF[m_player.CCityI]->WuLi;
		    	m_player.W_JLF[i].ZhengZhi = m_WP.m_JLF[m_player.CCityI]->ZhengZhi;
		    	m_player.W_JLF[i].ZhiLi    = m_WP.m_JLF[m_player.CCityI]->ZhiLi;

				if(m_player.SC == 2)
				{
		     		Data[0] = m_player.CCityI;
		    		Data[1] = m_player.W_JLF[i].Codify;
			    	C_LoadSend(S_Recruitment,Data); ///发出S, Cliect -> Server的命令
					m_WP.m_JLF[m_player.CCityI] = m_WP.m_JLFhead[m_player.CCityI];
				}
				else if(m_player.SC == 1)
				{
					m_WP.m_JLF[m_player.CCityI]->Codify = -1;
					m_WP.m_JLF[m_player.CCityI] = m_WP.m_JLFhead[m_player.CCityI]; //还原指针
                    m_JiangLing.SetJLF(m_WP.m_JLF[m_player.CCityI],USEJLF);  ////将当前数据再放回队列
                	delete []m_WP.m_JLF[m_player.CCityI];
					m_WP.m_JLF[m_player.CCityI] = m_JiangLing.GetJLF(USEJLF);
					m_WP.m_JLFhead[m_player.CCityI] = m_WP.m_JLF[m_player.CCityI];
				}
		    	break;
			}
		}
		if( i == 10)

⌨️ 快捷键说明

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