资源简介

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 << _T(“Fatal Error: MFC initialization failed“) << endl;
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


评论

共有 条评论