zoukankan      html  css  js  c++  java
  • 爬格子呀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;
        }
    }
    
    
    
  • 相关阅读:
    谨以此文纪念一周的心血历程
    面向对象初调用:foolish 电梯
    洛谷 1016 旅行家的预算
    洛谷 1514 引水入城
    洛谷 3178 树上操作
    洛谷 3811 【模板】乘法逆元
    洛谷 1156 垃圾陷阱
    洛谷 1363 幻想迷宫
    洛谷 1736 创意吃鱼法
    洛谷 1436 棋盘分割
  • 原文地址:https://www.cnblogs.com/romaLzhih/p/9489870.html
Copyright © 2011-2022 走看看