資源簡介
c++ 課程設計實驗之中國象棋源代碼!!

代碼片段和文件信息
//?GetAllCB.cpp?:?Defines?the?entry?point?for?the?console?application.
//
#include?“stdafx.h“
#include?“GetAllCB.h“
#include?
#ifdef?_DEBUG
#define?new?DEBUG_NEW
#undef?THIS_FILE
static?char?THIS_FILE[]?=?__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//?The?one?and?only?application?object
//--------棋子--------
#define?NOCHESS????0?//沒有棋子
#define?B_KING ???1?//黑帥
#define?B_CAR ???2?//黑車
#define?B_HORSE ???3?//黑馬
#define?B_CANON ???4?//黑炮
#define?B_BISHOP???5?//黑士
#define?B_ELEPHANT?6?//黑象
#define?B_PAWN?????7?//黑卒
#define?R_KING ???8?//紅將
#define?R_CAR??????9?//紅車
#define?R_HORSE????10//紅馬
#define?R_CANON????11//紅炮
#define?R_BISHOP???12//紅士
#define?R_ELEPHANT?13//紅相
#define?R_PAWN?????14//紅兵
//--------------------
struct?CHESSINFO
{
BYTE?byChess;
int?iPos;
};
void?GetAllCBCnt(int?iint?j);??//得到所有合法布局的總數
int?CreateAllChess(int?iint?j);//產生所有合法的棋子
bool?IsLegalChess(int?iint?jBYTE?byChess);//在位置(ij)放棋子byChess是否合法
bool?IsHaveGen(bool?bIsRed); //是否已經放置了將帥
BYTE?MakeMove(int?iint?jCHESSINFO?ciChessInfo);
void?UnMakeMove(int?iint?jCHESSINFO?ciChessInfoBYTE?byChess);
void?PrintChessBoard(BYTE?byChessBoard[10][9]);//打印棋盤
CWinApp?theApp;
using?namespace?std;
float?iAllCnt=0;
BYTE?byCurChess[33]=
{
NOCHESS
B_CARB_HORSEB_ELEPHANTB_BISHOPB_KINGB_BISHOPB_ELEPHANTB_HORSEB_CARB_CANONB_CANONB_PAWNB_PAWNB_PAWNB_PAWNB_PAWN
R_CARR_HORSER_ELEPHANTR_BISHOPR_KINGR_BISHOPR_ELEPHANTR_HORSER_CARR_CANONR_CANONR_PAWNR_PAWNR_PAWNR_PAWNR_PAWN
};
CHESSINFO?ciAllPsbChess[10][9][32];//每一個格子對應的可以放的棋子
BYTE?byCurChessBoard[10][9];//當前棋盤
int?_tmain(int?argc?TCHAR*?argv[]?TCHAR*?envp[])
{
int?nRetCode?=?0;
//?initialize?MFC?and?print?and?error?on?failure
if?(!AfxWinInit(::GetModuleHandle(NULL)?NULL?::GetCommandLine()?0))
{
//?TODO:?change?error?code?to?suit?your?needs
cerr?< nRetCode?=?1;
}
int?ij;
//初始化byCurChessBoard
for(i=0;i<10;i++)
for(j=0;j<9;j++)
byCurChessBoard[i][j]=NOCHESS;
GetAllCBCnt(00);
cout<
getch();
return?nRetCode;
}
void?GetAllCBCnt(int?iint?j)
{
int?k;
int?iCnt=CreateAllChess(ij);
BYTE?byChess;
for(k=0;k {
byChess=MakeMove(ijciAllPsbChess[i][j][k]);
if(j+1>8)
{
if(i+1>9)//得到一種布局布局數加1
{
PrintChessBoard(byCurChessBoard);
getch();
iAllCnt++;
UnMakeMove(ijciAllPsbChess[i][j][k]byChess);
return;
}
else
GetAllCBCnt(i+10);
}
else
GetAllCBCnt(ij+1);
UnMakeMove(ijciAllPsbChess[i][j][k]byChess);
}
}
int?CreateAllChess(int?iint?j)
{
int?iCnt=0;
int?k;
bool?bFlag=0;//空棋子是否已經使用
for(k=0;k<33;k++)
{
if(IsLegalChess(ijbyCurChess[k]))
{
if(byCurChess[k]==NOCHESS)
{
if(!bFlag)
{
ciAllPsbChess[i][j][iCnt].byChess=b
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
-----------?---------??----------?-----??----
??????????????7784012????????????????????344
- 上一篇:自繪CListCtrl聊天列表MFC
- 下一篇:坦克大戰 C++
評論
共有 條評論