C语言编写中国象棋上课讲义Word格式.docx

上传人:b****1 文档编号:5799403 上传时间:2023-05-05 格式:DOCX 页数:23 大小:94.82KB
下载 相关 举报
C语言编写中国象棋上课讲义Word格式.docx_第1页
第1页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第2页
第2页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第3页
第3页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第4页
第4页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第5页
第5页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第6页
第6页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第7页
第7页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第8页
第8页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第9页
第9页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第10页
第10页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第11页
第11页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第12页
第12页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第13页
第13页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第14页
第14页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第15页
第15页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第16页
第16页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第17页
第17页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第18页
第18页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第19页
第19页 / 共23页
C语言编写中国象棋上课讲义Word格式.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言编写中国象棋上课讲义Word格式.docx

《C语言编写中国象棋上课讲义Word格式.docx》由会员分享,可在线阅读,更多相关《C语言编写中国象棋上课讲义Word格式.docx(23页珍藏版)》请在冰点文库上搜索。

C语言编写中国象棋上课讲义Word格式.docx

//黑色棋子

#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(車))

redOrBlack(xj,yj)!

=-1)//如果棋子直行、没有犯规且落点不是红棋,可以移动

array[xj][yj]=B(車);

//R(马)----------------------------------------

elseif(array[xi][yi]==R(马))

if((redOrBlack(xj,yj)!

=1)&

((xj==xi-2&

yj==yi-1&

redOrBlack(xi-1,yi)==0)||(xj==xi-2&

yj==yi+1&

redOrBlack(xi-1,yi)==0)||(xj==xi-1&

yj==yi-2&

redOrBlack(xi,yi-1)==0)||(xj==xi-1&

yj==yi+2&

redOrBlack(xi,yi+1)==0)||(xj==xi+1&

redOrBlack(xi,yi-1)==0)||(xj==xi+1&

redOrBlack(xi,yi+1)==0)||(xj==xi+2&

redOrBlack(xi+1,yi)==0)||(xj==xi+2&

redOrBlack(xi+1,yi)==0)))

array[xj][yj]=R(马);

//B(马)----------------------------------------

elseif(array[xi][yi]==B(马))

=-1)&

array[xj][yj]=B(马);

//R(炮)----------------------------------------

elseif(array[xi][yi]==R(炮))

intcount=0;

//起始位置间棋子的个数

if(redOrBlack(i,yi)!

=0)

count++;

if(redOrBlack(xi,i)!

(count<

=1)//如果棋子直行、没有犯规且落点不是红棋,可以移动

array[xj][yj]=R(炮);

//B(炮)----------------------------------------

elseif(array[xi][yi]==B(炮))

array[xj][yj]=B(炮);

//R(兵)----------------------------------------

elseif(array[xi][yi]==R(兵))

if(xi>

xj)

//如果倒退,则不符合规范

if(xi==3)

if((xj!

=xi+1)||(yi!

=yj))

//第3行时只能前进一步

if(xi==4)

=xi+2)||(yi!

//第4行时只能前进两步

4){

if((xj==xi+1&

yi==yj)||(xj==xi&

yi==yj+1)||(xj==xi&

yi==yj-1))

=1)//

array[xj][yj]=R(兵);

//B(卒)----------------------------------------

elseif(array[xi][yi]==B(卒))

if(xi<

if(xi==7)

=xi-1)||(yi!

if(xi==6)

=xi-2)||(yi!

if((xj==xi-1&

if(isStandard&

=-1)//

array[xj][yj]=R(卒);

//R(相)----------------------------------------

elseif(array[xi][yi]==R(相))

if((xj<

=4)&

(redOrBlack(xj,yj)!

redOrBlack(xi-1,yi-1)==0)||(xj==xi-2&

redOrBlack(xi-1,yi+1)==0)||(xj==xi+2&

redOrBlack(xi+1,yi-1)==0)||(xj==xi+2&

redOrBlack(xi+1,yi+1)=

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2