#include <iostream>
#include <string.h> using namespace std;
char qp[10][10];
int result; //结果
int black_k_x; //将军的x,y
int black_k_y;
int white_k_x;
int white_k_y;
int abs(int i){
if(i<0)
return -i;
return i;
}
//马
bool n_check(int n_x,int n_y,int k_x,int k_y){ if(abs(n_x-k_x)==2&&abs(n_y-k_y)==1)
return true;
if(abs(n_x-k_x)==1&&abs(n_y-k_y)==2)
return true; return false; }
//兵
bool p_check(int p_x,int p_y,int k_x,int k_y){
if(qp[p_x][p_y]=='p'){
if(p_x+1==k_x&&abs(p_y-k_y)==1)
return true;
}
else if(qp[p_x][p_y]=='P'){
if(p_x-1==k_x&&abs(p_y-k_y)==1)
return true;
}
return false; }
//车
bool r_check(int r_x,int r_y,int k_x,int k_y){
int i;
if(r_x==k_x){ //同横
if(k_y>r_y){ //r_y 比较小
for(i=r_y+1;i<k_y;i++)
if(qp[r_x][i]!='.')
break;
if(i==k_y)
return true;
}
if(k_y<r_y){ for(i=k_y+1;i<r_y;i++)
if(qp[r_x][i]!='.')
break; if(i==r_y)
return true; } }
if(r_y==k_y){ //同列
if(k_x>r_x){ //r_x比较小
for(i=r_x+1;i<k_x;i++)
if(qp[i][k_y]!='.')
break;
if(i==k_x)
return true;
}
if(k_x<r_x){ //k_x 比较小 for(i=k_x+1;i<r_x;i++)
if(qp[i][k_y]!='.')
break; if(i==r_x)
return true;
} }
return false; }
//象
bool b_check(int b_x,int b_y,int k_x,int k_y){
int i,j;
//x差和y差相同
if(abs(b_x-k_x)==abs(b_y-k_y)){ //xy同增
i=b_x;j=b_y;
while(i<k_x&&j<k_y){
i++;j++;
if(qp[i][j]!='.')
break;
} //x减y增
while(i>k_x&&j<k_y){ i--;j++;
if(qp[i][j]!='.')
break;
} //x增y减
while(i<k_x&&j>k_y){ i++;j--;
if(qp[i][j]!='.')
break;
} //x减y减
while(i>k_x&&j>k_y){
i--;j--;
if(qp[i][j]!='.')
break;
} if(i==k_x&&j==k_y)
return true; }
return false; }
//后
bool q_check(int q_x,int q_y,int k_x,int k_y){
return r_check(q_x,q_y,k_x,k_y)||b_check(q_x,q_y,k_x,k_y); }
void check(){ bool f;
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++){ if(qp[i][j]=='p'){
f=(p_check(i,j,white_k_x,white_k_y)); }else if(qp[i][j]=='n'){
f=(n_check(i,j,white_k_x,white_k_y)); } else if(qp[i][j]=='q'){
f=(q_check(i,j,white_k_x,white_k_y)); }else if(qp[i][j]=='r'){
f=(r_check(i,j,white_k_x,white_k_y)); }else if(qp[i][j]=='b'){
f=(b_check(i,j,white_k_x,white_k_y)); } if(f==true){ result=1;
return;
} if(qp[i][j]=='P'){
f=(p_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='N'){
f=(n_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='Q'){
f=(q_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='R'){
f=(r_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='B'){
f=(b_check(i,j,black_k_x,black_k_y));
}
if(f==true){ result=0;
return;
} }
result=2; } int main()
{
int run=1; while(true){
bool flag=true; //退出标志 memset(qp,'.',sizeof(qp));
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++){
cin>>qp[i][j];
if(flag&&qp[i][j]!='.')
flag=false;
if(qp[i][j]=='k'){black_k_x=i;black_k_y=j;}
if(qp[i][j]=='K'){white_k_x=i;white_k_y=j;} }
if(flag) break; //空盘退出 check(); //读盘 if(result==0) //结果为0
cout << "Game #"<<run<<": black king is in check." << endl;
else if(result==1)
cout << "Game #"<<run<<": white king is in check." <<endl;
else
cout << "Game #"<<run<<": no king is in check."<<endl; run++; }
return 0;
}

最新文章

  1. 开发socketserver 以及定制开发自己的FTP服务器
  2. 测试家庭流媒体服务器Windows7
  3. Install Solr+tomcat
  4. Xcode模板修改
  5. 缓存应用--Memcached分布式缓存简介
  6. Mac电脑没有声音,苹果电脑没有声音怎么办
  7. iOS进阶——可取消的block
  8. django 的mysql数据配置
  9. perl指针引用
  10. 解决fontawesome-webfont 被拦截的问题
  11. httpclient在抓取网页时出现速度慢的情况分析
  12. 学C++不得不看的一篇文章[转]
  13. BZOJ 1101 [POI2007]Zap(莫比乌斯反演)
  14. openSUSE 安装
  15. C++中结构体与类的区别(struct与class的区别)
  16. list转换string
  17. etl数据同步工具 kettle
  18. 简明awk教程(Simple awk tutorial)
  19. python中各种遇到的函数
  20. Cognos访问权限之让拒绝更友善

热门文章

  1. C#面向对象的三大特征
  2. 关于vim打开中文文件出现乱码问题
  3. win7IIS错误修改路径最全的
  4. 【oracle】初学jobs
  5. 【python自动化第一篇:python介绍与入门】
  6. IOS开发之UINavigationBar
  7. SSO之CAS备忘
  8. [Webpack 2] Validate your Webpack config with webpack-validator
  9. Myapplication的作用与理解
  10. Eclipse3.7中搭建Android开发环境文档教程和视频教程