C语言编写中国象棋Word下载.docx
- 文档编号:14435353
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:20
- 大小:94.79KB
C语言编写中国象棋Word下载.docx
《C语言编写中国象棋Word下载.docx》由会员分享,可在线阅读,更多相关《C语言编写中国象棋Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
\033[31m"
#piece"
\033[0m"
//红色棋子
#defineB(piece)"
\033[30m"
//黑色棋子
#defineCROSS"
\033[33m十\033[0m"
//定义外部变量,棋盘坐标
char*array[11][9];
intxi,yi;
//要移动的棋子
intxj,yj;
//移动的目标位置
boolisStandard=1;
//是否符合规则,初始值1,符合
boolgameOverSign=1;
//游戏是否结束,0结束
boolrestart=0;
//生成棋盘
voidchessboardBuilding();
//打印棋盘
voidprintChessboard();
//判断是红棋还是黑棋,红旗返回1,黑棋返回-1,否则返回0
intredOrBlack(intx,inty);
//红棋移动
voidredMove();
//黑棋移动
voidblackMove();
//每种棋子的规则
voidrulesOfAllKindsOfChessPieces();
//判断游戏结束
voidisGameOver();
//**************************主函数******************************
intmain()
{
//生成棋盘
chessboardBuilding();
//打印棋盘
printChessboard();
//开始下棋
intturn=-1;
while(gameOverSign){
isStandard=1;
turn*=(-1);
//双方交替下棋
switch(turn){
case1:
redMove();
turn=(restart)?
(turn*-1):
turn;
break;
case-1:
blackMove();
}
isGameOver();
printf("
游戏结束!
\n"
);
}//主函数结束
//*************************自定义函数*****************************
voidchessboardBuilding()
for(inti=0;
i<
11;
i++){
for(intj=0;
j<
9;
j++){
array[i][j]=CROSS;
array[5][0]=array[5][1]=array[5][4]=array[5][7]=array[5][8]="
-"
;
array[5][2]=B(楚);
array[5][3]=B(河);
array[5][5]=B(汉);
array[5][6]=B(界);
//布置红棋
array[0][0]=array[0][8]=R(車);
array[0][1]=array[0][7]=R(马);
array[0][2]=array[0][6]=R(相);
array[0][3]=array[0][5]=R(仕);
array[0][4]=R(帅);
array[2][1]=array[2][7]=R(炮);
array[3][0]=array[3][2]=array[3][4]=array[3][6]=array[3][8]=R(兵);
//布置黑棋
array[10][0]=array[10][8]=B(車);
array[10][1]=array[10][7]=B(马);
array[10][2]=array[10][6]=B(相);
array[10][3]=array[10][5]=B(仕);
array[10][4]=B(将);
array[8][1]=array[8][7]=B(炮);
array[7][0]=array[7][2]=array[7][4]=array[7][6]=array[7][8]=B(卒);
}
voidprintChessboard()
//显示
\033[43;
30m中国象棋欢迎您\033[0m\n\n"
9;
%s"
array[i][j]);
intredOrBlack(intx,inty)
if(array[x][y]==R(車)||array[x][y]==R(马)||array[x][y]==R(相)||array[x][y]==R(仕)||array[x][y]==R(帅)||array[x][y]==R(炮)||array[x][y]==R(兵))
{
return1;
elseif(array[x][y]==B(車)||array[x][y]==B(马)||array[x][y]==B(象)||array[x][y]==B(仕)||array[x][y]==B(将)||array[x][y]==B(炮)||array[x][y]==B(卒))
return-1;
else
return0;
voidredMove()
if(restart){
违反游戏规则,请重新输入\n"
restart=0;
[红棋]请输入你要移动的棋子:
scanf("
%d%d"
&
xi,&
yi);
[红棋]请输入你要放置的位置:
xj,&
yj);
rulesOfAllKindsOfChessPieces();
voidblackMove()
[黑棋]请输入你要移动的棋子:
[黑棋]请输入你要放置的位置:
voidisGameOver()
boolsign_r=0;
boolsign_b=0;
if(array[i][j]==R(帅)){
sign_r=1;
elseif(array[i][j]==B(将))
sign_b=1;
if((sign_r==0)||(sign_b==0)){
gameOverSign=0;
voidrulesOfAllKindsOfChessPieces()
//R(車)----------------------------------------
if(array[xi][yi]==R(車))
if(yi==yj)//列坐标不变,同列移动
for(inti=xi+1;
xj;
i++)
if(i==5)
continue;
//如果行等于5,跳过
if(array[i][yi]!
=CROSS)
isStandard=0;
//如果初始位置和目标位置之间有棋子,则不符合规则
for(inti=xi-1;
i>
i--)
if(array[xi][yi]!
elseif(xi==xj)//行坐标不变,同行移动
for(inti=yi+1;
yj;
if(array[xi][i]!
for(inti=yi-1;
if((xi==xj||yi==yj)&
&
isStandard&
(redOrBlack(xj,yj)!
=1))//如果棋子直行、没有犯规且落点不是红棋,可以移动
array[xi][yi]=CROSS;
array[xj][yj]=R(車);
restart=1;
//B(車)----------------------------------------
elseif(array[xi][yi]==B(車))
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编写 中国象棋