爬格子呀4-3

还是坏习惯,写完了没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;
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值