还是坏习惯,写完了没bug就不想调试了,希望可以正常运行,产生正常结果吧。
#include<stdio.h>
#include<string.h>
int b[8][2] = { { 1, 0 },{ 0, 1 },{ -1, 0 },{ 0, -1 },
{ 1, 1 },{ 1, -1 },{ -1, 1 },{ -1, -1 } };
char a[8][8];
int b2[8][2][2];
bool flag = false;
//决定棋子颜色
char qz(int i) {
return i % 2 != 0 ? 'X' : 'O';
}
//判断是否越界
bool legal(int x, int y)
{
return 1 <= x && x <= 8 && 1 <= y && y <= 8;
}
//检查棋子周围有哪些可以相对应的棋子
int check(int m, int n, int p, int i, bool flag) {
int nm = m + b[p][0], nn = n + b[p][1];
int dis = 0;
dis++;
if (legal(nm, nn)) {
if (a[nm][nn] == qz(i)) {
if (flag) { printf(" %d,%d ", nm, nn); }
return b2[nm][nn][1] = (nm - n, nn - n, dis);//返回方向向量及长度
}
else if (a[nm][nn] == '.') return 0;
else {
check(nm, nn, p, i, flag);
}
}
else return 0;
}
//查找棋子
void find(char a[8][8],int i,bool flag) {
int m, n, p;
for (m = 0; m < 8;m ++) {
for (n = 0; n < 8; n++) {
if (a[m][n] == qz(i)) {
for (p = 0; p < 8; p++) {
check(m, n, p, i, flag);
}
}
}
}
}
//下棋
void set(int r, int c, int i, bool flag) {
a[r][c] = qz(i);
for (int p = 0; p < 8; p++) {
{
check(r, c, p, i, flag);
for (int j = 0; j < b2[r][c][1]; j++) {
a[r + b2[p][0][0]][c + b2[p][1][0]] = a[r][c];
}
}
}
}
//打印棋盘
void print_chess(char a[8][8]){
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
printf("%c", a[i][j]);
}
}
}
int main() {
int r, c, i=0;
char x[3];
memset(a, '.', sizeof(a));
while (scanf_s("%s", x) != 0) {
i++;
switch (*x) {
case 'L': find(a, i, flag); break;
case 'Q': print_chess(a); break;
default: {scanf_s("%d%d", &r, &c);
flag = true;
find(a, i, flag);
set(r, c, i, flag);
}
}
return 0;
}
}