www.pudn.com > Chesssource.rar > Chess.cpp
#include "stdafx.h"
#include "ChessDef.h"
FLOAT Timer();
float ROTATE = 0.0f;
cChess::cChess()
{
m_Pick = 0;
m_PickGreenDisplay[0] = TRUE;
for( long i=1; i<30; i++ )
m_PickGreenDisplay[i] = FALSE;
for( long j=0; j<8; j++ )
m_PickRedDisplay[j] = FALSE;
for( long n=0; n<33; n++ )
m_IsFirstMove[n] = FALSE;
m_IsPick = FALSE;
m_CalcuateMoveChessman = 0;
m_FPS = 0.0f;
m_Side = 0;
m_xPos = -2.6f;
m_zPos = -2.6f;
m_xTarget = m_zTarget = -1;
m_xSource = m_zSource = -1;
m_CalcuateXMove = m_CalcuateZMove = 0.0f;
m_bEndGame = FALSE;
m_bMyWin = FALSE;
m_AppState = APPSTATE_GAMEMENU;
}
cChess::~cChess()
{
Shutdown();
}
BOOL cChess::Init(HWND hWnd, HINSTANCE hInstance)
{
m_Graphics.SetMode(hWnd, TRUE);
m_Font.Create( &m_Graphics, "Arial");
m_StateFont.Create( &m_Graphics, "Arial", 48 );
// 菜单
typedef struct
{
float x, y, z;
float u, v;
} sMenuVertex;
long MenuFVF = (D3DFVF_XYZ | D3DFVF_TEX1);
sMenuVertex Verts[4] =
{
{ -130.0f, 100.0f, 1.0f, 0.0f, 0.0f },
{ 130.0f, 100.0f, 1.0f, 1.0f, 0.0f },
{ -130.0f, -100.0f, 1.0f, 0.0f, 1.0f },
{ 130.0f, -100.0f, 1.0f, 1.0f, 1.0f }
};
m_MenuVB.Create(&m_Graphics, 4, MenuFVF, sizeof(sMenuVertex));
m_MenuVB.Set(0,4,Verts);
// 加载菜单纹理
m_MenuTexture.Load(&m_Graphics, "Data\\splash.png");
m_MenuButtons.Load(&m_Graphics, "Data\\b_main_sm_hover.tga");
m_MenuSelect.Load(&m_Graphics, "Data\\b_main_sm_hover_pressed.tga");
m_MenuFont.Create(&m_Graphics, "Arial", 24);
m_Sound.Init( hWnd, 22050, 1, 16 );
m_SoundChannel.Create( &m_Sound, 22050, 1, 16 );
m_MusicChannel.Create( &m_Sound );
m_Input.Init( hWnd, hInstance );
m_Mouse.Create( &m_Input, 2, TRUE );
m_Keyboard.Create( &m_Input, 1 );
m_Light.SetType( D3DLIGHT_POINT );
m_Light.SetDiffuseColor(150, 150, 150 );
m_Light.SetAmbientColor( 40, 40, 40 );
m_Light.SetSpecularColor( 80, 80, 80 );
m_Light.SetAttenuation0( 1.0f );
m_Light.SetRange( 100.0f );
m_Light.Move( 0.0f, 5.0f, 0.0f );
m_Graphics.Get3DDevice()->SetLight(0, m_Light.GetLight());
m_Graphics.Get3DDevice()->LightEnable(0, TRUE);
//PlayMusic(0);
return TRUE;
}
BOOL cChess::Frame()
{
m_Keyboard.Acquire(TRUE);
m_Keyboard.Read();
m_Mouse.Acquire(TRUE);
m_Mouse.Read();
static DWORD UpdateTimer = timeGetTime();
if(timeGetTime() < UpdateTimer + 40)
return TRUE;
UpdateTimer = timeGetTime();
if(m_Keyboard.GetKeyState(DIK_ESCAPE) == TRUE)
{
return FALSE;
}
static DWORD Timer = timeGetTime();
float Elapsed;
Elapsed = (timeGetTime() - Timer)/800.0;
Timer = timeGetTime();
switch(m_AppState)
{
case APPSTATE_SELF:
RenderFrame( Elapsed );
return TRUE;
case APPSTATE_AI:
RenderThinkFrame( Elapsed );
return TRUE;
case APPSTATE_GAMEOVER:
GameOver( Elapsed );
return TRUE;
case APPSTATE_ANIMATION:
RenderAnimationFrame( Elapsed );
return TRUE;
case APPSTATE_GAMEMENU:
return GameMenu();
}
return TRUE;
}
BOOL cChess::Shutdown()
{
short int i;
for( i=0; i<33; i++ )
m_ChessObjects[i].Free();
for( i=0; i<7; i++ )
m_ChessMeshes[i].Free();
m_PickMeshes[0].Free();
m_PickMeshes[1].Free();
for( i=0; i<30; i++ )
m_PickGreenObjects[i].Free();
for( i=0; i<8; i++ )
m_PickRedObjects[i].Free();
m_Buttons[0].Free();
m_Buttons[1].Free();
m_Buttons[2].Free();
m_Buttons[3].Free();
m_MenuButtons.Free();
m_MenuVB.Free();
m_MenuTexture.Free();
m_MenuSelect.Free();
m_MenuFont.Free();
// 释放声音
m_MusicChannel.Free();
m_SoundChannel.Free();
m_Sound.Shutdown();
m_Font.Free();
m_StateFont.Free();
m_Mouse.Free();
m_Keyboard.Free();
m_Input.Shutdown();
m_Graphics.Shutdown();
return TRUE;
}
BOOL cChess::GameMenu()
{
long x, y;
BOOL PreOne,PreTwo,PreThe;
BOOL PickOne,PickTwo,PickThe;
PreOne = PreTwo = PreThe = PickOne = PickTwo = PickThe = FALSE;
x = m_Mouse.GetXPos();
y = m_Mouse.GetYPos();
if(x >= 450 && x < 578 && y >= 310 && y < 334)
{
if(m_Mouse.GetButtonState(0))
PreOne = TRUE;
PickOne = TRUE;
}
if(x >= 450 && x < 578 && y >= 350 && y < 374)
{
if(m_Mouse.GetButtonState(0))
PreTwo = TRUE;
PickTwo = TRUE;
}
if(x >= 450 && x < 578 && y >= 390 && y < 414)
{
if(m_Mouse.GetButtonState(0))
PreThe = TRUE;
PickThe = TRUE;
}
if(PreOne)
{
m_Graphics.Get3DDevice()->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(128,128,128,255), 1.0f, 0);
if(SUCCEEDED(m_Graphics.Get3DDevice()->BeginScene()))
{
m_StateFont.Print("正在加载...",0,0,m_Graphics.GetWidth(),m_Graphics.GetHeight() , 0xffffff00,DT_CENTER|DT_VCENTER);
m_Font.Print("左键选棋子\n右键移动\nR 重整棋盘位置",0,m_Graphics.GetHeight()-100,m_Graphics.GetWidth(),m_Graphics.GetHeight(),0xffffff00,DT_CENTER);
m_Graphics.Get3DDevice()->EndScene();
}
m_Graphics.Get3DDevice()->Present(NULL, NULL, NULL, NULL);
m_Buttons[0].Load(&m_Graphics, "Data\\b_rotl_pressed.tga", D3DCOLOR_RGBA(0,0,0,255));
m_Buttons[1].Load(&m_Graphics, "Data\\b_rotr_pressed.tga", D3DCOLOR_RGBA(0,0,0,255));
m_Buttons[2].Load(&m_Graphics, "Data\\b_rotl_hover_pressed.tga", D3DCOLOR_RGBA(0,0,0,255));
m_Buttons[3].Load(&m_Graphics, "Data\\b_rotr_hover_pressed.tga", D3DCOLOR_RGBA(0,0,0,255));
m_ChessMeshes[0].Load( &m_Graphics, "Data\\棋盘.x", "Data\\" );
m_ChessMeshes[1].Load( &m_Graphics, "Data\\车.x", "Data\\" );
m_ChessMeshes[2].Load( &m_Graphics, "Data\\马.x", "Data\\" );
m_ChessMeshes[3].Load( &m_Graphics, "Data\\象.x", "Data\\" );
m_ChessMeshes[4].Load( &m_Graphics, "Data\\王后.x", "Data\\" );
m_ChessMeshes[5].Load( &m_Graphics, "Data\\国王.x", "Data\\" );
m_ChessMeshes[6].Load( &m_Graphics, "Data\\兵.x", "Data\\" );
m_PickMeshes[0].Load( &m_Graphics, "Data\\PickGreen.x", "Data\\" );
m_PickMeshes[1].Load( &m_Graphics, "Data\\PickRed.x", "Data\\" );
OriginalPosition();
m_Graphics.EnableZBuffer(TRUE);
m_Graphics.Get3DDevice()->SetRenderState(D3DRS_LIGHTING, true);
m_AppState = APPSTATE_SELF;
return TRUE;
}
if(PreThe)
return FALSE;
m_MenuCam.Point(0.0f, 0.0f, -350.0f, 0.0f, 0.0f, 0.0f);
m_Graphics.Get3DDevice()->SetRenderState(D3DRS_LIGHTING, false);
m_Graphics.Get3DDevice()->SetTransform( D3DTS_VIEW, m_MenuCam.GetMatrix());
m_Graphics.Get3DDevice()->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_RGBA(128,128,128,255), 1.0f, 0);
m_Graphics.Get3DDevice()->BeginScene();
m_Graphics.EnableZBuffer(FALSE);
m_Graphics.Get3DDevice()->SetTexture(0, m_MenuTexture.GetTexDevice());
m_MenuVB.Render(0, 2, D3DPT_TRIANGLESTRIP);
m_MenuButtons.Blit(450,310,0,0);
m_MenuButtons.Blit(450,350,0,0);
m_MenuButtons.Blit(450,390,0,0);
if(PickOne)
m_MenuSelect.Blit(450,310,0,0);
if(PickTwo)
m_MenuSelect.Blit(450,350,0,0);
if(PickThe)
m_MenuSelect.Blit(450,390,0,0);
m_MenuFont.Print("开新局", 450, 310, 128, 30, 0xFFFFFF00, DT_CENTER|DT_VCENTER);
m_MenuFont.Print("棋局设置",450,350,128,30,0xFFFFFF00,DT_CENTER|DT_VCENTER);
m_MenuFont.Print("退出",450,390,128,30,0xFFFFFF00,DT_CENTER|DT_VCENTER);
m_MenuFont.Print("V 0.8",0,400,100,100);
m_Graphics.Get3DDevice()->EndScene();
m_Graphics.Get3DDevice()->Present(NULL, NULL, NULL, NULL);
return TRUE;
}
BOOL cChess::GameOver( float Elapsed )
{
char Stats[1024];
DWORD i,j;
m_Camera.Point( m_xPos * sinf(ROTATE), 3.0f, m_zPos * cosf(ROTATE), 0.0f, 0.0f, 0.0f );
m_Graphics.Get3DDevice()->SetTransform( D3DTS_VIEW, m_Camera.GetMatrix());
m_Graphics.Get3DDevice()->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(128,128,128,255), 1.0f, 0);
m_Graphics.Get3DDevice()->BeginScene();
m_ChessObjects[0].Render( FALSE );
for(i=1; i<17; i++ )
if( g_IsDisplay[i] )
m_ChessObjects[i].Render( TRUE );
for(j=17; j<33; j++ )
if( g_IsDisplay[j] )
m_ChessObjects[j].Render( FALSE );
m_Buttons[0].Blit(0,412,0,0);
m_Buttons[1].Blit(604,412,0,0);
if( m_bMyWin )
m_StateFont.Print("Win!",0,0,m_Graphics.GetWidth(),m_Graphics.GetHeight() , 0xffffff00,DT_CENTER|DT_VCENTER);
else
m_StateFont.Print("Game Over",0,0,m_Graphics.GetWidth(),m_Graphics.GetHeight() , 0xffffff00,DT_CENTER|DT_VCENTER);
sprintf(Stats, "FPS:%f", m_FPS );
m_Font.Print(Stats,0,0,400,100);
m_Graphics.Get3DDevice()->EndScene();
m_Graphics.Get3DDevice()->Present(NULL, NULL, NULL, NULL);
static FLOAT LastTime = 0.0f;
static DWORD Frames = 0L;
FLOAT Time = Timer();
++Frames;
if( Time - LastTime > 1.0f )
{
m_FPS = Frames / (Time - LastTime);
LastTime = Time;
Frames = 0L;
}
return TRUE;
}
BOOL cChess::RenderFrame( float Elapsed )
{
int i,j;
char Stats[1024];
BOOL RotLeft,RotRight;
RotLeft = RotRight = FALSE;
long x, y;
x = m_Mouse.GetXPos();
y = m_Mouse.GetYPos();
if( m_Keyboard.GetKeyState( DIK_R ) == TRUE )
{
ROTATE = 0.0f;
}
PickChessman();
PickMove();
if(x >= 0 && x < 32 && y >= 412 && y < 444)
{
if(m_Mouse.GetButtonState(0))
ROTATE -= 0.087266f;
RotLeft = TRUE;
}
if(x >= 604 && x < 636 && y >= 412 && y < 444)
{
if(m_Mouse.GetButtonState(0))
ROTATE += 0.087266f;
RotRight = TRUE;
}
m_Camera.Point( m_xPos * sinf(ROTATE), 3.0f, m_zPos * cosf(ROTATE), 0.0f, 0.0f, 0.0f );
m_Graphics.Get3DDevice()->SetTransform( D3DTS_VIEW, m_Camera.GetMatrix());
m_Graphics.Get3DDevice()->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(128,128,128,255), 1.0f, 0);
m_Graphics.Get3DDevice()->BeginScene();
m_ChessObjects[0].Render( FALSE );
for(i=1; i<17; i++ )
if( g_IsDisplay[i] )
m_ChessObjects[i].Render( TRUE );
for(j=17; j<33; j++ )
if( g_IsDisplay[j] )
m_ChessObjects[j].Render( FALSE );
m_Buttons[0].Blit(0,412,0,0);
m_Buttons[1].Blit(604,412,0,0);
if(RotLeft)
m_Buttons[2].Blit(0,412,0,0);
if(RotRight)
m_Buttons[3].Blit(604,412,0,0);
if( m_Pick )
{
m_Graphics.EnableAlphaTesting(TRUE);
m_Graphics.EnableAlphaBlending(TRUE);
for( i=0; i<30; i++ )
if( m_PickGreenDisplay[i] )
m_PickGreenObjects[i].Render( FALSE );
for( i=0; i<8; i++ )
if( m_PickRedDisplay[i] )
m_PickRedObjects[i].Render( FALSE );
m_Graphics.EnableAlphaBlending(FALSE);
m_Graphics.EnableAlphaTesting(FALSE);
}
sprintf(Stats, "FPS:%f", m_FPS );
m_Font.Print(Stats,0,0,400,100);
m_Font.Print("到我走棋啦!",0,20,100,100);
m_Graphics.Get3DDevice()->EndScene();
m_Graphics.Get3DDevice()->Present(NULL, NULL, NULL, NULL);
static FLOAT LastTime = 0.0f;
static DWORD Frames = 0L;
FLOAT Time = Timer();
++Frames;
if( Time - LastTime > 1.0f )
{
m_FPS = Frames / (Time - LastTime);
LastTime = Time;
Frames = 0L;
}
return TRUE;
}
BOOL cChess::RenderThinkFrame( float Elapsed )
{
int resultman=0;
POINT resultpoint={-1,-1};
BOOL flag;
if(SUCCEEDED(m_Graphics.Get3DDevice()->BeginScene()))
{
m_Font.Print("AI思考中...",0,20,100,100);
m_Graphics.Get3DDevice()->EndScene();
}
m_Graphics.Get3DDevice()->Present(NULL, NULL, NULL, NULL);
flag = Think( resultman, resultpoint );
if( flag )
{
m_CalcuateXMove = g_XCoordinateToPosition[resultpoint.x];
m_CalcuateZMove = g_ZCoordinateToPosition[resultpoint.y];
m_CalcuateMoveChessman = resultman;
m_Pick = resultman;
m_Side = 1;
CalcuateSourceTarget(m_CalcuateXMove, m_CalcuateZMove );
PlaySound(0);
m_AppState = APPSTATE_ANIMATION;
}
else
{
m_bEndGame = TRUE;
m_bMyWin = TRUE;
StopMusic();
m_AppState = APPSTATE_GAMEOVER;
}
return FALSE;
}
void cChess::QuickSort( int A[], int chessman[], POINT targetpoint[], int low, int high )
{
int pivot;
int pivot_man;
POINT pivot_point;
int scanUp, scanDown;
int mid, k;
POINT point;
if(high-low<=0) return;
else
{
if(high-low==1)
{
if(A[high]>A[low])
{
k=A[high];
A[high]=A[low];
A[low]=k;
k=chessman[high];
chessman[high]=chessman[low];
chessman[low]=k;
point=targetpoint[high];
targetpoint[high]=targetpoint[low];
targetpoint[low]=point;
return;
}
}
}
mid=(low+high)/2;
pivot=A[mid];
pivot_man=chessman[mid];
pivot_point=targetpoint[mid];
k=A[mid];
A[mid]=A[low];
A[low]=k;
k=chessman[mid];
chessman[mid]=chessman[low];
chessman[low]=k;
point=targetpoint[mid];
targetpoint[mid]=targetpoint[low];
targetpoint[low]=point;
scanUp = low+1;
scanDown = high;
do
{
while(scanUp<=scanDown && A[scanUp]>=pivot)
scanUp++;
while(pivot>A[scanDown])
scanDown--;
if(scanUp2)
{
int value[125];
cur=0;
maxvalue=-10000;
while(curmaxvalue)maxvalue=curvalue;
cur++;
}
QuickSort(value,chessman,targetpoint,0,count-1);
count/=2;
}
maxvalue=-10000;
cur=0;
while(curmaxvalue)
{
maxvalue=curvalue;
resultman=chessman[cur];
resultpoint=targetpoint[cur];
}
cur++;
}
return TRUE;
}
else
{
if(count>0)
{
resultman=chessman[count-1];
resultpoint=targetpoint[count-1];
return TRUE;
}
else
{
resultman=0;
resultpoint.x=-1;
return FALSE;
}
}
}
int cChess::Search( int map[8][8], POINT manposition[33], BOOL tisfirstmove[33],int &tside,int man, POINT point, int upmax, int depth )
{
int ate,cur,maxvalue,curvalue,xs,ys;
int count;
ate = 0;
xs=manposition[man].x;ys=manposition[man].y;
if(SideOfMan[map[point.x][point.y]] == !tside) // 目标点有对方的棋子
{
ate=map[point.x][point.y]; // 记录下被吃掉的棋子
if(ate==13 || ate==29)
{
return 9999;
}
manposition[ate].x=-1; // 目标点的棋子被吃掉
}
depth--;
map[point.x][point.y] = man;
map[xs][ys] = 0;
manposition[man] = point;
tisfirstmove[man] = TRUE;
tside=!tside; // 假设对方行一步
if(depth>0)
{
int chessman[125];
POINT targetpoint[125];
if(EnumList(map, manposition, tisfirstmove,tside,chessman, targetpoint, count) )
{
if(depth>=2)
{
int value[125];
cur=0;
maxvalue=-10000;
while(curmaxvalue) maxvalue=curvalue;
cur++;
}
QuickSort(value, chessman, targetpoint, 0, count-1);
count/=2;
}
maxvalue=-10000;
cur=0;
while(curmaxvalue) maxvalue=curvalue;
if(curvalue>=-upmax) goto _ENDSUB;
cur++;
}
}
else maxvalue=9800;
}
else
maxvalue=Envalue(map, manposition, tisfirstmove,tside);
_ENDSUB:
manposition[man].x=xs;
manposition[man].y=ys;
map[xs][ys]=man;
if(SideOfMan[man] )
{
if( manposition[man].y == 6 )
tisfirstmove[man]=FALSE;
}
else
{
if( manposition[man].y == 1 )
tisfirstmove[man]=FALSE;
}
if(ate!=0)
{
manposition[ate]=point;
map[point.x][point.y]=ate;
}
else
map[point.x][point.y] = 0;
tside = !tside;
return -maxvalue;
}
int cChess::Envalue( int map[8][8], POINT manposition[33], BOOL tisfirstmove[33], int &tside )
{
static int k;
static int ManExtValue[33];
static int ManBaseValue[33];
static int ManContact[33][33];
static int BeAteCount[33];
static BOOL OwnSee[33];
for( int n=0; n<33; n++ )
{
ManExtValue[n]=0;
ManBaseValue[n]=0;
BeAteCount[n]=0;
OwnSee[n]=0;
for( int m=0; m<33; m++)
ManContact[n][m]=0;
}
int maxvalue=0;
int i,j;
ContactV( map, manposition, tisfirstmove, tside, ManBaseValue, ManContact );
// 已方将军
for(i=FistOfSide[tside];i<=LastOfSide[tside];i++)
{
if(ManContact[i][KingOfSide[!tside]])
{
maxvalue=9700;
return maxvalue;
}
}
// 根据每个棋子的活跃度,自身的值,以及所在的位置,来确定最终的值.
for(i=1;i<33;i++)
{
k=g_ChessmanType[i-1];
ManBaseValue[i]=BV1[k-1]+ManBaseValue[i]*BV2[k-1];
switch(k)
{
case 6: ManBaseValue[i]+=BV3[ManBPlus[SideOfMan[i]][manposition[i].x+1][manposition[i].y+1]];
break;
}
}
for(i=1;i<33;i++)
{
for(j=1;j<33;j++)
{
if(ManContact[i][j])
{
if(SideOfMan[i]==SideOfMan[j])
{
// 第j号棋子被攻击一次
BeAteCount[j]++;
if(!OwnSee[j])
{
// 得到攻击者的防御值
ManExtValue[i]+=ManBaseValue[j]*contactpercent1/100;
OwnSee[j]=TRUE;
}
}
else
{
ManExtValue[i]+=ManBaseValue[j]*contactpercent2/100;
BeAteCount[j]--;
}
}
}
}
for(i=FistOfSide[tside];i<=LastOfSide[tside];i++)
{
if(manposition[i].x!=-1)maxvalue+=ManBaseValue[i]+ManExtValue[i];
}
static BOOL flag;
flag=FALSE;k=0;
for(i=FistOfSide[!tside];i<=LastOfSide[!tside];i++)
{
if(manposition[i].x!=-1)maxvalue-=ManBaseValue[i]+ManExtValue[i];
// 对方将军
if(ManContact[i][KingOfSide[tside]])
{
flag=TRUE;
k=i;
break;
}
}
if(flag&&BeAteCount[k]>=0) // 被将,所将军的棋子不能被吃掉
{
j=0;
for(i=FistOfSide[tside];i<=LastOfSide[tside];i++)
{
if(BeAteCount[i]<0 && ManBaseValue[i]>j)
j=ManBaseValue[i];
}
maxvalue -=j;
}
else
{
j=0;
for(i=FistOfSide[!tside];i<=LastOfSide[!tside];i++)
{
if(BeAteCount[i]<0 && ManBaseValue[i]>j)
j=ManBaseValue[i];
}
maxvalue +=j;
}
return maxvalue;
}
void cChess::ContactV( int map[8][8], POINT manposition[], BOOL tisfirstmove[33],int &tside, int activity[33], int contact[33][33] )
{
#define CV(man,tx,ty) {k=map[tx][ty];activity[man]+=1;if(k!=0)contact[man][k]=1;}
static int k;
static int i,j,n,x,y;
static BOOL flag;
for(n=1;n<=32;n++)
{
x=manposition[n].x;
if(x==-1) continue;
y=manposition[n].y;
switch(g_ChessmanType[n-1])
{
case 1:
i=x+1;
while(i<=7)
{
if(NOMAN(i,y)) CV(n,i,y)
else
{
CV(n,i,y)
break;
}
i++;
}
i=x-1;
while(i>=0)
{
if(NOMAN(i,y)) CV(n,i,y)
else
{
CV(n,i,y)
break;
}
i--;
}
j=y+1;
while(j<=7)
{
if(NOMAN(x,j)) CV(n,x,j)
else
{
CV(n,x,j)
break;
}
j++;
}
j=y-1;
while(j>=0)
{
if(NOMAN(x,j)) CV(n,x,j)
else
{
CV(n,x,j)
break;
}
j--;
}
break;
case 2:
j=y-2;i=x+1;if(j>=0 && i<=7) CV(n,i,j)
j=y-2;i=x-1;if(j>=0 && i>=0) CV(n,i,j)
j=y-1;i=x+2;if(j>=0 && i<=7) CV(n,i,j)
j=y-1;i=x-2;if(j>=0 && i>=0) CV(n,i,j)
j=y+1;i=x+2;if(j<=7 && i<=7) CV(n,i,j)
j=y+1;i=x-2;if(j<=7 && i>=0) CV(n,i,j)
j=y+2;i=x+1;if(j<=7 && i<=7) CV(n,i,j)
j=y+2;i=x-1;if(j<=7 && i>=0) CV(n,i,j)
break;
case 3:
j=y+1;i=x+1; // 右下
while(j<=7 && i<=7)
{
if(NOMAN(i,j)) CV(n,i,j)
else
{
CV(n,i,j)
break;
}
j++;
i++;
}
j=y+1;i=x-1; // 左下
while(j<=7 && i>=0)
{
if(NOMAN(i,j)) CV(n,i,j)
else
{
CV(n,i,j)
break;
}
j++;
i--;
}
j=y-1;i=x+1;
while(j>=0 && i<=7)
{
if(NOMAN(i,j)) CV(n,i,j)
else
{
CV(n,i,j)
break;
}
j--;
i++;
}
j=y-1;i=x-1;
while(j>=0 && i>=0)
{
if(NOMAN(i,j)) CV(n,i,j)
else
{
CV(n,i,j)
break;
}
j--;
i--;
}
break;
case 4:
i=x+1;
while(i<=7)
{
if(NOMAN(i,y)) CV(n,i,y)
else
{
CV(n,i,y)
break;
}
i++;
}
i=x-1;
while(i>=0)
{
if(NOMAN(i,y)) CV(n,i,y)
else
{
CV(n,i,y)
break;
}
i--;
}
j=y+1;
while(j<=7)
{
if(NOMAN(x,j)) CV(n,x,j)
else
{
CV(n,x,j)
break;
}
j++;
}
j=y-1;
while(j>=0)
{
if(NOMAN(x,j)) CV(n,x,j)
else
{
CV(n,x,j)
break;
}
j--;
}
j=y+1;i=x+1; // 右下
while(j<=7 && i<=7)
{
if(NOMAN(i,j)) CV(n,i,j)
else
{
CV(n,i,j)
break;
}
j++;
i++;
}
j=y+1;i=x-1; // 左下
while(j<=7 && i>=0)
{
if(NOMAN(i,j)) CV(n,i,j)
else
{
CV(n,i,j)
break;
}
j++;
i--;
}
j=y-1;i=x+1;
while(j>=0 && i<=7)
{
if(NOMAN(i,j)) CV(n,i,j)
else
{
CV(n,i,j)
break;
}
j--;
i++;
}
j=y-1;i=x-1;
while(j>=0 && i>=0)
{
if(NOMAN(i,j)) CV(n,i,j)
else
{
CV(n,i,j)
break;
}
j--;
i--;
}
break;
case 5:
j=y+1;if(j<=7) CV(n,x,j)
j=y-1;if(j>=0) CV(n,x,j)
i=x+1;if(i<=7) CV(n,i,y)
i=x-1;if(i>=0) CV(n,i,y)
j=y+1;i=x+1;if(j<=7 && i<=7) CV(n,i,j)
j=y+1;i=x-1;if(j<=7 && i>=0) CV(n,i,j)
j=y-1;i=x+1;if(j>=0 && i<=7) CV(n,i,j)
j=y-1;i=x-1;if(j>=0 && i>=0) CV(n,i,j)
break;
case 6:
if(SideOfMan[n])
{
if( tisfirstmove[n] )
{
j=y-1;if(j>=0 && NOMAN(x,j)) CV(n,x,j)
j=y-1;i=x-1;if(j>=0 && i>=0 && !NOMAN(i,j)) CV(n,i,j)
j=y-1;i=x+1;if(j>=0 && i<=7 && !NOMAN(i,j)) CV(n,i,j)
}
else
{
j=y-1;if(j>=0 && NOMAN(x,j)) CV(n,x,j)
j=y-2;if(j>=0 && NOMAN(x,j)) CV(n,x,j)
j=y-1;i=x-1;if(j>=0 && i>=0 && !NOMAN(i,j)) CV(n,i,j)
j=y-1;i=x+1;if(j>=0 && i<=7 && !NOMAN(i,j)) CV(n,i,j)
}
}
else
{
if( tisfirstmove[n] )
{
j=y+1;if(j<=7 && NOMAN(x,j)) CV(n,x,j)
j=y+1;i=x-1;if(j<=7 && i>=0 && !NOMAN(i,j)) CV(n,i,j)
j=y+1;i=x+1;if(j<=7 && i<=7 && !NOMAN(i,j)) CV(n,i,j)
}
else
{
j=y+1;if(j<=7 && NOMAN(x,j)) CV(n,x,j)
j=y+2;if(j<=7 && NOMAN(x,j)) CV(n,x,j)
j=y+1;i=x-1;if(j<=7 && i>=0 && !NOMAN(i,j)) CV(n,i,j)
j=y+1;i=x+1;if(j<=7 && i<=7 && !NOMAN(i,j)) CV(n,i,j)
}
}
break;
default :
break;
}
}
}
BOOL cChess::EnumList( int map[8][8], POINT manposition[33],BOOL tisfirstmove[33],int &tside,int *chessman, POINT *move, int &count )
{
#define ADD(man,tx,ty) {chessman[count]=man;move[count].x=tx;move[count].y=ty;count++;if(map[tx][ty]==KingOfSide[!tside])goto _NOKING;}
static int i,j,n,x,y;
static BOOL flag;
count=0;
for( n=FistOfSide[tside]; n=0)
{
if(NOMAN(i,y)) ADD(n,i,y)
else
{
if(NOSELF(tside,i,y)) ADD(n,i,y)
break;
}
i--;
}
j=y+1;
while(j<=7)
{
if(NOMAN(x,j)) ADD(n,x,j)
else
{
if(NOSELF(tside,x,j)) ADD(n,x,j)
break;
}
j++;
}
j=y-1;
while(j>=0)
{
if(NOMAN(x,j)) ADD(n,x,j)
else
{
if(NOSELF(tside,x,j)) ADD(n,x,j)
break;
}
j--;
}
break;
case 2:
j=y-2;i=x+1;if(j>=0 && i<=7 && NOSELF(tside,i,j)) ADD(n,i,j)
j=y-2;i=x-1;if(j>=0 && i>=0 && NOSELF(tside,i,j)) ADD(n,i,j)
j=y-1;i=x+2;if(j>=0 && i<=7 && NOSELF(tside,i,j)) ADD(n,i,j)
j=y-1;i=x-2;if(j>=0 && i>=0 && NOSELF(tside,i,j)) ADD(n,i,j)
j=y+1;i=x+2;if(j<=7 && i<=7 && NOSELF(tside,i,j)) ADD(n,i,j)
j=y+1;i=x-2;if(j<=7 && i>=0 && NOSELF(tside,i,j)) ADD(n,i,j)
j=y+2;i=x+1;if(j<=7 && i<=7 && NOSELF(tside,i,j)) ADD(n,i,j)
j=y+2;i=x-1;if(j<=7 && i>=0 && NOSELF(tside,i,j)) ADD(n,i,j)
break;
case 3:
j=y+1;i=x+1; // 右下
while(j<=7 && i<=7)
{
if(NOMAN(i,j)) ADD(n,i,j)
else
{
if(NOSELF(tside,i,j)) ADD(n,i,j)
break;
}
j++;
i++;
}
j=y+1;i=x-1; // 左下
while(j<=7 && i>=0)
{
if(NOMAN(i,j)) ADD(n,i,j)
else
{
if(NOSELF(tside,i,j)) ADD(n,i,j)
break;
}
j++;
i--;
}
j=y-1;i=x+1;
while(j>=0 && i<=7)
{
if(NOMAN(i,j)) ADD(n,i,j)
else
{
if(NOSELF(tside,i,j)) ADD(n,i,j)
break;
}
j--;
i++;
}
j=y-1;i=x-1;
while(j>=0 && i>=0)
{
if(NOMAN(i,j)) ADD(n,i,j)
else
{
if(NOSELF(tside,i,j)) ADD(n,i,j)
break;
}
j--;
i--;
}
break;
case 4:
i=x+1;
while(i<=7)
{
if(NOMAN(i,y)) ADD(n,i,y)
else
{
if(NOSELF(tside,i,y)) ADD(n,i,y)
break;
}
i++;
}
i=x-1;
while(i>=0)
{
if(NOMAN(i,y)) ADD(n,i,y)
else
{
if(NOSELF(tside,i,y)) ADD(n,i,y)
break;
}
i--;
}
j=y+1;
while(j<=7)
{
if(NOMAN(x,j)) ADD(n,x,j)
else
{
if(NOSELF(tside,x,j)) ADD(n,x,j)
break;
}
j++;
}
j=y-1;
while(j>=0)
{
if(NOMAN(x,j)) ADD(n,x,j)
else
{
if(NOSELF(tside,x,j)) ADD(n,x,j)
break;
}
j--;
}
j=y+1;i=x+1; // 右下
while(j<=7 && i<=7)
{
if(NOMAN(i,j)) ADD(n,i,j)
else
{
if(NOSELF(tside,i,j)) ADD(n,i,j)
break;
}
j++;
i++;
}
j=y+1;i=x-1; // 左下
while(j<=7 && i>=0)
{
if(NOMAN(i,j)) ADD(n,i,j)
else
{
if(NOSELF(tside,i,j)) ADD(n,i,j)
break;
}
j++;
i--;
}
j=y-1;i=x+1;
while(j>=0 && i<=7)
{
if(NOMAN(i,j)) ADD(n,i,j)
else
{
if(NOSELF(tside,i,j)) ADD(n,i,j)
break;
}
j--;
i++;
}
j=y-1;i=x-1;
while(j>=0 && i>=0)
{
if(NOMAN(i,j)) ADD(n,i,j)
else
{
if(NOSELF(tside,i,j)) ADD(n,i,j)
break;
}
j--;
i--;
}
break;
case 5:
j=y+1;if(j<=7 && NOSELF(tside,x,j)) ADD(n,x,j)
j=y-1;if(j>=0 && NOSELF(tside,x,j)) ADD(n,x,j)
i=x+1;if(i<=7 && NOSELF(tside,i,y)) ADD(n,i,y)
i=x-1;if(i>=0 && NOSELF(tside,i,y)) ADD(n,i,y)
j=y+1;i=x+1;if(j<=7 && i<=7 && NOSELF(tside,i,j)) ADD(n,i,j)
j=y+1;i=x-1;if(j<=7 && i>=0 && NOSELF(tside,i,j)) ADD(n,i,j)
j=y-1;i=x+1;if(j>=0 && i<=7 && NOSELF(tside,i,j)) ADD(n,i,j)
j=y-1;i=x-1;if(j>=0 && i>=0 && NOSELF(tside,i,j)) ADD(n,i,j)
break;
case 6:
if(tside)
{
if( tisfirstmove[n] )
{
j=y-1;if(j>=0 && NOMAN(x,j) && NOSELF(tside,x,j)) ADD(n,x,j)
j=y-1;i=x-1;if(j>=0 && i>=0 && !NOMAN(i,j) && NOSELF(tside,i,j)) ADD(n,i,j)
j=y-1;i=x+1;if(j>=0 && i<=7 && !NOMAN(i,j) && NOSELF(tside,i,j)) ADD(n,i,j)
}
else
{
j=y-1;i=x-1;if(j>=0 && i>=0 && !NOMAN(i,j) && NOSELF(tside,i,j)) ADD(n,i,j)
j=y-1;i=x+1;if(j>=0 && i<=7 && !NOMAN(i,j) && NOSELF(tside,i,j)) ADD(n,i,j)
j=y-1;
if(j>=0 && NOMAN(x,j) && NOSELF(tside,x,j))
ADD(n,x,j)
else
break;
j=y-2;if(j<=7 && NOMAN(x,j) && NOSELF(tside,x,j)) ADD(n,x,j)
}
}
else
{
if( tisfirstmove[n] )
{
j=y+1;if(j<=7 && NOMAN(x,j) && NOSELF(tside,x,j)) ADD(n,x,j)
j=y+1;i=x-1;if(j<=7 && i>=0 && !NOMAN(i,j) && NOSELF(tside,i,j)) ADD(n,i,j)
j=y+1;i=x+1;if(j<=7 && i<=7 && !NOMAN(i,j) && NOSELF(tside,i,j)) ADD(n,i,j)
}
else
{
j=y+1;i=x-1;if(j<=7 && i>=0 && !NOMAN(i,j) && NOSELF(tside,i,j)) ADD(n,i,j)
j=y+1;i=x+1;if(j<=7 && i<=7 && !NOMAN(i,j) && NOSELF(tside,i,j)) ADD(n,i,j)
j=y+1;
if(j<=7 && NOMAN(x,j) && NOSELF(tside,x,j))
ADD(n,x,j)
else
break;
j=y+2;if(j<=7 && NOMAN(x,j) && NOSELF(tside,x,j)) ADD(n,x,j)
}
}
break;
default :
break;
}
}
return TRUE;
_NOKING:
return FALSE;
}
BOOL cChess::RenderAnimationFrame( float Elapsed )
{
int i,j;
char Stats[128];
BOOL RotLeft,RotRight;
RotLeft = RotRight = FALSE;
long x, y;
x = m_Mouse.GetXPos();
y = m_Mouse.GetYPos();
if( m_Keyboard.GetKeyState( DIK_R ) == TRUE )
{
m_xPos = 0.0f;
m_zPos = -2.5f;
}
if(x >= 0 && x < 32 && y >= 412 && y < 444)
{
RotLeft = TRUE;
}
if(x >= 604 && x < 636 && y >= 412 && y < 444)
{
RotRight = TRUE;
}
CalculateMove( Elapsed );
m_Camera.Point( m_xPos * sinf(ROTATE), 3.0f, m_zPos * cosf(ROTATE), 0.0f, 0.0f, 0.0f );
m_Graphics.Get3DDevice()->SetTransform( D3DTS_VIEW, m_Camera.GetMatrix());
m_Graphics.Get3DDevice()->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(128,128,128,255), 1.0f, 0);
m_Graphics.Get3DDevice()->BeginScene();
m_ChessObjects[0].Render( FALSE );
for(i=1; i<17; i++ )
if( g_IsDisplay[i] )
m_ChessObjects[i].Render( TRUE );
for(j=17; j<33; j++ )
if( g_IsDisplay[j] )
m_ChessObjects[j].Render( FALSE );
m_Buttons[0].Blit(0,412,0,0);
m_Buttons[1].Blit(604,412,0,0);
if(RotLeft)
m_Buttons[2].Blit(0,412,0,0);
if(RotRight)
m_Buttons[3].Blit(604,412,0,0);
sprintf(Stats, "FPS:%f", m_FPS );
m_Font.Print(Stats,0,0,400,100);
m_Graphics.Get3DDevice()->EndScene();
m_Graphics.Get3DDevice()->Present(NULL, NULL, NULL, NULL);
static FLOAT LastTime = 0.0f;
static DWORD Frames = 0L;
FLOAT Time = Timer();
++Frames;
if( Time - LastTime > 1.0f )
{
m_FPS = Frames / (Time - LastTime);
LastTime = Time;
Frames = 0L;
}
return TRUE;
}
BOOL cChess::PickChessman()
{
D3DXMATRIX *matPick;
long i;
if( m_bEndGame ) return TRUE;
if( m_Mouse.GetButtonState(0) )
{
// 只能选择我方棋子
for( i=17; i<33; i++ )
{
if( GetMouseHitMesh( i, NULL ))
{
m_IsPick = TRUE;
m_Pick = i;
matPick = m_ChessObjects[i].GetMatrix();
m_PickGreenObjects[0].Move( matPick->_41, 0.0f, matPick->_43);
CheckMove(); // 检查可行区域
break;
}
}
}
if( !m_IsPick )
{
for( i=1; i<33; i++ )
{
if( GetMouseHitMesh( i, NULL ))
{
m_Pick = i;
matPick = m_ChessObjects[i].GetMatrix();
m_PickGreenObjects[0].Move( matPick->_41, 0.0f, matPick->_43);
break;
}
// 如果鼠标没有选中,则消去标记
m_Pick = 0;
}
}
return FALSE;
}
BOOL cChess::PickMove()
{
DWORD Face = 0;
DWORD Result;
float xMove, zMove;
if( m_bEndGame ) return TRUE;
if( m_Pick )
{
if( m_Mouse.GetButtonState(1) )
{
if( GetMouseHitMesh( 0,&Face ))
{
Result = Face/16;
if( Result < 4 ) zMove = -(0.125 +(3-Result)*0.25);
else zMove = (0.125 + (Result-4)*0.25);
Result = Face % 16;
if( (Result %2)==0) Result +=1;
if( Result <= 7 ) xMove = -(0.125 + (7-Result)/2*0.25);
else xMove = ( 0.125 + (Result%9)/2*0.25);
CalcuateSourceTarget( xMove, zMove );
if( g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[m_xTarget][m_zTarget] == -1 )
return FALSE;
m_CalcuateXMove = xMove;
m_CalcuateZMove = zMove;
m_CalcuateMoveChessman = m_Pick;
m_Pick = 0;
m_Side = 0;
PlaySound(0);
m_AppState = APPSTATE_ANIMATION;
}
}
}
return FALSE;
}
void cChess::CalcuateSourceTarget( float xMove, float zMove )
{
long i,j;
for( i=0; i<8; i++ )
if( g_XCoordinateToPosition[i] == xMove )
{
m_xTarget = i;
break;
}
for( j=0; j<8; j++ )
if( g_ZCoordinateToPosition[j] == zMove )
{
m_zTarget = j;
break;
}
for( i=0; i<8; i++ )
if( g_XCoordinateToPosition[i] == m_ChessObjects[m_Pick].GetXPos() )
{
m_xSource = i;
break;
}
for( j=0; j<8; j++ )
if( g_ZCoordinateToPosition[j] == m_ChessObjects[m_Pick].GetZPos() )
{
m_zSource = j;
break;
}
}
BOOL cChess::CalculateMove( float Elapsed )
{
D3DXMATRIX *matPick;
float xMove, zMove;
float XDiff, ZDiff, Dist;
long i;
if( !m_CalcuateXMove && !m_CalcuateZMove )
return FALSE;
matPick = m_ChessObjects[m_CalcuateMoveChessman].GetMatrix();
XDiff = fabs(m_CalcuateXMove - matPick->_41);
ZDiff = fabs(m_CalcuateZMove - matPick->_43);
Dist = sqrt(XDiff*XDiff + ZDiff*ZDiff);
xMove = (m_CalcuateXMove - matPick->_41) / Dist * 0.06f;
zMove = (m_CalcuateZMove - matPick->_43) / Dist * 0.06f;
m_ChessObjects[m_CalcuateMoveChessman].Move( matPick->_41 + xMove, 0.0f, matPick->_43 + zMove );
Dist -= 0.06f;
if( Dist < 0 )
{
m_ChessObjects[m_CalcuateMoveChessman].Move( m_CalcuateXMove, 0.0f, m_CalcuateZMove );
g_IsDisplay[g_ChessmanMap[m_xTarget][m_zTarget]] = 0;
g_PointChessman[g_ChessmanMap[m_xTarget][m_zTarget]].x = -1;
g_PointChessman[g_ChessmanMap[m_xTarget][m_zTarget]].y = -1;
g_ChessmanMap[m_xTarget][m_zTarget] = m_CalcuateMoveChessman; // 设置地图同步
g_ChessmanMap[m_xSource][m_zSource] = 0; // 将源坐标清零
g_PointChessman[m_CalcuateMoveChessman].x = m_xTarget;
g_PointChessman[m_CalcuateMoveChessman].y = m_zTarget;
// 兵走到底变王后
if(g_ChessmanType[m_CalcuateMoveChessman-1] == 6 && (g_PointChessman[m_CalcuateMoveChessman].y == 7 || g_PointChessman[m_CalcuateMoveChessman].y == 0))
{
g_ChessmanType[m_CalcuateMoveChessman-1] = 4;
m_ChessObjects[m_CalcuateMoveChessman].SetMesh(&m_ChessMeshes[4]);
}
m_xTarget = -1;m_zTarget = -1;
m_xSource = -1;m_zSource = -1;
// 清除显示标记
for( i=1; i<30; i++ )
m_PickGreenDisplay[i] = FALSE;
for( i=0; i<8; i++ )
m_PickRedDisplay[i] = FALSE;
m_IsFirstMove[m_CalcuateMoveChessman] = TRUE;
m_CalcuateXMove = m_CalcuateZMove = 0.0f;
m_CalcuateMoveChessman = 0;
m_Pick = 0;
m_IsPick = FALSE;
RenderAnimationFrame(0);
if( g_PointChessman[13].x == -1 )
{
m_bEndGame = TRUE;
m_bMyWin = TRUE;
StopMusic();
m_AppState = APPSTATE_GAMEOVER;
}
else
if( g_PointChessman[29].x == -1 )
{
m_bEndGame = TRUE;
m_bMyWin = FALSE;
StopMusic();
m_AppState = APPSTATE_GAMEOVER;
}
else
{
if( m_Side )
m_AppState = APPSTATE_SELF;
else
m_AppState = APPSTATE_AI;
}
return TRUE;
}
return TRUE;
}
BOOL cChess::CheckMove()
{
POINT CanGoPoint;
long i,Flag=0;
// 清除显示标记
for( i=1; i<30; i++ ) m_PickGreenDisplay[i] = FALSE;
for( i=0; i< 8; i++ ) m_PickRedDisplay[i] = FALSE;
for( i=0; i<33; i++ ) g_sChessmanCanGoMap[i].Reset();
if( !m_Pick ) return FALSE;
CanGoPoint = g_PointChessman[m_Pick];
if( CanGoPoint.x == -1 && CanGoPoint.y == -1 ) return FALSE;
switch( g_ChessmanType[m_Pick-1] )
{
case 1:
// 向上
for( i=1; i<8; i++ )
if( (CanGoPoint.y-i) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-i] == 0 )
{
m_PickGreenObjects[i].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickGreenDisplay[i] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y-i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-i] >0 && g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-i] < 17 )
{
// 一条线路只有一个棋子可能被吃
m_PickRedObjects[0].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickRedDisplay[0] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y-i] = g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 向下
for( i=1; i<8; i++ )
if( (CanGoPoint.y+i) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+i] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y+i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+i] >0 && g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+i] < 17 )
{
m_PickRedObjects[1].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickRedDisplay[1] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y+i] = g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 向左
for( i=1; i<8; i++ )
if( (CanGoPoint.x-i) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y] >0 && g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y] < 17 )
{
m_PickRedObjects[2].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickRedDisplay[2] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y] = g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 向右
for( i=1; i<8; i++ )
if( (CanGoPoint.x+i) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y] >0 && g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y] < 17 )
{
m_PickRedObjects[3].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickRedDisplay[3] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y] = g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
break;
case 2: // 马
// 左上
if( (CanGoPoint.x-1) >= 0 && (CanGoPoint.y-2) >= 0 )
if( g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y-2] == 0 )
{
m_PickGreenObjects[1].Move( g_XCoordinateToPosition[CanGoPoint.x-1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-2] );
m_PickGreenDisplay[1] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y-2] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y-2] > 0 && g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y-2] < 17 )
{
m_PickRedObjects[0].Move( g_XCoordinateToPosition[CanGoPoint.x-1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-2] );
m_PickRedDisplay[0] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y-2] = g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y-2];
}
// 右上
if( (CanGoPoint.x+1) <= 7 && (CanGoPoint.y-2) >= 0 )
if( g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y-2] == 0 )
{
m_PickGreenObjects[2].Move( g_XCoordinateToPosition[CanGoPoint.x+1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-2] );
m_PickGreenDisplay[2] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+1][CanGoPoint.y-2] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y-2] > 0 && g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y-2] < 17 )
{
m_PickRedObjects[1].Move( g_XCoordinateToPosition[CanGoPoint.x+1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-2] );
m_PickRedDisplay[1] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+1][CanGoPoint.y-2] = g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y-2];
}
// 左上中
if( (CanGoPoint.x-2) >= 0 && (CanGoPoint.y-1) >=0 )
if( g_ChessmanMap[CanGoPoint.x-2][CanGoPoint.y-1] == 0 )
{
m_PickGreenObjects[3].Move( g_XCoordinateToPosition[CanGoPoint.x-2], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickGreenDisplay[3] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-2][CanGoPoint.y-1] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-2][CanGoPoint.y-1] > 0 && g_ChessmanMap[CanGoPoint.x-2][CanGoPoint.y-1] < 17 )
{
m_PickRedObjects[2].Move( g_XCoordinateToPosition[CanGoPoint.x-2], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickRedDisplay[2] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-2][CanGoPoint.y-1] = g_ChessmanMap[CanGoPoint.x-2][CanGoPoint.y-1];
}
// 右上中
if( (CanGoPoint.x+2) <= 7 && (CanGoPoint.y-1) >= 0 )
if( g_ChessmanMap[CanGoPoint.x+2][CanGoPoint.y-1] == 0 )
{
m_PickGreenObjects[4].Move( g_XCoordinateToPosition[CanGoPoint.x+2], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickGreenDisplay[4] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+2][CanGoPoint.y-1] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+2][CanGoPoint.y-1] > 0 && g_ChessmanMap[CanGoPoint.x+2][CanGoPoint.y-1] < 17 )
{
m_PickRedObjects[3].Move( g_XCoordinateToPosition[CanGoPoint.x+2], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickRedDisplay[3] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+2][CanGoPoint.y-1] = g_ChessmanMap[CanGoPoint.x+2][CanGoPoint.y-1];
}
// 左下中
if( (CanGoPoint.x-2) >= 0 && (CanGoPoint.y+1) <= 7 )
if( g_ChessmanMap[CanGoPoint.x-2][CanGoPoint.y+1] == 0 )
{
m_PickGreenObjects[5].Move( g_XCoordinateToPosition[CanGoPoint.x-2], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+1] );
m_PickGreenDisplay[5] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-2][CanGoPoint.y+1] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-2][CanGoPoint.y+1] > 0 && g_ChessmanMap[CanGoPoint.x-2][CanGoPoint.y+1] < 17 )
{
m_PickRedObjects[4].Move( g_XCoordinateToPosition[CanGoPoint.x-2], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+1] );
m_PickRedDisplay[4] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-2][CanGoPoint.y+1] = g_ChessmanMap[CanGoPoint.x-2][CanGoPoint.y+1];
}
// 右下中
if( (CanGoPoint.x+2) <= 7 && (CanGoPoint.y+1) <= 7 )
if( g_ChessmanMap[CanGoPoint.x+2][CanGoPoint.y+1] == 0 )
{
m_PickGreenObjects[6].Move( g_XCoordinateToPosition[CanGoPoint.x+2], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+1] );
m_PickGreenDisplay[6] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+2][CanGoPoint.y+1] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+2][CanGoPoint.y+1] > 0 && g_ChessmanMap[CanGoPoint.x+2][CanGoPoint.y+1] < 17 )
{
m_PickRedObjects[5].Move( g_XCoordinateToPosition[CanGoPoint.x+2], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+1] );
m_PickRedDisplay[5] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+2][CanGoPoint.y+1] = g_ChessmanMap[CanGoPoint.x+2][CanGoPoint.y+1];
}
// 左下
if( (CanGoPoint.x-1) >= 0 && (CanGoPoint.y+2) <= 7 )
if( g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y+2] == 0 )
{
m_PickGreenObjects[7].Move( g_XCoordinateToPosition[CanGoPoint.x-1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+2] );
m_PickGreenDisplay[7] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y+2] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y+2] >0 && g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y+2] < 17 )
{
m_PickRedObjects[6].Move( g_XCoordinateToPosition[CanGoPoint.x-1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+2] );
m_PickRedDisplay[6] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y+2] = g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y+2];
}
// 右下
if( (CanGoPoint.x+1) <= 7 && (CanGoPoint.y+2) <= 7 )
if( g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y+2] == 0 )
{
m_PickGreenObjects[8].Move( g_XCoordinateToPosition[CanGoPoint.x+1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+2] );
m_PickGreenDisplay[8] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+1][CanGoPoint.y+2] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y+2] >0 && g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y+2] < 17 )
{
m_PickRedObjects[7].Move( g_XCoordinateToPosition[CanGoPoint.x+1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+2] );
m_PickRedDisplay[7] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y+2] = g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y+2];
}
break;
case 3:
// 左上
for( i=1; i<8; i++ )
if( (CanGoPoint.x-i) >= 0 && (CanGoPoint.y-i) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y-i] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y-i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y-i] >0 && g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y-i] < 17 )
{
m_PickRedObjects[0].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickRedDisplay[0] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y-i] = g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y-i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 右上
for( i=1; i<8; i++ )
if( (CanGoPoint.x+i) <= 7 && (CanGoPoint.y-i) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y-i] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y-i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y-i] >0 && g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y-i] < 17 )
{
m_PickRedObjects[1].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickRedDisplay[1] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y-i] = g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y-i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 左下
for( i=1; i<8; i++ )
if( (CanGoPoint.x-i) >= 0 && (CanGoPoint.y+i) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y+i] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y+i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y+i] >0 && g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y+i] < 17 )
{
m_PickRedObjects[2].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickRedDisplay[2] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y+i] = g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y+i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 右下
for( i=1; i<8; i++ )
if( (CanGoPoint.x+i) <= 7 && (CanGoPoint.y+i) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y+i] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y+i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y+i] >0 && g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y+i] < 17 )
{
m_PickRedObjects[3].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickRedDisplay[3] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y+i] = g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y+i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
break;
case 4:
// 向上
for( i=1; i<8; i++ )
if( (CanGoPoint.y-i) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-i] == 0 )
{
m_PickGreenObjects[i].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickGreenDisplay[i] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y-i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-i] >0 && g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-i] < 17 )
{
// 一条线路只有一个棋子可能被吃
m_PickRedObjects[0].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickRedDisplay[0] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y-i] = g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 向下
for( i=1; i<8; i++ )
if( (CanGoPoint.y+i) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+i] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y+i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+i] >0 && g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+i] < 17 )
{
m_PickRedObjects[1].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickRedDisplay[1] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y+i] = g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 向左
for( i=1; i<8; i++ )
if( (CanGoPoint.x-i) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y] >0 && g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y] < 17 )
{
m_PickRedObjects[2].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickRedDisplay[2] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y] = g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 向右
for( i=1; i<8; i++ )
if( (CanGoPoint.x+i) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y] >0 && g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y] < 17 )
{
m_PickRedObjects[3].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickRedDisplay[3] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y] = g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
////////////////////////////////
// 左上
for( i=1; i<8; i++ )
if( (CanGoPoint.x-i) >= 0 && (CanGoPoint.y-i) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y-i] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y-i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y-i] >0 && g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y-i] < 17 )
{
m_PickRedObjects[4].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickRedDisplay[4] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y-i] = g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y-i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 右上
for( i=1; i<8; i++ )
if( (CanGoPoint.x+i) <= 7 && (CanGoPoint.y-i) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y-i] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y-i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y-i] >0 && g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y-i] < 17 )
{
m_PickRedObjects[5].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-i] );
m_PickRedDisplay[5] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y-i] = g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y-i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 左下
for( i=1; i<8; i++ )
if( (CanGoPoint.x-i) >= 0 && (CanGoPoint.y+i) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y+i] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y+i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y+i] >0 && g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y+i] < 17 )
{
m_PickRedObjects[6].Move( g_XCoordinateToPosition[CanGoPoint.x-i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickRedDisplay[6] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-i][CanGoPoint.y+i] = g_ChessmanMap[CanGoPoint.x-i][CanGoPoint.y+i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
// 右下
for( i=1; i<8; i++ )
if( (CanGoPoint.x+i) <= 7 && (CanGoPoint.y+i) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y+i] == 0 )
{
m_PickGreenObjects[i+Flag].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickGreenDisplay[i+Flag] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y+i] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y+i] >0 && g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y+i] < 17 )
{
m_PickRedObjects[7].Move( g_XCoordinateToPosition[CanGoPoint.x+i], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+i] );
m_PickRedDisplay[7] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+i][CanGoPoint.y+i] = g_ChessmanMap[CanGoPoint.x+i][CanGoPoint.y+i];
Flag--; break;
}
else
{
Flag--; break;
}
}
else
{
Flag--; break;
}
Flag += i;
break;
case 5:
if( (CanGoPoint.y-1) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-1] == 0 )
{
m_PickGreenObjects[1].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickGreenDisplay[1] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y-1] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-1] >0 && g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-1] < 17 )
{
// 一条线路只有一个棋子可能被吃
m_PickRedObjects[0].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickRedDisplay[0] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y-1] = g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-1];
}
}
if( (CanGoPoint.y+1) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+1] == 0 )
{
m_PickGreenObjects[2].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+1] );
m_PickGreenDisplay[2] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y+1] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+1] >0 && g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+1] < 17 )
{
m_PickRedObjects[1].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+1] );
m_PickRedDisplay[1] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y+1] = g_ChessmanMap[CanGoPoint.x][CanGoPoint.y+1];
}
}
if( (CanGoPoint.x-1) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y] == 0 )
{
m_PickGreenObjects[3].Move( g_XCoordinateToPosition[CanGoPoint.x-1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickGreenDisplay[3] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y] >0 && g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y] < 17 )
{
m_PickRedObjects[2].Move( g_XCoordinateToPosition[CanGoPoint.x-1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickRedDisplay[2] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y] = g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y];
}
}
if( (CanGoPoint.x+1) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y] == 0 )
{
m_PickGreenObjects[4].Move( g_XCoordinateToPosition[CanGoPoint.x+1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickGreenDisplay[4] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+1][CanGoPoint.y] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y] >0 && g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y] < 17 )
{
m_PickRedObjects[3].Move( g_XCoordinateToPosition[CanGoPoint.x+1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y] );
m_PickRedDisplay[3] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+1][CanGoPoint.y] = g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y];
}
}
///////////////////////
if( (CanGoPoint.x-1) >= 0 && (CanGoPoint.y-1) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y-1] == 0 )
{
m_PickGreenObjects[5].Move( g_XCoordinateToPosition[CanGoPoint.x-1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickGreenDisplay[5] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y-1] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y-1] >0 && g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y-1] < 17 )
{
m_PickRedObjects[4].Move( g_XCoordinateToPosition[CanGoPoint.x-1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickRedDisplay[4] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y-1] = g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y-1];
}
}
if( (CanGoPoint.x+1) <= 7 && (CanGoPoint.y-1) >= 0 )
{
if( g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y-1] == 0 )
{
m_PickGreenObjects[6].Move( g_XCoordinateToPosition[CanGoPoint.x+1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickGreenDisplay[6] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+1][CanGoPoint.y-1] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y-1] >0 && g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y-1] < 17 )
{
m_PickRedObjects[5].Move( g_XCoordinateToPosition[CanGoPoint.x+1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickRedDisplay[5] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+1][CanGoPoint.y-1] = g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y-1];
}
}
if( (CanGoPoint.x-1) >= 0 && (CanGoPoint.y+1) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y+1] == 0 )
{
m_PickGreenObjects[7].Move( g_XCoordinateToPosition[CanGoPoint.x-1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+1] );
m_PickGreenDisplay[7] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y+1] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y+1] >0 && g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y+1] < 17 )
{
m_PickRedObjects[6].Move( g_XCoordinateToPosition[CanGoPoint.x-1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+1] );
m_PickRedDisplay[6] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y+1] = g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y+1];
}
}
if( (CanGoPoint.x+1) <= 7 && (CanGoPoint.y+1) <= 7 )
{
if( g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y+1] == 0 )
{
m_PickGreenObjects[8].Move( g_XCoordinateToPosition[CanGoPoint.x+1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+1] );
m_PickGreenDisplay[8] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+1][CanGoPoint.y+1] = 0;
}
else
if( g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y+1] >0 && g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y+1] < 17 )
{
m_PickRedObjects[7].Move( g_XCoordinateToPosition[CanGoPoint.x+1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y+1] );
m_PickRedDisplay[7] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+1][CanGoPoint.y+1] = g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y+1];
Flag--; break;
}
else
{
Flag--; break;
}
}
break;
case 6:
// 检查吃子区域
if( (CanGoPoint.x-1) >= 0 && (CanGoPoint.y-1) >= 0 && g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y-1] >0 && g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y-1] <17 )
{
m_PickRedObjects[0].Move( g_XCoordinateToPosition[CanGoPoint.x-1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickRedDisplay[0] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x-1][CanGoPoint.y-1] = g_ChessmanMap[CanGoPoint.x-1][CanGoPoint.y-1];
}
if( (CanGoPoint.x+1) <= 7 && (CanGoPoint.y-1) >= 0 && g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y-1] >0 && g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y-1] <17 )
{
m_PickRedObjects[1].Move( g_XCoordinateToPosition[CanGoPoint.x+1], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickRedDisplay[1] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x+1][CanGoPoint.y-1] = g_ChessmanMap[CanGoPoint.x+1][CanGoPoint.y-1];
}
if( (CanGoPoint.y-1) >= 0 && g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-1] == 0 )
{
m_PickGreenObjects[1].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-1] );
m_PickGreenDisplay[1] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y-1] = 0;
}
else
break;
if( !m_IsFirstMove[m_Pick] && (CanGoPoint.y-2) >= 0 && g_ChessmanMap[CanGoPoint.x][CanGoPoint.y-2] == 0 )
{
m_PickGreenObjects[2].Move( g_XCoordinateToPosition[CanGoPoint.x], 0.0f, g_ZCoordinateToPosition[CanGoPoint.y-2] );
m_PickGreenDisplay[2] = TRUE;
g_sChessmanCanGoMap[m_Pick].ChessmanCanGoMap[CanGoPoint.x][CanGoPoint.y-2] = 0;
}
break;
}
return TRUE;
}
BOOL cChess::PlaySound(long Num)
{
if(Num >=0 && Num < NUM_SOUNDS) {
m_SoundData.Free();
if(m_SoundData.LoadWAV(g_SoundFilenames[Num]) == TRUE)
m_SoundChannel.Play(&m_SoundData);
return TRUE;
}
return FALSE;
}
BOOL cChess::PlayMusic(long Num)
{
if(g_CurrentMusic == Num)
return TRUE;
m_MusicChannel.Stop();
m_MusicChannel.Free();
DWORD Timer = timeGetTime() + 700;
while(timeGetTime() < Timer) {
DWORD Level = (Timer - timeGetTime()) / 10;
m_MusicChannel.SetVolume(Level);
}
m_MusicChannel.Load(g_MusicFilenames[Num]);
m_MusicChannel.Play(70,0);
g_CurrentMusic = Num;
return TRUE;
}
BOOL cChess::StopMusic()
{
m_MusicChannel.Stop();
m_MusicChannel.Free();
g_CurrentMusic = -1;
return TRUE;
}
BOOL cChess::GetMouseHitMesh( long Num, DWORD *Face )
{
if(g_IsDisplay[Num] == 0 && Num != 0 )
return FALSE;
D3DXVECTOR3 vecRay, vecDir;
D3DXVECTOR3 vecMeshRay, vecMeshDir;
D3DXVECTOR3 vecTemp;
D3DXMATRIX matInv;
D3DXMATRIX matProj, matView, *matWorld;
D3DXMATRIX matTemp;
sMesh *MeshPtr;
BOOL Hit;
float u, v, Dist;
m_Graphics.Get3DDevice()->GetTransform( D3DTS_PROJECTION, &matProj );
m_Graphics.Get3DDevice()->GetTransform( D3DTS_VIEW, &matView );
D3DXMatrixInverse( &matInv, NULL, &matView );
m_Mouse.Read();
vecTemp.x = (((2.0f*m_Mouse.GetXPos()) / m_Graphics.GetWidth()) - 1) / matProj._11;
vecTemp.y = -(((2.0f*m_Mouse.GetYPos()) / m_Graphics.GetHeight()) - 1) / matProj._22;
vecTemp.z = 1.0f;
vecRay.x = matInv._41;
vecRay.y = matInv._42;
vecRay.z = matInv._43;
vecDir.x = vecTemp.x * matInv._11 + vecTemp.y * matInv._21 + vecTemp.z * matInv._31;
vecDir.y = vecTemp.x * matInv._12 + vecTemp.y * matInv._22 + vecTemp.z * matInv._32;
vecDir.z = vecTemp.x * matInv._13 + vecTemp.y * matInv._23 + vecTemp.z * matInv._33;
MeshPtr = m_ChessObjects[Num].GetMesh()->GetParentMesh();
while(MeshPtr != NULL )
{
matWorld = m_ChessObjects[Num].GetMatrix();
D3DXMatrixInverse( &matInv, NULL, matWorld );
D3DXVec3TransformCoord( &vecMeshRay, &vecRay, &matInv );
D3DXVec3TransformNormal( &vecMeshDir, &vecDir, &matInv );
D3DXIntersect( MeshPtr->m_pMesh, &vecMeshRay, &vecMeshDir, &Hit, Face, &u, &v, &Dist, NULL, NULL );
if( Hit )
return TRUE;
MeshPtr = MeshPtr->m_pNext;
}
return FALSE;
}
FLOAT Timer()
{
static BOOL m_bTimerInitialized = FALSE;
static BOOL m_bUsingQPF = FALSE;
static LONGLONG m_llQPFTicksPerSec = 0;
if( FALSE == m_bTimerInitialized )
{
m_bTimerInitialized = TRUE;
LARGE_INTEGER qwTicksPerSec;
m_bUsingQPF = QueryPerformanceFrequency( &qwTicksPerSec );
if( m_bUsingQPF )
m_llQPFTicksPerSec = qwTicksPerSec.QuadPart;
}
if( m_bUsingQPF )
{
double fTime;
LARGE_INTEGER qwTime;
QueryPerformanceCounter( &qwTime );
fTime = qwTime.QuadPart / (double) m_llQPFTicksPerSec;
return (FLOAT) fTime;
}
else
{
double fTime;
fTime = timeGetTime() * 0.001;
return (FLOAT) fTime;
}
}
void cChess::OriginalPosition()
{
for( long i=0; i<30; i++ )
m_PickGreenObjects[i].Create( &m_Graphics, &m_PickMeshes[0] );
for( long j=0; j<8; j++ )
m_PickRedObjects[j].Create( &m_Graphics, &m_PickMeshes[1] );
m_ChessObjects[0].Create(&m_Graphics, &m_ChessMeshes[0]);
m_ChessObjects[1].Create( &m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[2].Create( &m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[3].Create( &m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[4].Create( &m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[5].Create( &m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[6].Create( &m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[7].Create( &m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[8].Create( &m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[9].Create( &m_Graphics, &m_ChessMeshes[1]);
m_ChessObjects[10].Create(&m_Graphics, &m_ChessMeshes[2]);
m_ChessObjects[11].Create(&m_Graphics, &m_ChessMeshes[3]);
m_ChessObjects[12].Create(&m_Graphics, &m_ChessMeshes[4]);
m_ChessObjects[13].Create(&m_Graphics, &m_ChessMeshes[5]);
m_ChessObjects[14].Create(&m_Graphics, &m_ChessMeshes[3]);
m_ChessObjects[15].Create(&m_Graphics, &m_ChessMeshes[2]);
m_ChessObjects[16].Create(&m_Graphics, &m_ChessMeshes[1]);
m_ChessObjects[17].Create(&m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[18].Create(&m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[19].Create(&m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[20].Create(&m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[21].Create(&m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[22].Create(&m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[23].Create(&m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[24].Create(&m_Graphics, &m_ChessMeshes[6]);
m_ChessObjects[25].Create(&m_Graphics, &m_ChessMeshes[1]);
m_ChessObjects[26].Create(&m_Graphics, &m_ChessMeshes[2]);
m_ChessObjects[27].Create(&m_Graphics, &m_ChessMeshes[3]);
m_ChessObjects[28].Create(&m_Graphics, &m_ChessMeshes[4]);
m_ChessObjects[29].Create(&m_Graphics, &m_ChessMeshes[5]);
m_ChessObjects[30].Create(&m_Graphics, &m_ChessMeshes[3]);
m_ChessObjects[31].Create(&m_Graphics, &m_ChessMeshes[2]);
m_ChessObjects[32].Create(&m_Graphics, &m_ChessMeshes[1]);
m_ChessObjects[1].Move( -0.875f, 0.0f, 0.625f );
m_ChessObjects[2].Move( -0.625f, 0.0f, 0.625f );
m_ChessObjects[3].Move( -0.375f, 0.0f, 0.625f );
m_ChessObjects[4].Move( -0.125f, 0.0f, 0.625f );
m_ChessObjects[5].Move( 0.125f, 0.0f, 0.625f );
m_ChessObjects[6].Move( 0.375f, 0.0f, 0.625f );
m_ChessObjects[7].Move( 0.625f, 0.0f, 0.625f );
m_ChessObjects[8].Move( 0.875f, 0.0f, 0.625f );
m_ChessObjects[9].Move( -0.875f, 0.0f, 0.875f );
m_ChessObjects[10].Move( -0.625f, 0.0f, 0.875f );
m_ChessObjects[11].Move( -0.375f, 0.0f, 0.875f );
m_ChessObjects[12].Move( -0.125f, 0.0f, 0.875f );
m_ChessObjects[13].Move( 0.125f, 0.0f, 0.875f );
m_ChessObjects[16].Move( 0.875f, 0.0f, 0.875f );
m_ChessObjects[15].Move( 0.625f, 0.0f, 0.875f );
m_ChessObjects[14].Move( 0.375f, 0.0f, 0.875f );
m_ChessObjects[17].Move( -0.875f, 0.0f, -0.625f );
m_ChessObjects[18].Move( -0.625f, 0.0f, -0.625f );
m_ChessObjects[19].Move( -0.375f, 0.0f, -0.625f );
m_ChessObjects[20].Move( -0.125f, 0.0f, -0.625f );
m_ChessObjects[21].Move( 0.125f, 0.0f, -0.625f );
m_ChessObjects[22].Move( 0.375f, 0.0f, -0.625f );
m_ChessObjects[23].Move( 0.625f, 0.0f, -0.625f );
m_ChessObjects[24].Move( 0.875f, 0.0f, -0.625f );
m_ChessObjects[25].Move( -0.875f, 0.0f, -0.875f );
m_ChessObjects[26].Move( -0.625f, 0.0f, -0.875f );
m_ChessObjects[27].Move( -0.375f, 0.0f, -0.875f );
m_ChessObjects[28].Move( -0.125f, 0.0f, -0.875f );
m_ChessObjects[29].Move( 0.125f, 0.0f, -0.875f );
m_ChessObjects[32].Move( 0.875f, 0.0f, -0.875f );
m_ChessObjects[31].Move( 0.625f, 0.0f, -0.875f );
m_ChessObjects[30].Move( 0.375f, 0.0f, -0.875f );
m_ChessObjects[13].Rotate( 0.0f, 1.57f, 0.0f );
m_ChessObjects[26].Rotate( 0.0f, 3.14f, 0.0f );
m_ChessObjects[29].Rotate( 0.0f, 1.57f, 0.0f );
m_ChessObjects[31].Rotate( 0.0f, 3.14f, 0.0f );
}