• 爬格子呀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;
        }
    }
    
    
    
  • 相关阅读:
    HTML中CSS入门基础
    HTML基本代码教学,第三天
    HTML基本代码教学,第二天
    HTML基本代码教学片,认识HTML
    开学第一天,规章制度,教学大纲
    新的学期,从头开始
    开启新模式WinForm
    封装、继承、多态的基本详细使用方式与方法以及含义
    Python开发基础-Day4-布尔运算、集合
    Python开发基础-Day3-列表、元组和字典
  • 原文地址:https://www.cnblogs.com/romaLzhih/p/9489870.html
Copyright © 2020-2023  润新知