/*要修复问题:
1、没有王车易位
2、未调用升变函数
*/
#include<bits/stdc++.h>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
#define int long long
#define N 100010
using namespace std;
//1表示兵,2表示车,3表示马,4表示相
//5表示后,6表示王,加10表示白方,不加10红方
int t0[15]={0,2,3,4,5,6,4,3,2},game_end;
int mp[15][15];
string s0,s1;//从s0走到s1
bool check_turn;//0为白方、1为红方
bool king_move;//0表示没移动过,1表示移动过
void Color(int a){
if(a0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
if(a3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
if(a4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
if(a5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
if(a6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
if(a7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
if(a8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
if(a9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_GREEN|BACKGROUND_BLUE);
if(a10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_BLUE);
if(a11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);
if(a12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);
if(a13) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);//grey
if(a14) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);
}
void glory(int a,int b){//兵升变
char c;
Color(0);
cout<<endl<<"Please input what would you like to change"<<endl;
cout<<"(A means horse,B means car,C means queen,D means ) your soilder:";
cin>>c;
if(c'A') mp[a][b]=3;
else if(c=='B') mp[a][b]=2;
else if(c=='C') mp[a][b]=5;
else if(c=='D') mp[a][b]=4;
}
bool S(int a,int b,int c,int d){//检验兵
/if(mp[b][a]>10){//白兵
if(b7){
if(ca){//列数不变
if(b-d1||b-d2){
if(d1) glory(d,c);
return 1;
}
else return 0;
}
else{
if(mp[d][c]0) return 0;
else{
if(d1) glory(d,c);
return 1;
}
}
}
else{
if(ca){//列数不变
if(b-d1){
if(d1) glory(d,c);
return 1;
}
else return 0;
}
else{
if(mp[d][c]0) return 0;
else{
if(d1) glory(d,c);
return 1;
}
}
}
}
else{
if(b2){
if(ca){//列数不变
if(d-b1||d-b2){
if(d1) glory(d,c);
return 1;
}
else return 0;
}
else{
if(mp[d][c]0) return 0;
else{
if(d1) glory(d,c);
return 1;
}
}
}
else{
if(ca){//列数不变
if(d-b1){
if(d1) glory(d,c);
return 1;
}
else return 0;
}
else{
if(mp[d][c]0) return 0;
else{
if(d1) glory(d,c);
return 1;
}
}
}
}/
if(d==1) glory(d,c);
return 1;
}
bool C(int a,int b,int c,int d){//检验车
if(d!=b&&c!=a) return 0;
return 1;
}
bool H(int a,int b,int c,int d){//检验马
if(C(a,b,c,d)) return 0;
if(abs(d-b)==2&&abs(c-a)==1) return 1;
else if(abs(d-b)==1&&abs(c-a)==2) return 1;
return 0;
}
bool M(int a,int b,int c,int d){//检验相
if(C(a,b,c,d)) return 0;
int tmp=abs(b-d);
if(abs(c-a)==tmp) return 1;
return 0;
}
bool Q(int a,int b,int c,int d){//检验后
if(C(a,b,c,d)||M(a,b,c,d)) return 1;
return 0;
}
bool K(int a,int b,int c,int d){//检验王
if(abs(d-b)>1||abs(c-a)>1) return 0;
return 1;
}
void check_kill(int a,int b,int c,int d){
if(mp[d][c]==16){
Color(4);
cout<<"RED WIN!!!"<<endl;
game_end=1;
return ;
}
else if(mp[d][c]==6){
Color(0);
cout<<"WHITE WIN!!!"<<endl;
game_end=1;
return ;
}
return ;
}
void check_type(int a,int b,int c,int d);
void change_chess(int a,int b,int c,int d,bool f){
if(!f){
check_type(a,b,c,d);
}
Color(5);
cout<<" a b c d e f g h"<<endl;
for(int i=1;i<=8;i++){
Color(5);
cout<<i<<" ";
for(int j=1;j<=8;j++){
int tmp=mp[i][j];
if(mp[i][j]>10){
Color(0);
mp[i][j]-=10;
}
else Color(4);
if(mp[i][j]==1) cout<<"兵";
else if(mp[i][j]==2) cout<<"车";
else if(mp[i][j]==3) cout<<"马";
else if(mp[i][j]==4) cout<<"相";
else if(mp[i][j]==5) cout<<"后";
else if(mp[i][j]==6) cout<<"王";
else cout<<" ";
mp[i][j]=tmp;
}
Color(5);
cout<<i<<endl;
}
Color(5);
cout<<" a b c d e f g h"<<endl;
return;
}
void check_type(int a,int b,int c,int d){
if(mp[b][a]==1||mp[b][a]==11&&S(a,b,c,d)){
check_kill(a,b,c,d);
mp[d][c]=mp[b][a];
mp[b][a]=0;
return;
}
else if(mp[b][a]==2||mp[b][a]==12&&C(a,b,c,d)){
check_kill(a,b,c,d);
mp[d][c]=mp[b][a];
mp[b][a]=0;
return;
}
else if(mp[b][a]==3||mp[b][a]==13&&H(a,b,c,d)){
check_kill(a,b,c,d);
mp[d][c]=mp[b][a];
mp[b][a]=0;
return;
}
else if(mp[b][a]==4||mp[b][a]==14&&M(a,b,c,d)){
check_kill(a,b,c,d);
mp[d][c]=mp[b][a];
mp[b][a]=0;
return;
}
else if(mp[b][a]==5||mp[b][a]==15&&Q(a,b,c,d)){
check_kill(a,b,c,d);
mp[d][c]=mp[b][a];
mp[b][a]=0;
return;
}
else if(mp[b][a]==6||mp[b][a]==16&&K(a,b,c,d)){
check_kill(a,b,c,d);
mp[d][c]=mp[b][a];
mp[b][a]=0;
king_move=1;
return;
}
else{
Color(4);
cout<<"Bad input!"<<endl;
return;
}
}
void init(int s){
int f0=0;
int s1,s0;
s0=s,s1=s+1;
if(s>4){
f0=10;
swap(s0,s1);
}
for(int i=1;i<=8;i++){
mp[s0][i]=t0[i]+f0;
}
for(int i=1;i<=8;i++){
mp[s1][i]=1+f0;
}
}
bool check_turn_f(int a,int b,int c,int d){
if((mp[b][a]>10&&check_turn)||(mp[b][a]<10&&!check_turn)){
Color(4);
cout<<"Bad input!"<<endl;
change_chess(0,0,0,0,1);
check_turn=!check_turn;
return 0;
}
return 1;
}
signed main(){
//system("color 6E");
init(1);init(7);
change_chess(0,0,0,0,1);
Color(5);
cout<<endl<<"Please input your choice: ";
while(cin>>s0>>s1){
cout<<endl;
int x0=s0[0]-'a'+1,y0=s0[1]-'0',x1=s1[0]-'a'+1,y1=s1[1]-'0';
if(check_turn_f(x0,y0,x1,y1)) change_chess(x0,y0,x1,y1,0);
if(game_end) return 0;
cout<<endl<<"Please input your choice: ";
check_turn=!check_turn;
}
}