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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急需用c语言写中国象棋的代码,只要红色方布局和走棋相关的知识,希望对你有一定的参考价值。

参考技术A #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] == '+'); elseprintf("不合法的下法\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] == '+'); elseprintf("不合法的下法\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);
//其余代码在后续

SQL2005在输入语句时为啥有的是蓝色,有的是红色,有的是黑色?

如题

这个叫代码高亮显示,其实本质跟用记事本写代码一样; 实际上用记事本写代码,效率低,不人性化; 代码高亮是为了让人一眼就可以看出这段代码哪些是关键字,哪些是特殊字符; 针对不同功能的字符分部用不同的颜色表示;
例如: 浅绿色的就是注释(如:--这是注释),蓝色就是关键字,红色就是字符,粉红色就是函数,黑色基本就没有什么特殊含义了,例如列名,数字
参考技术A 这没有为什么,就是这样设置的,你也可以修改它的显示颜色,一般情况下 ,关键字显示蓝色,字段 ,表名 显示绿色,函数显示 粉红色,字符串显示红色,等等,你可以在manage studio中修改它的显示颜色

以上是关于急需用c语言写中国象棋的代码,只要红色方布局和走棋的主要内容,如果未能解决你的问题,请参考以下文章

C语言写的程序,帮改成DLL

编写和运行Java程序的步骤是啥?每一步的结果是啥?在JDK中,Java语言的编译命令是啥?急需答案啊。

用c语言编辑,计算1-1000以内能被3整除的数的个数以及它们的和!急需

三子棋(C语言实现)

高手啊 求救求救啊帮我用c语言编写个先进先出的算法 急需啊

POJ 2488 深搜dfs