首页 > 其他分享 >c语言实战-极简扫雷

c语言实战-极简扫雷

时间:2024-07-09 14:26:39浏览次数:13  
标签:实战 极简 int count ++ 扫雷 board printf SIZE

C语言/c++写的C语言实战项目扫雷

结构比较清晰,仅供参考:

核心是扫雷的递归算法实现

上代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 10
#define MINES 15

char board[SIZE][SIZE]; // 游戏棋盘

// 初始化棋盘,'-'表示未揭示的区域
void initBoard() {
    for (int i = 0; i < SIZE; ++i) {
        for (int j = 0; j < SIZE; ++j) {
            board[i][j] = '-';
        }
    }
}

// 在棋盘上显示当前状态
void displayBoard() {
    printf("   ");
    for (int i = 0; i < SIZE; ++i) {
        printf("%d ", i);
    }
    printf("\n");
    for (int i = 0; i < SIZE; ++i) {
        printf("%d  ", i);
        for (int j = 0; j < SIZE; ++j) {
            printf("%c ", board[i][j]);
        }
        printf("\n");
    }
}

// 随机布置地雷
void placeMines() {
    srand(time(NULL));
    int count = 0;
    while (count < MINES) {
        int x = rand() % SIZE;
        int y = rand() % SIZE;
        if (board[x][y] != '*') {
            board[x][y] = '*';
            count++;
        }
    }
}

// 检查坐标是否有效
int isValid(int x, int y) {
    return (x >= 0 && x < SIZE && y >= 0 && y < SIZE);
}

// 计算周围的地雷数量
int countAdjacentMines(int x, int y) {
    int count = 0;
    for (int i = x - 1; i <= x + 1; ++i) {
        for (int j = y - 1; j <= y + 1; ++j) {
            if (isValid(i, j) && board[i][j] == '*') {
                count++;
            }
        }
    }
    return count;
}

// 揭示某个位置的内容
void reveal(int x, int y) {
    if (!isValid(x, y)) {
        return;
    }
    if (board[x][y] != '-') {
        return;
    }
    int mines = countAdjacentMines(x, y);
    if (mines > 0) {
        board[x][y] = mines + '0';
    } else {
        board[x][y] = ' ';
        for (int i = x - 1; i <= x + 1; ++i) {
            for (int j = y - 1; j <= y + 1; ++j) {
                reveal(i, j);
            }
        }
    }
}

int main() {
    int x, y;
    char action;

    initBoard();
    placeMines();

    do {
        displayBoard();
        printf("Enter action (r for reveal, q to quit): ");
        scanf(" %c", &action);

        if (action == 'r') {
            printf("Enter coordinates (x y): ");
            scanf("%d %d", &x, &y);
            if (isValid(x, y)) {
                reveal(x, y);
            } else {
                printf("Invalid coordinates!\n");
            }
        } else if (action == 'q') {
            printf("Quitting game.\n");
            break;
        } else {
            printf("Invalid action!\n");
        }
    } while (1);

    return 0;
}

标签:实战,极简,int,count,++,扫雷,board,printf,SIZE
From: https://blog.csdn.net/FENGCHEN____/article/details/140294888

相关文章

  • 【云原生之kubernetes实战】在k8s环境下部署OrangeHRM人力资源管理系统
    【云原生之kubernetes实战】在k8s环境下部署OrangeHRM人力资源管理系统一、OrangeHRM介绍1.1OrangeHRM简介1.2OrangeHRM特点1.3OrangeHRM使用场景二、相关知识介绍2.1本次实践存储介绍2.2k8s存储介绍三、本次实践介绍3.1本次实践简介3.2本次......
  • Holder模式(Holder Pattern):公司员工权限管理系统实战案例分析
    肖哥弹架构跟大家“弹弹”业务中设计模式的使用,需要代码关注欢迎点赞,点赞,点赞。关注公号Solomon肖哥弹架构获取更多精彩内容在一个大型公司中,员工根据其职位和部门被赋予不同的权限。这些权限可能包括访问敏感数据、审批财务报告、提交报销等。随着公司规模的增长......
  • Python函数进阶:高阶函数与函数式编程实战
    前言大家好!今天我们来探讨一个非常有趣且实用的话题——Python函数进阶,特别是高阶函数与函数式编程。记得上次我在一个项目中需要处理复杂的数据流,通过高阶函数和函数式编程,我不仅简化了代码,还提高了运行效率。说到这里,大家是否也想掌握这门技术呢?让我们一起深入了解Pytho......
  • Go项目实战—RabbitMq篇
    技术栈gingormrabbitmq数据库表结构:CREATETABLE`article`(`id`intNOTNULLAUTO_INCREMENT,`article_name`varchar(64)COLLATEutf8mb4_unicode_ciNOTNULL,`content`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULL,`user_id`intNOTNULL,`......
  • 实战篇——XSS漏洞xss-labs-master靶场实战一
    实战篇——XSS漏洞xss-labs-master靶场实战(1)XSS的分类(1)反射型XSS攻击者通过电子邮件等方式将恶意链接发送给目标用户。当目标用户点击该链接时,服务器接收该目标用户的请求并把带有恶意脚本的页面发送给目标用户的浏览器,浏览器解析页面时就会执行恶意脚本。(2)存储型XSS......
  • HarmonyOS NEXT开发实战:Navigation页面跳转对象传递案例
    介绍本示例主要介绍在使用Navigation实现页面跳转时,如何在跳转页面得到转入页面传的类对象的方法。实现过程中使用了第三方插件class-transformer,传递对象经过该插件的plainToClass方法转换后可以直接调用对象的方法,效果图预览使用说明从首页进入本页面时,会传递一个类对......
  • HarmonyOS NEXT开发实战:发布图片评论案例
    介绍本示例将通过发布图片评论场景,介绍如何使用startAbilityForResult接口拉起相机拍照,并获取相机返回的数据。效果图预览使用说明通过startAbilityForResult接口拉起相机,拍照后获取图片地址。实现思路创建CommentData类,实现IDataSource接口的对象,用于评论列表使用Lazy......
  • Nginx性能调优5招35式不可不知的策略实战
    Nginx是一个高性能的HTTP和反向代理服务器,它在全球范围内被广泛使用,因其高性能、稳定性、丰富的功能以及低资源消耗而受到青睐。今天V哥从5个方面来介绍Nginx性能调优的具体策略,希望对兄弟们有帮助,废话不多说,马上开整。1.系统层面:调整内核参数:例如,增加系统文件描述符的限制......
  • 人脸识别与美颜算法实战:基于Python、机器学习与深度学习
    代码和pdf书等:GitHub-guozhe1992/read引言与基础知识:介绍人脸识别与美颜算法的基本概念、应用场景以及Python编程和机器学习的基础知识。视频图像处理技术:详细讲解基于Anaconda和PyCharm的环境搭建,以及视频图像处理的基础技术,如图像读取、显示、保存和格式转换等。抖音特效......
  • 2、需求工具 - 编程实战工具系列文章
          需求分析工具       笔者对于需求分析工具的应用,主要是思维导图软件和Word。思维导图用来理清需要的需求功能,而Word用来记录每个需求功能的实际内容。      对于思维导图软件,笔者用过几个,但是有些需要注册码,有些需要费用,这些都是需要钱才能进行使......