您的位置:

象棋比赛c语言,c语言中国象棋设计

本文目录一览:

c语言 象棋 走法 表示

语言象棋走法分三种:进、退、平。

象棋棋盘的九条竖线从左到右排列为:

红方:一、二、三、四、五、六、七、八、九

黑方:1、2、3、4、5、6、7、8、9

进:如马二进三,就是马从第二条竖线向前方(对方的方向)走到第三条竖线上。

退:如车一退一,就是把车向后(自己的方向)走一个格子;车一平二,就是向后走两个格子。 ——(兵、卒不可退)

平:如炮二平五,就是第二条线的炮走到第五条线上。 ——(马不可平)

如果两只马在同一条线上,那么可以说成前马进一、后马退三......

红棋与黑棋不同:如果红棋走炮二平五,黑棋也想走同样的棋路,就要写成炮2平5.

国际象棋的C语言输出棋盘

void main(){

int i,j;

for(j=1;j5;j++){

for(i=1;i9;i=i+2){

printf("%c%c  ",0xa8,0x80);

}

printf("\n");

for(i=2;i9;i=i+2){

printf("  %c%c",0xa8,0x80);    //打出白格

}

if(j!=4)

printf("\n");

}

}

急需用c语言写中国象棋的代码,只要红色方布局和走棋

#include #include #include #include #include

int x,y,i,j,k,p,q, num = 1, round; //象棋游戏的全局变量

int place_x1 = 0,place_y1 = 0,place_x2 = 0,place_y2 = 0;

int check_x,check_y,check_turn; //基本参数

char ch, turn = 'O',turn1 = 'N',temp,temp1;

char check_1[9][3] ={"车","马","象","士","将","炮","兵","+-"}; //取棋子时只判断前8合法

char check_2[9][3] ={"车","马","相","仕","帅","炮","卒","+-"}; //下棋时多一空位合法

char check[3];

void check_main1(char* temp,char* temp1,char* turn,char* turn1,int *num,int *if_return,char map[100][100])

{ //(象棋函数 判断 将方 下棋是否合法

check[0] = *temp; check[1] = *temp1; check[2] = '\0'; char a,b;

for ( i = 0; i 8; i++)

{ if ( strcmp(check_2[i],check) == 0)

{ *temp = *turn; *temp1 = *turn1; *turn = 'O'; *turn1 = 'N';

if( i 7){ printf(" 帅方的%s被吃\n",check_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] == check_2[4][0] map[k][j+1] == check_2[4][1])

{ place_x2 = k; place_y2 = j; break; } }

if( j = 23) break;

}

if( k == 10)

{printf(" 帅 被将死 将方获得胜利\n"); printf("按任意键返回菜单");

getch( ); *if_return = 1; return;

}

for( k = 18; k = 22; k = k + 2) //判断 将 是否死亡

{for(j = 15; j = 23; j= j+ 4)

{if(map[k][j] == check_1[4][0] map[k][j+1] == check_1[4][1])

{place_x1 = k; place_y1 = j; break; } }

if( j = 23) break;

}

if ( k == 24)

{printf(" 将 被将死 帅方获得胜利\n"); printf("按任意键返回菜单");

getch( ); *if_return = 1; return;

}

if ( place_y1 == place_y2)

{for( k = place_x2 + 2; k = place_x1 - 2; k = k +2) {if(map[k][place_y1] != '+') break;}

if( k == place_x1)

{if(round == 1) printf(" 将方对将 帅方胜利");

else if( round == 2) printf(" 帅方对将 将方胜利");

printf("按任意键返回菜单"); getch( ); *if_return = 1; return;

}

}

break;

}

} // for ( i = 0; i 8; i++)循环结束

if( i == 8) {printf("不合法的走法\n"); Sleep(500); }

}

void check_main2(char* temp,char* temp1,char* turn,char* turn1,int *num,int *if_return,char map[100][100])

{ //象棋函数 判断 帅方 下棋是否合法

check[0] = *temp; check[1] = *temp1; check[2] = '\0'; char a,b;

for ( i = 0; i 8; i++)

{if ( strcmp(check_1[i],check) == 0)

{ *temp = *turn; *temp1 = *turn1; *turn = 'O'; *turn1 = 'N';

if( i 7) {printf(" 将方的%s被吃",check_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] == check_2[4][0] map[k][j+1] == check_2[4][1])

{place_x2 = k; place_y2 = j; break; } }

if( j = 23) break;

}

if( k == 10)

{printf(" 帅 被将死 将方获得胜利\n");printf("按任意键返回菜单"); getch( );

*if_return = 1; return;

}

for( k = 18; k = 22; k = k + 2) //判断 将 是否死亡

{for(j = 15; j = 23; j= j+ 4)

{if(map[k][j] == check_1[4][0] map[k][j+1] == check_1[4][1])

{place_x1 = k; place_y1 = j; break; } }

if( j = 23) break;

}

if( k == 24)

{printf(" 将 被将死 帅方获得胜利\n");printf("按任意键返回菜单"); getch( );

*if_return = 1; return; }

if( place_y1 == place_y2)

{for( k=place_x2 + 2; k = place_x1 - 2; k=k +2) {if(map[k][place_y1] != '+') break; }

if( k == place_x1)

{if(round==1)printf(" 将方对将 帅方胜利");else if(round==2)printf(" 帅方对将 将方胜利");

printf("按任意键返回菜单"); getch( ); *if_return = 1; return; }

}

break;

}

} // for ( i = 0; i 8; i++)循环结束

if( i == 8) {printf("不合法的走法\n"); Sleep(500); }

}

void xiangqi( ) //象棋主程序

{ char map[100][100]= { "[[===================================]]",

"[| ①将 【象棋】 ②帅 |]",

"[[===================================]]",

"[[-----------------------------------]]",

"[[ 车—-马—-相—-仕—-帅—-仕—-相—-马—-车]]",

"[[ | | | | \\ | / | | | | ]]",

"[[ +-—-+-—-+-—-+-—-+-—-+-—-+-—-+-—-+-]]",

"[[ | | | | / | \\ | | | | ]]",

"[[ +-—-炮—-+-—-+-—-+-—-+-—-+-—-炮—-+-]]",

"[[ | | | | | | | | | ]]",

"[[ 卒—-+-—-卒—-+-—-卒—-+-—-卒—-+-—-卒]]",

"[[ | | | | | | | | | ]]",

"[[ +-—-+-—-+-—-+-—-+-—-+-—-+-—-+-—-+-]]",

"[[===================================]]",

"[[ +-—-+-—-+-—-+-—-+-—-+-—-+-—-+-—-+-]]",

"[[ | | | | | | | | | ]]",

"[[ 兵—-+-—-兵—-+-—-兵—-+-—-兵—-+-—-兵]]",

"[[ | | | | | | | | | ]]",

"[[ +-—-炮—-+-—-+-—-+-—-+-—-+-—-炮—-+-]]",

"[[ | | | | \\ | / | | | | ]]",

"[[ +-—-+-—-+-—-+-—-+-—-+-—-+-—-+-—-+-]]",

"[[ | | | | / | \\ | | | | ]]",

"[[ 车—-马—-象—-士—-将—-士—-象—-马—-车]]",

"[[-----------------------------------]]",

"[[===================================]]"};

int if_return = 0;

system("mode con cols=45 lines=32"); //迷你界面

system("color 70");

printf("[[==================================]]\n");

printf("[[ -------------------------------- ]]\n");

printf("[[ | | ]]\n");

printf("[[ | 【】 | ]]\n");

printf("[[ | | ]]\n");

printf("[[ |------------------------------| ]]\n");

printf("[[ | 控制wasd双方轮流控制指针下棋| ]]\n");

printf("[[ |------------------------------| ]]\n");

printf("[[ | 键盘输入大小写 ' M ' | ]]\n");

printf("[[ | 都视为确认下棋 | ]]\n");

printf("[[ |------------------------------| ]]\n");

printf("[[ | 为了方便区分棋子 | ]]\n");

printf("[[ | 后手方全设为繁体复杂字体 | ]]\n");

printf("[[ |------------------------------| ]]\n");

printf("[[ |------------------------------| ]]\n");

printf("[[ | 我已阅读规则,按任意键继续 | ]]\n");

printf("[[ |------------------------------| ]]\n");

printf("[[==================================]]\n");

getch( ); system("mode con cols=45 lines=32"); //迷你界面

system("color 70");

for ( i = 0; i 27; i++){ puts(map[i]); Sleep(100); }

x = 6, y = 19; temp = map[x][y]; temp1 = map[x][y+1];

while(num)

{ if (num % 2 == 1 num / 2 % 2 == 0){ printf(" 现在是'将'的回合\n");round = 1; }

else if( num %2 == 1){ printf(" 现在轮到'帅'的回合了\n");round = 2; }

ch = getch( );

if ( ch == 's') //下移

{ if ( map[x+1][y]!= '-')

{map[x][y] =temp; map[x][y+1] = temp1; x = x + 2;

temp = map[x][y]; temp1 = map[x][y+1]; map[x][y] = turn; map[x][y+1] = turn1; }

}

else if ( ch == 'a') //左移

{ if (map[x][y-1]!=' ')

{map[x][y] =temp; map[x][y+1] = temp1; y = y - 4;

temp = map[x][y]; temp1 = map[x][y+1]; map[x][y] = turn; map[x][y+1] = turn1; }

}

else if ( ch == 'w') //上移

{ if ( map[x-1][y]!= '-')

{map[x][y] =temp; map[x][y+1] = temp1; x = x - 2; temp = map[x][y];

temp1 = map[x][y+1]; map[x][y] = turn; map[x][y+1] = turn1; }

}

else if ( ch == 'd') //右移

{ if (map[x][y+2]!=']')

{map[x][y] =temp; map[x][y+1] = temp1; y = y + 4; temp = map[x][y];

temp1 = map[x][y+1]; map[x][y] = turn; map[x][y+1] = turn1; }

}

else if( ch == 'm' || ch =='M') //M确认要移动的棋子,或确认要移到的目的地

{ if (num % 2 == 1 temp != '+' temp1 != '-') //取棋

{check[0] = temp; check[1] = temp1; check[2] = '\0';

if ( round == 1)

{ for ( i = 0; i 7; i++) //将方

{ if ( strcmp(check_1[i],check) == 0)

{turn = temp; turn1 = temp1; temp = '+'; temp1 = '-';

check_x = x; check_y = y; check_turn = 10 + i; num++; break; }

}

if( i == 7){ printf("这不是你的棋子\n"); Sleep(500); }

}

else if( round == 2)

{for ( i = 0; i 7; i++) //帅方

{ if( strcmp(check_2[i],check) == 0)

{turn = temp; turn1 = temp1; temp = '+'; temp1 = '-';

check_x = x; check_y = y; check_turn = 20 + i; num++; break; }

}

if( i == 7){ printf("这不是你的棋子\n"); Sleep(500); }

}

}

else if( num % 2 == 0) //放棋

{ char check_1[8][3] ={"车","马","象","士","将","炮","卒","+-"};

char check_2[8][3] ={"俥","马","相","仕","帅","軳","兵","+-"};

//中界 楚河上下坐标 12 15 往下2 往右4

if( check_turn 20) //将方

{if( check_turn == 10) //车的走法规范

{ if((x == check_x y == check_y))

{temp = turn; temp1 = turn1; turn = 'O'; turn1 = 'N'; num--;

printf("三思而后行\n"); printf("还是你的回合"); Sleep(500); }

else if( y == check_y )

{ if( x check_x)

{ for(j = check_x + 2; j x;j = j + 2)

{ if(map[j][y] == '+'); else{printf("不合法的下法\n"); Sleep(500); break; } }

if( j = x) check_main1(temp,temp1,turn,turn1,num,if_return,map);

}

if( x check_x){ for(j = check_x - 2; j x;j = j - 2)

{ if(map[j][y] == '+'); else{printf("不合法的下法\n"); Sleep(500); break; }

}

if( j = x)check_main1(temp,temp1,turn,turn1,num,if_return,map);

}

}

else if( x == check_x )

{if( y check_y)

{for(j = check_y + 4; j y;j = j + 4)

{if(map[x][j] == '+'); else {printf("不合法的下法\n"); Sleep(500); break; }

}

if( j = y) check_main1(temp,temp1,turn,turn1,num,if_return,map);

}

if( y check_y)

{for(j = check_y - 4; j y;j = j - 4)

{ if(map[x][j] == '+'); else { printf("不合法的下法\n"); Sleep(500); break; }

}

if( j = y) check_main1(temp,temp1,turn,turn1,num,if_return,map);

}

}

else { printf("不合法的下法\n"); Sleep(500); }

}

if( check_turn == 11) //马的走法规范

{if((x == check_x y == check_y))

{ temp = turn; temp1 = turn1; turn = 'O'; turn1 = 'N'; num--;

printf("三思而后行\n"); printf("还是你的回合"); Sleep(500); }

else if( (abs( x - check_x) == 2 abs( y - check_y) == 8) map[check_x][(y+check_y)/2] =='+')

{check_main1(temp,temp1,turn,turn1,num,if_return,map); }

else if( (abs( x - check_x) == 4 abs( y - check_y) == 4) map[(x + check_x)/2][check_y] == '+' )

{check_main1(temp,temp1,turn,turn1,num,if_return,map); }

else { printf("不合法的下法\n");Sleep(500); }

} //其余代码在后续