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

📄 game.cpp

📁 游戏是我在3月5日离职后花3周时间做的。主要目的是验证自己在游戏上相关的编程能力
💻 CPP
📖 第 1 页 / 共 5 页
字号:
ZeroMemory(&lf, sizeof(LOGFONT));
lf.lfHeight = 11; // in logical units
lf.lfWidth = 6; // in logical units
lf.lfWeight = 400; // boldness, range 0(light) - 1000(bold)

D3DXCreateFontIndirect(g_pD3DDevice, &lf, &fontGameCityJLF);

	CitySurface.CreFileToSur(g_pD3DDevice,"City.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff000000);
	CitySurface.SetBasicColor(0xffffffff);
	CitySurface.Updata();

    ChoiceSurface.CreFileToSur(g_pD3DDevice,"Choice.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff646464);
	ChoiceSurface.SetBasicColor(0xffffffff);
	ChoiceSurface.Updata();

	AttackSurface.CreFileToSur(g_pD3DDevice,"Attack.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff646464);
	AttackSurface.SetBasicColor(0xffffffff);
	AttackSurface.Updata();

	SwapSurface.CreFileToSur(g_pD3DDevice,"Swap.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff646464);
	SwapSurface.SetBasicColor(0xffffffff);
	SwapSurface.Updata();

	EnrolSurface.CreFileToSur(g_pD3DDevice,"Enrol.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff646464);
	EnrolSurface.SetBasicColor(0xffffffff);
	EnrolSurface.Updata();

	ConscripySurface.CreFileToSur(g_pD3DDevice,"Conscripy.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff646464);
	ConscripySurface.SetBasicColor(0xffffffff);
	ConscripySurface.Updata();

	AppointSurface.CreFileToSur(g_pD3DDevice,"Appoint.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff646464);
	AppointSurface.SetBasicColor(0xffffffff);
	AppointSurface.Updata();

	AbsolveSurface.CreFileToSur(g_pD3DDevice,"Absolve.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff646464);
	AbsolveSurface.SetBasicColor(0xffffffff);
	AbsolveSurface.Updata();

	LongWeiSurface.CreFileToSur(g_pD3DDevice,"LongWei.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff646464);
	LongWeiSurface.SetBasicColor(0xffffffff);
	LongWeiSurface.Updata();

	XuanFaSurface.CreFileToSur(g_pD3DDevice,"XuanFa.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff646464);
	XuanFaSurface.SetBasicColor(0xffffffff);
	XuanFaSurface.Updata();

	HuSuSurface.CreFileToSur(g_pD3DDevice,"HuSu.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff646464);
	HuSuSurface.SetBasicColor(0xffffffff);
	HuSuSurface.Updata();

	ZuWuSurface.CreFileToSur(g_pD3DDevice,"ZuWu.bmp",
		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff646464);
	ZuWuSurface.SetBasicColor(0xffffffff);
	ZuWuSurface.Updata();

	TexSurface.CreFileToTex(g_pD3DDevice,"background.bmp",
                		0,D3DFMT_A1R5G5B5,GESYSMEM,0xff000000);

/*	m_map.TopMenu.top = 20;
	m_map.TopMenu.bottom = 400;
	m_map.TopMenu.left = 620;
	m_map.TopMenu.right = 780;

	m_map.TottomMenu.top = 420;
	m_map.TottomMenu.bottom = 620;
	m_map.TottomMenu.left = 620;
	m_map.TottomMenu.right = 780;
CUSTOMVERTEX vertices[]= 
    {   
{ 50.0f,  250.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0) }, 
{ 150.0f, 150.0f, -0.5f, 1.0f,D3DCOLOR_XRGB(0, 255, 0)},     
{  270.0f, 350.5f, 150.0f, 1.0f, D3DCOLOR_XRGB(0,0, 255) }, 
{  50.0f, 100.5f, 50.0f, 1.0f, D3DCOLOR_XRGB(0,255, 255) }
};     // x, y, z, rhw, color 
    
    //创建顶点缓存 
    g_pD3DDevice->CreateVertexBuffer( 
                                     sizeof(vertices),
									 0,D3DFVF_CUSTOMVERTEX,
									 D3DPOOL_DEFAULT,&g_pVB,NULL); 
    //把顶点数据输入缓存区 
    void* pVertices; 
    g_pVB->Lock(0,sizeof(vertices),(void**)&pVertices,0); 
    memcpy(pVertices,vertices,sizeof(vertices)); 
    g_pVB->Unlock(); 
*/
	return TRUE;
}

BOOL Game::ShowGameBegin()
{
		TexSurface.Blt(&BJ,NULL,GESUR_INTERIOR);
		LongWeiSurface.Blt(NULL,&rect_Wei,GESUR_INTERIOR);
		XuanFaSurface.Blt(NULL,&rect_Fa,GESUR_INTERIOR);
     	HuSuSurface.Blt(NULL,&rect_Su,GESUR_INTERIOR);
	    ZuWuSurface.Blt(NULL,&rect_Wu,GESUR_INTERIOR);

return TRUE;
}

int Game::PtInRectGameBegin(int Sx, int Sy)
{
	POINT pt;
	pt.x = Sx;
	pt.y = Sy;
    if (PtInRect(&rect_Fa,pt))
		return 1;
	else if(PtInRect(&rect_Su,pt))
		return 2;
	else if(PtInRect(&rect_Wei,pt))
		return 3;
	else if(PtInRect(&rect_Wu,pt))
		return 4;
	return 0;
}

void Game::SetCountry(int country)
{
	int i =0, Data[10];
   	for(i =0; i<10; i++)
		Data[i] = -1;

    switch(i_gamework) 
    { 
        case GAMEBEGIN: 
    	if(m_player.SC == 2)
		{
            m_JiangLing.InitAllJiangLing();  ////初始武将
			Data[0] = country;
     		m_player.CounTry = country;
			C_LoadSend(GameCountry,Data);
		}
    	else if(m_player.SC == 1)
		{
        	m_player.CounTry = country;   ////设置本机为使用的国家。
	    	if(m_player1->CounTry != GAMECOUNTRY)
			{
		    	SendMessage(hWnd,S_COURSE_MSG_GO,NULL,NULL);
			}
		}
		break;
		case GAMECOURSE:
	    	if(country >=1000)
			{
	    		m_player.Choice = -1; ////选择其它城市都要这样清楚显示
             	for(i =0; i<10; i++)
             		memset(m_map.T_Choice[i],0,50);  /////将文本清零
	    		if(m_player.CityPossess[country-1000] == 1)
				{
			    	m_player.CCityI = country-1000;   ////设置当前控制的城市编号
			    	strcpy(m_player.CCityT,m_WP.CCityT[country-1000]);///设置选择城市的文本
				}
			}
	    	else if(country >-1 && country <99)
			{
	         	if(m_WP.TimeCity[m_player.CCityI] == 1)
				{
		        	GameChoice(country);
				}
			}
		else if(m_WP.TimeCity[m_player.CCityI] == 0)
		{
			////保留
		}
		break;
	}
}

int Game::ExecutionWorking(TCHAR *Command, int *Data)    /////////命令解析函数
{
	int i =0;
	int codify; ////控制城市一般为Data第一个参数据
	int Data1[10];
	for(i = 0; i< 10; i++)
		Data1[i] = -1;
    if(strcmp(Command,GameCountry) == 0)   ///////
	{
		if(*Data != -1)
        m_player1->CounTry = *Data;  ///收到命令指定副Cliect使用的国家
		if(m_player.CounTry != GAMECOUNTRY)
		{
			SendMessage(hWnd,S_COURSE_MSG_GO,NULL,NULL);  //////这句是判定游戏是否开始
		}
		return 1;
	}
	else if(strcmp(Command,C_Soldier) == 0)   /////为C命令Server->Cliect
	{
		for(i = 0; i<10; i ++)
		{
			if(*Data == -1)
				break;
			if(i == 0)
			    codify = *Data;
			else
			{
				m_player.CitySoldier[codify] = *Data;
			}
			++ Data;
		}
    	SetCitySoldier(codify,m_player.CitySoldier[codify]);
		return 2;
	}
	else if(strcmp(Command,C_CityJLF) == 0)
	{
        int locat[USEJLF];
		memset(locat,-1,sizeof(int)*USEJLF);
		for(i = 0; i<10; i ++)
		{
			if(*Data == -1)
				break;
			if(i == 0)
				codify = *Data;
			else
				locat[i-1] = *Data;
			++ Data;
		}
		if(m_WP.m_JLF[codify] != NULL)
    		delete []m_WP.m_JLF[codify];
		m_WP.m_JLF[codify] = m_JiangLing.LocatingJLF(locat,USEJLF);
		m_WP.m_JLFhead[codify] = m_WP.m_JLF[codify];
		return 3;
	}
	else if(strcmp(Command,C_GameCourse) == 0)  /////为C命令Server->Cliect
	{
		m_player.CounTry = *Data;
		m_WP.CityPossess[2] = 1;  ////主
		m_WP.CityPossess[7] = 2;  /////副
		//////////////////////////////设置文本
		m_player.CityPossess[7] = 1; ////设置可以控制的城市编
		m_player.CCityI = 7;
    	SetGameTimer(7);
		strcpy(m_player.CCityT,m_WP.CCityT[7]);
        i_gamework = GAMECOURSE;
    	::SetTimer(hWnd,RecoveryHP,TimeRecovery,0);
		::SetTimer(hWnd,VictorySC,TimeVictory,0);
		return 4;
	}
	else if(strcmp(Command,S_Recruitment) == 0)
	{
		int locality = *Data;
		++ Data;
		for(i=0; i<USEJLF; i++)
		{
			if(m_WP.m_JLF[locality]->Codify == *Data)
				m_WP.m_JLF[locality]->Codify = -1;
			++ m_WP.m_JLF[locality];
		}
		m_WP.m_JLF[locality] = m_WP.m_JLFhead[locality];  ////返回到头指针

        m_JiangLing.SetJLF(m_WP.m_JLF[locality],USEJLF);  ////将当前数据再放回队列
      	delete []m_WP.m_JLF[locality];

		m_WP.m_JLF[locality] = m_JiangLing.GetJLF(USEJLF);
		m_WP.m_JLFhead[locality] = m_WP.m_JLF[locality];////设置头指针
    	Data1[0] = locality;
    	for(i = 1; i<(USEJLF+1); i++)
		{
	    	Data1[i] = m_WP.m_JLF[locality]->Codify;
	    	++ m_WP.m_JLF[locality];
		}
		m_WP.m_JLF[locality] = m_WP.m_JLFhead[locality];
	//    sprintf(lk,"%s,%d",m_WP.m_JLF[locality]->Name,m_WP.m_JLF[locality]->Codify);
    	S_LoadSend(C_CityJLF,Data1); ////发出设置城市使用将领
		return 5;
	}
	else if(strcmp(Command,S_Appoint) == 0)
	{
		int locality = *Data;
		++ Data;
		int appoint = *Data;
		++ Data;
		m_JiangLing.LocatingJLF(*Data,&m_player1->C_JLF[locality][appoint]);
		++ Data;
		m_player1->C_JLF[locality][appoint].HP = *Data;
		return 6;
	}
	else if(strcmp(Command,S_Attack) == 0)
	{
		int locality = *Data;
		++ Data;
		AttackAalculate(locality,*Data);
		return 7;
	}
	else if(strcmp(Command,C_CityPossess) == 0)
	{
		int locality = *Data;
		++ Data;
		m_WP.CityPossess[locality] = *Data;
		if(*Data == m_player.SC)
		{
			m_player.CityPossess[locality] = 1;
			SetGameTimer(locality);  
		}
		else 
			m_player.CityPossess[locality] = -1;

		if(m_player.CCityI = locality)  ////清楚本玩家的当前控制
			m_player.CCityI = -1;
		if(m_player.CityPossess[locality] == -1)
		{
			SetCityJLF(locality,0,NULL);  ////清除玩家文本
			SetCitySoldier(locality,0);
		}
		return 8;
	}
	else if(strcmp(Command,C_CityJLFHP) == 0)
	{
		int locality = *Data;
		++ Data;
		int appoint = *Data;
		++ Data;
		m_player.C_JLF[locality][appoint].HP = *Data;
		SetJLFCityHP(locality,appoint,&m_player.C_JLF[locality][appoint]);   /////本机需要通知
		return 9;
	}
	else if(strcmp(Command,S_Conscripy) == 0)
	{
		int locality = *Data;
		int soldier = 0;
		soldier = GetConscripy(locality);
		m_player1->CitySoldier[locality] = m_player1->CitySoldier[locality] + soldier;
		Data[0] = locality;
		Data[1] = m_player1->CitySoldier[locality];
		S_LoadSend(C_Soldier,Data);
		if(m_player1->C_JLF[locality][3].Codify == -1)
			return 10;
		Data[0] = locality;
		Data[1] = 3;
		Data[2] = m_player1->C_JLF[locality][3].HP;
		S_LoadSend(C_CityJLFHP,Data);
		return 10;
	}
	else if(strcmp(Command,S_Absolve) == 0)
	{
		int locality = *Data;
		++ Data;
		m_player1->C_JLF[locality][*Data].Codify = -1;
		return 11;
	}
	else if(strcmp(Command,S_Swap) == 0)
	{
		int locality = *Data;
		++ Data;
		this->GetSwap(locality, *Data);	
		return 12;
	}
	else if(strcmp(Command,CT_JLFDeath) == 0)
	{
		int locality = *Data;
		++ Data;
		if(m_WP.CityPossess[locality] == 2)
			m_player1->C_JLF[locality][*Data].Codify = -1;
		this->ShowText(TShow1,locality, *Data);
		return 13;
	}
	else if(strcmp(Command,CT_AttackCity) == 0)
	{
		int locality = *Data;
		++ Data;
		this->ShowText(TShow2,locality, *Data);
		return 14;
	}
		return 0;
}

BOOL Game::ShowGameCourse(LPDIRECT3DDEVICE8 &g_pD3DDevice)
{
//#define      COLORWithout                       0xffffffff   ////空
//#define      COLORPrincipally                   0xff0000ff   ////主占有
///////////////////////////////////////////////////////////////////////////////城0
DWORD   zero;
		TexSurface.Blt(&BJ,NULL,GESUR_INTERIOR);

		AttackSurface.Blt(NULL,&m_map.Attack,GESUR_INTERIOR);
		SwapSurface.Blt(NULL,&m_map.Swap,GESUR_INTERIOR);
		EnrolSurface.Blt(NULL,&m_map.Enrol,GESUR_INTERIOR);
		AbsolveSurface.Blt(NULL,&m_map.Absolve,GESUR_INTERIOR);
		AppointSurface.Blt(NULL,&m_map.Appoint,GESUR_INTERIOR);
		ConscripySurface.Blt(NULL,&m_map.Conscripy,GESUR_INTERIOR);

fontGameCS->DrawText(
    m_player.CCityT, // String to draw.
    -1, // Null terminating string.
    &m_map.T_CityC, // Rectangle to draw the string in.
    DT_TOP | DT_LEFT, // Draw in top-left corner of rect.
    0x88aaaaaa); // Black.

	ChoiceSurface.Blt(NULL,&m_map.ChoiceBMP,GESUR_INTERIOR);
for(int i =0; i<10; i++)
{
fontGameChoice->DrawText(
						 m_map.T_Choice[i],
						 -1,&m_map.Choice[i],
						 DT_TOP | DT_LEFT, // Draw in top-left corner of rect.
                         COLORChoice); // Black.

    if(m_WP.CityPossess[i] == 1)
    zero = COLORPrincipally;
    else if(m_WP.CityPossess[i] == 2) 
    zero = COLORUnderking;
    else 
    zero = COLORWithout;

    fontGameCCity->DrawText(
                            m_WP.CCityT[i], // String to draw.
                            -1, // Null terminating string.
                            &m_map.T_CityName[i], // Rectangle to draw the string in.
                            DT_TOP | DT_LEFT, // Draw in top-left corner of rect.
                            zero); // Black.
		CitySurface.Blt(NULL,&m_map.City[i],GESUR_INTERIOR);
fontGameCityJLF->DrawText(
						 m_map.TT_CitySoldier[i],
						 -1, &m_map.T_CitySoldier[i],
						 DT_TOP| DT_LEFT,
                         COLORCitySoldier);//

⌨️ 快捷键说明

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