#include<Windows.h>
#include<iostream>
#include<string>
#define K(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
void color(int ForgC, int BackC) {
WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}
int map[9][9]= {
{-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,2,4,3,5,6,3,4,2},
{-1,1,1,1,1,1,1,1,1},
{-1,0,0,0,0,0,0,0,0},
{-1,0,0,0,0,0,0,0,0},
{-1,0,0,0,0,0,0,0,0},
{-1,0,0,0,0,0,0,0,0},
{-1,1,1,1,1,1,1,1,1},
{-1,2,4,3,5,6,3,4,2}
},
Pl[9][9]= {
{-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,2,2,2,2,2,2,2,2},
{-1,2,2,2,2,2,2,2,2},
{-1,0,0,0,0,0,0,0,0},
{-1,0,0,0,0,0,0,0,0},
{-1,0,0,0,0,0,0,0,0},
{-1,0,0,0,0,0,0,0,0},
{-1,1,1,1,1,1,1,1,1},
{-1,1,1,1,1,1,1,1,1}
};
int Can[9][9],whcan[9][9],blcan[9][9];
char C[7]= {'0','P','R','B','N','Q','K'};
int P=1,x=4,y=4,T,Sx=-1,Sy=-1,wh_Kx=5,wh_Ky=8,bl_Kx=5,bl_Ky=1,KK=0,bol;
int Chck[9][9],Chx=-1,Chy=-1;
bool blr1=1,blr2=1,whr1=1,whr2=1;
string String,Say;
string Point(int x,int y) {
if(x==-1 && y==-1)return "_";
string ans="";
ans=ans+((char)('a'+x-1));
ans=ans+(char)('0'+9-y);
return ans;
}
void Chge_Kg_Rk(int kx,int ky,int c){
if(c==1 && wh_Kx==5 && wh_Ky==8){
if(whr1 && !(map[8][4]||map[8][3]||map[8][2]))Can[8][1]=4+(blcan[8][1]!=0);
if(whr2 && !(map[8][6]||map[8][7]))Can[8][8]=4+(blcan[8][8]!=0);
}
else if(c==2 && bl_Kx==5 && bl_Ky==1){
if(blr1 && !(map[1][4]||map[1][3]||map[1][2]))Can[1][1]=4+(blcan[1][1]!=0);
if(blr2 && !(map[1][6]||map[1][7]))Can[1][8]=4+(blcan[1][8]!=0);
}
}
void Mv_Pawn(int x,int y,int ch) {
memset(Can,0,sizeof(Can));
int c=(P==1)?-1:1;
//-1=wh 1==bl
Can[y+c][x]=(!Pl[y+c][x]);
if(y==(c==-1?7:2))Can[y+c+c][x]=(Can[y+c][x]&&!Pl[y+c+c][x]);
Can[y+c][x-1]=(Pl[y+c][x-1]==3-ch)*2;
Can[y+c][x+1]=(Pl[y+c][x+1]==3-ch)*2;
}
void Mv_Rook(int x,int y,int c) {
memset(Can,0,sizeof(Can));
for(int i=x-1; i>0; i--) {
if(!Pl[y][i])Can[y][i]=1;
else if(Pl[y][i]==(3-c))Can[y][i]=2;
if(Pl[y][i])break;
}
for(int i=x+1; i<=8; i++) {
if(!Pl[y][i])Can[y][i]=1;
else if(Pl[y][i]==(3-c))Can[y][i]=2;
if(Pl[y][i])break;
}
for(int i=y-1; i>0; i--) {
if(!Pl[i][x])Can[i][x]=1;
else if(Pl[i][x]==(3-c))Can[i][x]=2;
if(Pl[i][x])break;
}
for(int i=y+1; i<=8; i++) {
if(!Pl[i][x])Can
C++国际象棋 (有王车易位)
最新推荐文章于 2025-02-11 11:41:50 发布