📄 game.cpp
字号:
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 + -