程序写得有点繁琐,希望以后可以改进。 // check the check.cpp : Defines the entry point for the console application. // #include "stdafx.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int num=0; //record the number of the checkerboard; int piecenum=0;// record the number of the pieces; bool blank=false; // judge the checkerboard is blank; bool checkKing=false;// judge the king is in check; char King[6]={'/0'}; //the checked King; char checkerboard[8][8]={'/0'};// the checkerboard; bool checkP(int a,int b,char c[][8],char d,char (&e)[6]);// check P function; bool checkN(int a,int b,char c[][8],char d,char (&e)[6]);// check N function; bool checkB(int a,int b,char c[][8],char d,char (&e)[6]);// check B function; bool checkR(int a,int b,char c[][8],char d,char (&e)[6]);// check R function; bool checkQ(int a,int b,char c[][8],char d,char (&e)[6]);// check Q function; // the checkerboard program; while(blank==false) { //enter the checkerboard; for(int i=0;i<8;++i) { for(int j=0;j<8;++j) { cin>>checkerboard[i][j]; if(checkerboard[i][j]!='.')++piecenum; if(checkerboard[i][j]=='/n') { --i; --j; } } } if(piecenum==0) { blank=true; break;// end the game; } else { // check the check; ++num; //For every piece, check the check; for(int x=0;x<7;++x) { for(int y=0;y<7;++y) { //check that if P make King in check; if(checkerboard[x][y]=='P'||checkerboard[x][y]=='p') { checkKing=checkP(x,y,checkerboard,checkerboard[x][y],King); if(checkKing==true) { cout<<"Game #"<<num<<":"<<King<<" king is in check."<<'/n'; break; } } //check that if N make King in check; if(checkerboard[x][y]=='N'||checkerboard[x][y]=='n') { checkKing=checkN(x,y,checkerboard,checkerboard[x][y],King); if(checkKing==true) { cout<<"Game #"<<num<<":"<<King<<" King is in check."<<'/n'; break; } } //check that if B make King in check; if(checkerboard[x][y]=='B'||checkerboard[x][y]=='b') { checkKing=checkB(x,y,checkerboard,checkerboard[x][y],King); if(checkKing==true) { cout<<"Game #"<<num<<":"<<King<<" King is in check."<<'/n'; break; } } //check that if R make King in check; if(checkerboard[x][y]=='R'||checkerboard[x][y]=='r') { checkKing=checkR(x,y,checkerboard,checkerboard[x][y],King); if(checkKing==true) { cout<<"Game #"<<num<<":"<<King<<" King is in check."<<'/n'; break; } } //check that if Q make King in check; if(checkerboard[x][y]=='Q'||checkerboard[x][y]=='q') { checkKing=checkQ(x,y,checkerboard,checkerboard[x][y],King); if(checkKing==true) { cout<<"Game #"<<num<<":"<<King<<" King is in check."<<'/n'; break; } } } if(checkKing==true)break; } //No king is in check after scanning all the piece; if(checkKing==false)cout<<"No King is in check."<<'/n'; } blank=false; checkKing=false; piecenum=0; for(int t=0;t<6;++t)King[t]='/0'; } system("pause"); return 0; } // check P function; bool checkP(int a,int b,char c[][8],char d,char (&e)[6]) { bool mark=false; //check the black king is in check by white P; if(d=='P') { if((a-1>=0)&&(b-1>=0)) { if(c[a-1][b-1]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; } } if((a-1>=0)&&(b+1<=7)) { if(c[a-1][b+1]=='k') { mark=true; //e="black"; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; } } } //check the white king is in check by black P; if(d=='p') { if((a+1<=7)&&(b-1>=0)) { if(c[a+1][b-1]=='K') { mark=true; //e="white"; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; } } if((a+1<=7)&&(b+1<=7)) { if(c[a+1][b+1]=='K') { mark=true; //e="write"; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; } } } return mark; } // check N function; bool checkN(int a,int b,char c[][8],char d,char (&e)[6]) { bool mark=false; //check the black king is in check by white N; if(d=='N') { if((a-2>=0)&&(b-1>=0)) { if(c[a-2][b-1]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; } } if((a-2>=0)&&(b+1<=7)) { if(c[a-2][b+1]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; } } if((a-1>=0)&&(b-2>=0)) { if(c[a-1][b-2]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; } } if((a-1>=0)&&(b+2<=7)) { if(c[a-1][b+2]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; } } if((a+1<=7)&&(b-2>=0)) { if(c[a+1][b-2]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; } } if((a+1<=7)&&(b+2<=7)) { if(c[a+1][b+2]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; } } if((a+2<=7)&&(b-1>=0)) { if(c[a+2][b-1]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; } } if((a+2<=7)&&(b+2<=7)) { if(c[a+2][b+2]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; } } } //check the white king is in check by black N; if(d=='n') { if((a-2>=0)&&(b-1>=0)) { if(c[a-2][b-1]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; } } if((a-2>=0)&&(b+1<=7)) { if(c[a-2][b+1]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; } } if((a-1>=0)&&(b-2>=0)) { if(c[a-1][b-2]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; } } if((a-1>=0)&&(b+2<=7)) { if(c[a-1][b+2]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; } } if((a+1<=7)&&(b-2>=0)) { if(c[a+1][b-2]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; } } if((a+1<=7)&&(b+2<=7)) { if(c[a+1][b+2]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; } } if((a+2<=7)&&(b-1>=0)) { if(c[a+2][b-1]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; } } if((a+2<=7)&&(b+2<=7)) { if(c[a+2][b+2]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; } } } return mark; } // check B function; bool checkB(int a,int b,char c[][8],char d,char (&e)[6]) { bool mark=false; int m; int n; if(d=='B') { m=a-1; n=b-1; while(m>=0&&n>=0) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { --m; --n; continue; } else { break; } } if(mark==false) { m=a-1; n=b+1; while(m>=0&&n<8) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { --m; ++n; continue; } else { break; } } } if(mark==false) { m=a+1; n=b-1; while(m<8&&n>=0) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { ++m; --n; continue; } else { break; } } } if(mark==false) { m=a+1; n=b+1; while(m<8&&n<8) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { ++m; ++n; continue; } else { break; } } } } if(d=='b') { m=a-1; n=b-1; while(m>=0&&n>=0) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { --m; --n; continue; } else { break; } } if(mark==false) { m=a-1; n=b+1; while(m>=0&&n<8) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { --m; ++n; continue; } else { break; } } } if(mark==false) { m=a+1; n=b-1; while(m<8&&n>=0) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { ++m; --n; continue; } else { break; } } } if(mark==false) { m=a+1; n=b+1; while(m<8&&n<8) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { ++m; ++n; continue; } else { break; } } } } return mark; } // check R function; bool checkR(int a,int b,char c[][8],char d,char (&e)[6]) { bool mark=false; int m,n; if(d=='R') { m=a-1; n=b; while(m>=0) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { --m; continue; } else { break; } } if(mark==false) { m=a+1; n=b; while(m<8) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { ++m; continue; } else { break; } } } if(mark==false) { m=a; n=b-1; while(n>=0) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { --n; continue; } else { break; } } } if(mark==false) { m=a; n=b+1; while(n<8) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { ++n; continue; } else { break; } } } } if(d=='r') { m=a-1; n=b; while(m>=0) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { --m; continue; } else { break; } } if(mark==false) { m=a+1; n=b; while(m<8) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { ++m; continue; } else { break; } } } if(mark==false) { m=a; n=b-1; while(n>=0) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { --n; continue; } else { break; } } } if(mark==false) { m=a; n=b+1; while(n<8) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { ++n; continue; } else { break; } } } } return mark; } // check Q function; bool checkQ(int a,int b,char c[][8],char d,char (&e)[6]) { bool mark=false; int m,n; if(d=='Q') { m=a-1; n=b-1; while(m>=0&&n>=0) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { --m; --n; continue; } else { break; } } if(mark==false) { m=a-1; n=b+1; while(m>=0&&n<8) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { --m; ++n; continue; } else { break; } } } if(mark==false) { m=a+1; n=b-1; while(m<8&&n>=0) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { ++m; --n; continue; } else { break; } } } if(mark==false) { m=a+1; n=b+1; while(m<8&&n<8) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { ++m; ++n; continue; } else { break; } } } if(mark==false) { m=a-1; n=b; while(m>=0) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { --m; continue; } else { break; } } } if(mark==false) { m=a+1; n=b; while(m<8) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { ++m; continue; } else { break; } } } if(mark==false) { m=a; n=b-1; while(n>=0) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { --n; continue; } else { break; } } } if(mark==false) { m=a; n=b+1; while(n<8) { if(c[m][n]=='k') { mark=true; e[0]='b'; e[1]='l'; e[2]='a'; e[3]='c'; e[4]='k'; break; } else if(c[m][n]=='.') { ++n; continue; } else { break; } } } } if(d=='q') { m=a-1; n=b-1; while(m>=0&&n>=0) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { --m; --n; continue; } else { break; } } if(mark==false) { m=a-1; n=b+1; while(m>=0&&n<8) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { --m; ++n; continue; } else { break; } } } if(mark==false) { m=a+1; n=b-1; while(m<8&&n>=0) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { ++m; --n; continue; } else { break; } } } if(mark==false) { m=a+1; n=b+1; while(m<8&&n<8) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { ++m; ++n; continue; } else { break; } } } if(mark==false) { m=a-1; n=b; while(m>=0) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { --m; continue; } else { break; } } } if(mark==false) { m=a+1; n=b; while(m<8) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { ++m; continue; } else { break; } } } if(mark==false) { m=a; n=b-1; while(n>=0) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { --n; continue; } else { break; } } } if(mark==false) { m=a; n=b+1; while(n<8) { if(c[m][n]=='K') { mark=true; e[0]='w'; e[1]='h'; e[2]='i'; e[3]='t'; e[4]='e'; break; } else if(c[m][n]=='.') { ++n; continue; } else { break; } } } } return mark; }