1. c语言,象棋棋盘代码求分析
i循环控制总输出的行数,循环结束条件说明要输出8行
i循环内部实现具体输出每一行内容,循环最后是输出换行的printf语句
j的8次循环实现在当前行输出8个图形,每个图形是个汉字(显示是白色方块)或者两个空格(与汉字等宽并且显示黑色底色)
当前位置输出汉字实心方块(ASCII码是连续的两个219)还是连续两个空格要根据i和j的和是否能被2整除的特点来决定:第1行,由于i=0是偶数,那么j=0~7应该输出白黑白黑的顺序,即(i+j)%2==0的偶数判断成立则输出白色;第2行i=1是奇数了,所以交错位置输出的是白色,依此类推。
2. c语言代码输出国际象棋棋盘问题
%C是代表两个字符
219是一个占位符实际的数据插入一个占位符,对应
输出219字符插入序列,这里是ASCII码219;之间的整形和字符转换,字符为整数编译器分配给整型变量的ASCII字符代码;整数整数到字符转换为对应于分配给字符变量的字符的ASCII码表;
3. 用C语言输出中国象棋棋盘的源代码!!急!急!急!
密码:yq12
4. 求用C语言做的中国象棋程序,人人对战的,不必人机对战,能在TC下运行的,谢谢了
#include <graphics.h>
#include<conio.h>
#include<string.h>
#include<bios.h>
void qizi(int,int,char *);
void qipan();
void jiemian();
main()
{
int gdriver,gmode,i=0,c=0;
gdriver=DETECT;
gmode=0;
printf("%d,%d",gdriver,gmode);
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver,&gmode,"c:\\tc");
while(c!=27)
{
c=getch();
clrscr();
jiemian(i);
if(c==80)
{
i++;
if(i==4)
{
i=0;
}
}
if(i==1)
{
if(c==13)
{
clrscr();
qipan();
break;
}
}
}
getch();
closegraph();
restorecrtmode();
return 0;
}
void qipan()
{
int i,j;
char *a1="A",*a2="B",*a3="C",*a4="D",*a5="E",*a6="F",*a7="G",*a8="H",*a9="I",
*a10="J",*a11="K",*a12="L",*a13="M",*a14="N";
setbkcolor(GREEN);
setlinestyle(0,0,3);
setcolor(1);
rectangle(20,20,360,400);
rectangle(30,30,350,390);
for(i=1;i<8;i++)
{
setlinestyle(0,0,3);
line(i*40+30,30,i*40+30,190);
line(i*40+30,230,i*40+30,390);
}
for(j=1;j<9;j++)
{
setlinestyle(0,0,3);
line(30,j*40+30,350,j*40+30);
}
setlinestyle(3,0,3);
line(150,30,230,110);
line(230,30,150,110);
line(150,310,230,390);
line(230,310,150,390);
setusercharsize(4,1,2,1);
settextstyle(1,0,4);
outtextxy(70,195,"chinese chess");
qizi(190,30,a1);
qizi(150,30,a2);
qizi(230,30,a2);
qizi(110,30,a3);
qizi(270,30,a3);
qizi(70,30,a4);
qizi(310,30,a4);
qizi(30,30,a5);
qizi(350,30,a5);
qizi(70,110,a6);
qizi(310,110,a6);
qizi(30,150,a7);
qizi(110,150,a7);
qizi(190,150,a7);
qizi(270,150,a7);
qizi(350,150,a7);
qizi(190,390,a8);
qizi(150,390,a9);
qizi(230,390,a9);
qizi(110,390,a10);
qizi(270,390,a10);
qizi(70,390,a11);
qizi(310,390,a11);
qizi(30,390,a12);
qizi(350,390,a12);
qizi(70,310,a13);
qizi(310,310,a13);
qizi(30,270,a14);
qizi(110,270,a14);
qizi(190,270,a14);
qizi(270,270,a14);
qizi(350,270,a14);
setcolor(BLUE);
rectangle(30,410,610,460);
setcolor(4);
outtextxy(40,420,"A->shuai B->shi C->xiang D->ma E->che F->pao G->bing");
setcolor(8);
outtextxy(40,440,"H->jiang I->shi J->xiang K->ma L->che M->pao N->zu");
return;
}
void qizi(int x,int y,char *q)
{
int *p="G";
if(strcmp(q,p)<1)
{
setlinestyle(0,0,3);
setcolor(RED);
circle(x,y,15);
setfillstyle(0,3);
floodfill(x,y,RED);
}
else
{
setlinestyle(0,0,3);
setcolor(DARKGRAY);
circle(x,y,15);
setfillstyle(0,3);
floodfill(x,y,DARKGRAY);
}
settextstyle(0,0,2);
outtextxy(x-7,y-7,q);
return;
}
void jiemian(int i)
{
setbkcolor(GREEN);
settextstyle(1,0,8);
setcolor(BLUE);
outtextxy(50,70,"chinese chess");
settextstyle(0,0,3);
setcolor(RED);
outtextxy(260,215,"start");
outtextxy(260,255,"again");
outtextxy(260,295,"undo");
outtextxy(260,335,"exit");
rectangle(250,210+i*40,390,240+i*40);
}
5. 急需用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); }
} //其余代码在后续
6. 急需用c语言写中国象棋的代码,只要红色方布局和走棋
#include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> #include<windows.h>
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); }
} //其余代码在后续