#include <cstdio> using namespace std; const int dr[] = { -1,-1,0,1,1, 1, 0,-1 }; const int dc[] = { 0, 1,1,1,0,-1,-1,-1 }; char col; char board[15][15]; char cmd[5]; bool legal(int r, int c) { return r > 0 && r <= 8 && c > 0 && c <= 8; } char next() { return col == 'W' ? 'B' : 'W';//const char SUM = 'W' + 'B'; } bool one_line(int r, int c, int dir) { int enemy_cnt = 0, my_cnt = 0; while (legal(r + dr[dir], c + dc[dir])) { r += dr[dir], c += dc[dir]; char cur = board[r][c]; if (cur == '-')break; if (cur == col) { my_cnt++;break; } enemy_cnt++;//对方的棋子 } if (my_cnt&&enemy_cnt)return true; return false; } bool visit(int r, int c) { if (board[r][c] != '-')return false; for (int i = 0;i < 8;i++) if (one_line(r, c, i))return true; return false; } void L_fun() { int num = 0; for(int i=1;i<=8;i++) for(int j=1;j<=8;j++) if (visit(i, j)) { if (num++)printf(" "); printf("(%d,%d)", i, j); } if (num) printf(" "); else printf("No legal move. "); } void move(int r,int c) { for (int i = 0;i < 8;i++) if (one_line(r, c, i)) { int nr = r, nc = c;//千万千万不要改变r,c的值,八个方向都要用到--bug了一天 热 while (legal(nr + dr[i], nc + dc[i])) { nr += dr[i], nc += dc[i]; if (board[nr][nc] == col)break; board[nr][nc] = col; } } board[r][c] = col; col = next();//换子了兄弟 } void WandB_cal() { int W_cnt = 0, B_cnt = 0; for (int i = 1;i <= 8;i++) for (int j = 1;j <= 8;j++) if (board[i][j] == '-')continue; else if (board[i][j] == 'W')W_cnt++; else B_cnt++; printf("Black - %2d White - %2d ", B_cnt, W_cnt); } void M_fun() { int r = cmd[1] - '0', c = cmd[2] - '0'; if (!visit(r, c))col = next(); move(r, c); WandB_cal(); } void print_board() { for (int i = 1;i <= 8;i++) printf("%s", board[i] + 1);//自带换行fgets } int main() { int n; scanf("%d%*c", &n); while (n--) { for (int i = 1;i <= 8;i++)//从1开始!!!!!! fgets(board[i] + 1, 12, stdin); scanf("%s%*c", cmd); col = cmd[0]; while (scanf("%s%*c", cmd) == 1)//加%*c免得坑了后面的fgets队友 { char ch = cmd[0]; if (ch == 'Q') { print_board();break; } //if (ch == 'W' || ch == 'B')col = ch; else if (ch == 'L')L_fun(); else if (ch == 'M')M_fun(); } //打印 if (n != 0)printf(" "); } return 0; }