#include<bits/stdc++.h>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
using namespace std;
void Color(int a){if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);if(a==9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_GREEN|BACKGROUND_BLUE);if(a==10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_BLUE);if(a==11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);if(a==12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);if(a==13) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);if(a==14) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);}

int ground[10][9] = {{-1,-2,-3,-4,-5,-4,-3,-2,-1},{0,0,0,0,0,0,0,0,0},{0,-6,0,0,0,0,0,-6,0},{-7,0,-7,0,-7,0,-7,0,-7},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{7,0,7,0,7,0,7,0,7},{0,6,0,0,0,0,0,6,0},{0,0,0,0,0,0,0,0,0},{1,2,3,4,5,4,3,2,1}}; 
//1车2马3相4士5帅6炮7兵 

char* get(int num)
{
	switch(num)
	{
		case 0:return"--";
		case 1:return"俥";
		case 2:return"馬";
		case 3:return"相";
		case 4:return"仕";
		case 5:return"帅";
		case -1:return"車";
		case -2:return"马";
		case -3:return"象";
		case -4:return"士";
		case -5:return"将"; 
		case 6:return"炮";
		case 7:return"兵";
		case -6:return"砲";
		case -7:return"卒"; 
	}
}

void printboard()
{
	Color(5);
	for(int j = 0;j <= 18;j++)
	{
		if(j % 2 == 0)
		{
			cout << " "; 
			for(int i = 0;i <= 8;i++)
			{
				if(ground[j / 2][i] < 0) Color(13); else if(ground[j / 2][i] > 0) Color(4);
				cout << get(ground[j / 2][i]) << " ";
				Color(5);
			}
			cout << endl;
		}
		else
		{
			if(j == 9) 
			{
				Color(9);
				cout <<"            河界            "; 
				cout << endl;
				Color(5);
			}
			else
			{
				for(int i = 1;i <= 10;i++)
				{
					cout << "丨 ";
				}
				cout << endl;
			}
		}
	}
	Color(0);
	cout << endl << endl;
	return;
}

bool go(int i,int j,int l,int m)
{
	if(ground[i][j] * ground[l][m] > 0) return false;//不能走对手的棋
	switch(abs(ground[i][j]))
	{
		case 1:{if((l - i) * (m - j) != 0) return false;}
	}
	return true;
}

void zouqi(int now)//1红-1黑 
{
	Color(0);
	cout << "请选择棋子(行,列):";
	int i,j;
	cin >> i >> j;
	i--,j--;
	while(ground[i][j] * now <= 0)
	{
		cout << "请重新选择棋子(行,列):";
		cin >> i >> j;
		i--,j--;
	}
	cout << "请选择终点(行,列):";
	int l,m;
	cin >> l >> m;
	l--,m--;
	while(!go(i,j,l,m))
	{
		cout << "请重新选择终点(行,列):";
		cin >> l >> m;
		l--,m--;
	}
	int t = ground[i][j];
	ground[i][j] = 0;
	ground[l][m] = t;
	printboard();
}

int checkmate()// -1黑被将死 1红被将死 0不变
{
	bool flag1 = false,flag2 = false;
	for(int i = 0;i <= 9;i++)
	{
		for(int j = 3;j <= 5;j++)
		{
			if(i > 2 && i < 7) continue;
			if(ground[i][j] == 5) flag1 = true;
			else if(ground[i][j] == -5) flag2 = true;
		}
	}
	if(flag1 && !flag2) return -1;
	else if(!flag1 && flag2) return 1;
	return 0;
}

int main()
{
	printboard();
	int cur = 1;
	while(checkmate() == 0)
	{
		Color(5);
		cout << "现在是";
		if(cur == 1)
		{
			Color(4);
			cout << " 红方 ";
		} 
		else
		{
			Color(13);
			cout << " 黑方 ";
		}
		Color(5);
		cout << "走棋" << endl;
		Color(0);
		zouqi(cur);
		cur *= -1;
	}
	Color(5);
	if(checkmate() == 1) cout << "红被将死!";
	else cout << "黑被将死!";
	cout << endl;
	return 0;
}