中国象棋C代码_第1页
中国象棋C代码_第2页
中国象棋C代码_第3页
中国象棋C代码_第4页
中国象棋C代码_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中国象棋#include<stdio.h>#include<conio.h>#include<string.h>#include<stdlib.h>#include<windows.h>intx,y,i,j,k,p,q,num=1,round;〃象棋游戏的全局变量intpx1=0,py1=0,px2=0,py2=0;intck_x,ck_y,ck_t;〃基本参数charch,tn='O',tn1='N',tp,tp1;charck_1[9][3]={"歌,“舟,"相","仕"邛巾“,”砂,"兵","+-"};〃取棋子时只判断前8合法charck_2[9][3]={"车","马",”象”,”土”,”将”,”炮”,“卒","+-"}; 〃下棋子时判断多一个空位合法charcheck[3];voidckm1(char*tp,char*tp1,char*tn,char*tn191nt*num,int*if_ov,charmap[100][100]){〃象棋函数判断将方下棋是否合法check[0]=*tp;check[1]=*tp1;check[2]='\0';chara,b;for(i=0;i<8;i++){if(strcmp(ck_2[i],check)==0){*tp=*tn;*tp1=*tn1;*tn='O';*tn1='N';if(i<7){printf("将方的%s被吃”,ck_2[i]);Sleep(500);}*num=*num+1;for(k=4;k<=8;k=k+2) 〃判断将是否死亡{for(j=15;j<=23;j=j+4){if(map[k][j]==ck_2[4][0]&&map[k][j+1]==ck_2[4][1]){px2=k;py2=j;break;}}if(j<=23)break;}if(k==10){printf("将被将死巾方获得胜利\n");printff按任意键返回菜单”);getch();*if_ov=1;return;}for(k=18;k<=22;k=k+2) 〃判断巾是否死亡{for(j=15;j<=23;j=j+4){if(map[k][j]==ck_1[4][0]&&map[k][j+1]==ck_1[4][1]){px1=k;py1=j;break;}}if(j<=23)break;}if(k==24){printf("巾被将死将方获得胜利\n");printff按任意键返回菜单”);getch();*if_ov=1;return;}if(py1==py2){for(k=px2+2;k<=px1-2;k=k+2){if(map[k][py1]!='+')break;}if(k==px1){if(round==1)printf("巾方对将将方胜利");elseif(round==2)printf("将方对将白巾方胜利)printf("按任意键返回菜单");getch();*if_ov=1;return;))

break;)}//for(i=0;i<8;i++)循环结束if(i==8){printf("不合法的走法\n");Sleep(500);}}voidckm2(char*tp,char*tp1,char*tn,char*tn1,int*num,int*if_ov,charmap[100][100]){ 〃象棋函数判断自巾方下棋是否合法check[0]=*tp;check[1]=*tp1;check[2]='\0';chara,b;for(i=0;i<8;i++){if(strcmp(ck_1[i],check)==0){*tp=*tn;*tp1=*tn1;*tn='O';*tn1='N';if(i<7){printf("巾方的%s被吃”,ck_1[i]);Sleep(500);}*num=*num+1;for(k=4;k<=8;k=k+2) 〃判断将是否死亡{for(j=15;j<=23;j=j+4){if(map[k][j]==ck_2[4][0]&&map[k][j+1]==ck_2[4][1]){px2=k;py2=j;break;}}if(j<=23)break;}if(k==10){printf("将被将死巾方获得胜利\n");printfC按任意键返回菜单");getch();*if_ov=1;return;}for(k=18;k<=22;k=k+2) 〃判断巾是否死亡{for(j=15;j<=23;j=j+4){if(map[k][j]==ck_1[4][0]&&map[k][j+1]==ck_1[4][1]){px1=k;py1=j;break;}}if(j<=23)break;}if(k==24){printf("巾被将死将方获得胜利\n");printfC按任意键返回菜单");getch();*if_ov=1;return;}if(py1==py2){for(k=px2+2;k<=px1-2;k=k+2){if(map[k][py1]!='+')break;}if(k==px1){if(round==1)printf("巾方对将将方胜利”);elseif(round==2)printf("将方对将白巾方胜利");printf("按任意键返回菜单");getch();*if_ov=1;return;}}break;}}//for(i=0;i<8;i++)循环结束if(i==8){printf("不合法的走法\n");Sleep(500);})voidxiangqi() 〃象棋主程序{charmap[100][100]={"[[====— ]]","[|①白巾 【象棋】②将|]","ITTin[[ — ]],"[[----- --]]",[[车马象上将士象马车]],"[[|| | |\\|/||| |]]",[[I--I--I--I--I-+ + + +]],"[[|| | |/|\\||| |]]",[[I-炮+ +-I--+ + ^炮 +]],"[[|||||||| |]]","[[卒---+ 卒——+--卒+卒+ 卒]],"[[|||||||| |]]",[[I--I-—-I-—-I-—-I-+ + + +]],"ITTin[[ — ]],[[I--I-—-I-—-I-—-I-+ + + +]],"[[|||||||| |]]","[[兵-,I '/、 'I一耳—-兵+兵+兵]],"[[|||||||| |]]",[[|-石包 + +-I--+ + 而包 +]],"[[|| | |\\|/||| |]]",[[|--I--I--I--I-+ + + +]],"[[|| | |/|\\||| |]]","[[>-—-焉一-相一-仕一-巾一-仕一-相一-焉一-隼]]","[[ ]]","[[=======================]『};intif_ov=0;system("modeconcols=42lines=32"); 〃迷你界面system("color70");printf("[[==================================]]\n");printf("[[ ]]\n");printf("[[| |]]\n");printf("[[| [<<游戏规则>>] |]]\n");printf("[[| |]]\n");printf("[[| 1 ]]\n");printf("[[|控制wasd双方轮流控制指针下棋|]]\n");printf("[[| 1 ]]\n");printf("[[|键盘输入大小写‘M ’ | ]]\n");printf("[[|都视为确认下棋 |]]\n");printf("[[| 1 ]]\n");printf("[[|为了方便区分棋子 |]]\n");printf("[[|先手方全设为繁体复杂字体|]]\n");printf("[[| 1 ]]\n");printf("[[| 1 ]]\n");printf("[[|我已阅读规则,按任意键继续|]]\n");printf("[[| 1 ]]\n");printf("[[==================================]]\n");getch();system("modeconcols=42lines=32"); 〃迷你界面system("color70");for(i=0;i<27;i++){puts(map[i]);Sleep(100);}x=6,y=19;tp=map[x][y];tp1=map[x][y+1];while(num){if(num%2==1&&num/2%2==0){printf("现在是'白巾'的回合也")江。口口4=1;}elseif(num%2==1){printf("现在轮到'将的回合Y\n");round=2;}ch=getch();if(ch=='s') 〃下移{if(map[x+1][y]!='-'){map[x][y]=tp;map[x][y+1]=tp1;x=x+2;tp=map[x][y];tp1=map[x][y+1];map[x][y]=tn;map[x][y+1]=tn1;}}elseif(ch=='a') 〃左移{if(map[x][y-1]!=''){map[x][y]=tp;map[x][y+1]=tp1;y=y-4;tp=map[x][y];tp1=map[x][y+1];map[x][y]=tn;map[x][y+1]=tn1;}}elseif(ch=='w') 〃上移{if(map[x-1][y]!='-'){map[x][y]=tp;map[x][y+1]=tp1;x=x-2;tp=map[x][y];tp1=map[x][y+1];map[x][y]=tn;map[x][y+1]=tn1;}}elseif(ch=='d') 〃右移{if(map[x][y+2]!=']'){map[x][y]=tp;map[x][y+1]=tp1;y=y+4;tp=map[x][y];tp1=map[x][y+1];map[x][y]=tn;map[x][y+1]=tn1;}}elseif(ch=='m'||ch二制'确认要移动的棋子,或确认要移到的目的地{if(num%2==1&&tp!='+'&&tp1!='-') 〃取子{check[0]=tp;check[1]=tp1;check⑵='\0';if(round==1){for(i=0;i<7;i++) 〃将方{if(strcmp(ck_1[i],check)==0){tn=tp;tn1=tp1;tp='+';tp1='-';ck_x=x;ck_y=y;ck_t=10+i;num++;break;}if(i==7){printf("这不是你的棋子\n");Sleep(500);})elseif(round==2){for(i=0;i<7;i++) 〃帅方{if(strcmp(ck_2[i],check)==0){tn=tp;tn1=tp1;tp='+';tp1='-';ck_x=x;ck_y=y;ck_t=20+i;num++;break;}}if(i==7){printfC这不是你的棋子\n");Sleep(500);}}}elseif(num%2==0)〃放子{charck_1[8][3]={"车","马",”象”,“士","将",”炮”,“卒","+-"};charck_2[8][3]={"倬","焉”,”相”,“仕“,峭巾",噂刨,"兵","+-"};〃中界楚河上下坐标1215往下2往右4if(ck_t<20){if(ck_t==10) 〃车的走法规范(将方){if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printff还是你的回合");Sleep(500);}elseif(y==ck_y){if(x>ck_x){for(j=ck_x+2;j<x;j=j+2){if(map[j][y]=='+');else{printff不合法的下法\n");Sleep(500);break;}}if(j>=x)ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}if(x<ck_x){for(j=ck_x-2;j>x;j=j-2){if(map[j][y]=='+');else{printf("不合法的下法\n");Sleep(500);break;}}if(j<=x)ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}}elseif(x==ck_x){if(y>ck_y){for(j=ck_y+4;j<y;j=j+4){if(map[x][j]=='+');else{printff不合法的下法\n");Sleep(500);break;}}if(j>=y)ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}if(y<ck_y){for(j=ck_y-4;j>y;j=j-4){if(map[x][j]=='+');else{printff不合法的下法\n");Sleep(500);break;}}if(j<=y)ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);))else{printf("不合法的下法\n");Sleep(500);})if(ck_t==11)〃马的走法规范{if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printf("还是你的回合");Sleep(500);}elseif((abs(x-ck_x)==2&&abs(y-ck_y)==8)&&map[ck_x][(y+ck_y)/2]=='+'){ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}elseif((abs(x-ck_x)==4&&abs(y-ck_y)==4)&&map[(x+ck_x)/2][ck_y]=='+'){ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}else{printf("不合法的下法\n");Sleep(500);}}if(ck_t==12) 〃相的走法规范{if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printff还是你的回合");Sleep(500);}elseif(x>=15&&(abs(y-ck_y)==8&&abs(x-ck_x)==4)){if((x==22&&(y==11IIy==27))ll(x==18&&(y==3IIy==19IIy==35))ll(x==14&&(y==11IIy==27))){if(map[(x+ck_x)/2][(y+ck_y)/2]=='+')ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);else{printfC棋子卡住,不可执行");Sleep(500);}}else{printf("不合法的下法\n");Sleep(500);}}else{printf("不合法的下法\n");Sleep(500);}}if(ck_t==13) 〃士的走法规范{if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printff还是你的回合");Sleep(500);}elseif(abs(x-ck_x)==2&&abs(y-ck_y)==4&&((x==22&&(y==15IIy==23))II(x==20&&y==19)II(x==18&&(y==15IIy==23)))){ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}else{printf("不合法的下法\n");Sleep(500);}}if(ck_t==14) //将的走法规范{if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printff还是你的回合");Sleep(500);}elseif(((abs(x-ck_x)==2&&abs(y-ck_y)==0)II(abs(x-ck_x)==0&&abs(y-ck_y)==4))&&x>=18&&x<=22&&y>=15&&y<=23){ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}else{printf("不合法的下法\n");Sleep(500);})if(ck_t==15) 〃炮的走法规范{if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printf("还是你的回合");Sleep(500);}elseif(y==ck_y){intcheck_pao=0;if(x>ck_x){for(j=ck_x+2;j<=x;j=j+2){if(map[j][y]=='+');elsecheck_pao++;}if(check_pao==1&&tp=='+') //直线行走但不可吃棋子ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);elseif(check_pao==2&&tp!='+')〃跳跃吃棋

ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);else{printf("不合法的下法\n");Sleep(500);}}else{for(j=ck_x-2;j>=x;j=j-2){if(map[j][y]=='+');else{check_pao++;}}if(check_pao==1&&tp=='+') 〃直线行走但不可吃棋子ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);elseif(check_pao==2&&tp!='+') 〃跳跃吃棋ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);else{printf("不合法的下法\n");Sleep(500);}}}elseif(x==ck_x){intcheck_pao=0;if(y>ck_y){for(j=ck_y+4;j<=y;j=j+4){if(map[x][j]=='+');elsecheck_pao++;}if(check_pao==1&&tp=='+')〃直线行走但不可吃棋子

ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);elseif(check_pao==2&&tp!='+') 〃跳跃吃棋ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);else{printf("不合法的下法\n");Sleep(500);}}else{for(j=ck_y-4;j>=y;j=j-4){if(map[x][j]=='+');elsecheck_pao++;}if(check_pao==1&&tp=='+')〃直线行走但不可吃棋子ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);elseif(check_pao==2&&tp!='+') 〃跳跃吃棋ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);else{printf("不合法的下法\n");Sleep(500);}}}else{printf("不合法的下法\n");Sleep(500);}if(ck_t==16) 〃卒的走法规范{if(x>=14){if((x==ck_x&&y==ck_y)){tp=tn;tp1=tnl;tn='O';tn1='N';num--;printfC三思而后行\n");printff还是你的回合");Sleep(500);)elseif(x==ck_x-2&&y==ck_y)ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);else{printf("不合法的下法\n");Sleep(500);})else{if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printff还是你的回合");Sleep(500);}elseif((x-ck_x==0&&abs(y-ck_y)==4)11(x-ck_x==-2&&abs(y-ck_y)==0))ckm1(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);else{printf("不合法的下法\n");Sleep(500);}}}}else{if(ck_t==20) 〃车的走法规范(帅方){if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printf("还是你的回合");Sleep(500);}elseif(y==ck_y){if(x>ck_x){for(j=ck_x+2;j<x;j=j+2){if(map[j][y]=='+');else{printf("不合法的下法\n");Sleep(500);break;}}if(j>=x)ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}if(x<ck_x){for(j=ck_x-2;j>x;j=j-2){if(map[j][y]=='+');else{printf「不合法的下法\n");Sleep(500);break;}}if(j<=x)ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}}elseif(x==ck_x){if(y>ck_y){for(j=ck_y+4;j<y;j=j+4){if(map[x][j]=='+');else{printf「不合法的下法\n");Sleep(500);break;}}if(j>=y)ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}if(y<ck_y){for(j=ck_y-4;j>y;j=j-4){if(map[x][j]=='+');else{printff不合法的下法\n");Sleep(500);break;}}if(j<=y)ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}else{printf("不合法的下法\n");Sleep(500);})if(ck_t==21) 〃马的走法规范{if((x==ck_x&&y==ck_y)){tp=tn;tp1=tnl;tn='O';tn1='N';num--;printfC三思而后行\n");printfC还是你的回合");Sleep(500);}elseif((abs(x-ck_x)==2&&abs(y-ck_y)==8)&&map[ck_x][(y+ck_y)/2]=='+'){ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}elseif((abs(x-ck_x)==4&&abs(y-ck_y)==4)&&map[(x+ck_x)/2][ck_y]=='+'){ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}else{printf("不合法的下法\n");Sleep(500);}}if(ck_t==22) 〃相的走法规范{if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printfC还是你的回合");Sleep(500);}elseif(x<=12&&(abs(y-ck_y)==8&&abs(x-ck_x)==4)){if((x==4&&(y==11IIy==27))ll(x==8&&(y==3IIy==19IIy==35))ll(x==12&&(y==11IIy==27))){if(map[(x+ck_x)/2][(y+ck_y)/2]=='+')ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);else{printfC棋子卡住,不可执行)Sleep(500);}}else{printf("不合法的下法\n");Sleep(500);}}else{printf("不合法的下法\n");Sleep(500);}}if(ck_t==23) 〃士的走法规范{if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printfC还是你的回合");Sleep(500);}elseif(abs(x-ck_x)==2&&abs(y-ck_y)==4&&((x==4&&(y==15IIy==23))II(x==6&&y==19)II(x==8&&(y==15IIy==23)))){ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}else{printf("不合法的下法\n");Sleep(500);}}if(ck_t==24) 〃将的走法规范{if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printfC还是你的回合");Sleep(500);}elseif(((abs(x-ck_x)==2&&abs(y-ck_y)==0)II(abs(x-ck_x)==0&&abs(y-ck_y)==4))&&x>=4&&x<=8&&y>=15&&y<=23){ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);}else{printf("不合法的下法\n");Sleep(500);})if(ck_t==25) 〃炮的走法规范{if((x==ck_x&&y==ck_y)){tp=tn;tp1=tn1;tn='O';tn1='N';num--;printfC三思而后行\n");printfC还是你的回合");Sleep(500);}elseif(y==ck_y){intcheck_pao=0;if(x>ck_x){for(j=ck_x+2;j<=x;j=j+2){if(map[j][y]=='+');elsecheck_pao++;}if(check_pao==1&&tp=='+') 〃直线行走但不可吃棋子ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);elseif(check_pao==2&&tp!='+') 〃跳跃吃棋ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,map);else{printf("不合法的下法\n");Sleep(500);}}else{for(j=ck_x-2;j>=x;j=j-2){if(map[j][y]=='+');else{check_pao++;}}if(check_pao==1&&tp=='+') 〃直线行走但不可吃棋子ckm2(&tp,&tp1,&tn,&tn1,&num,&if_ov,ma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论