鱼C论坛

 找回密码
 立即注册
查看: 1723|回复: 21

[作品展示] C语言扫雷【简易】

[复制链接]
发表于 2023-9-2 16:10:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

#define SIZE 9
#define MINES 10

char board[SIZE][SIZE];
char visible[SIZE][SIZE];

void initializeBoard() {
        int i,j;
    for (i = 0; i < SIZE; i++) {
        for (j = 0; j < SIZE; j++) {
            board[i][j] = ' ';
            visible[i][j] = '-';
        }
    }
}

void printBoard() {
    printf("  1 2 3 4 5 6 7 8 9\n");
    int i,j;
    for (i = 0; i < SIZE; i++) {
        printf("%d ", i + 1);
        for (j = 0; j < SIZE; j++) {
            printf("%c ", visible[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 countAdjacentMines(int x, int y) {
    int count = 0,i,j;
    for (i = -1; i <= 1; i++) {
        for (j = -1; j <= 1; j++) {
            int newX = x + i;
            int newY = y + j;
            if (newX >= 0 && newX < SIZE && newY >= 0 && newY < SIZE && board[newX][newY] == '*') {
                count++;
            }
        }
    }
    return count;
}

void reveal(int x, int y) {
    if (x < 0 || x >= SIZE || y < 0 || y >= SIZE || visible[x][y] != '-') {
        return;
    }

    visible[x][y] = countAdjacentMines(x, y) + '0';

    if (visible[x][y] == '0') {
            int i,j;
        for (i = -1; i <= 1; i++) {
            for (j = -1; j <= 1; j++) {
                int newX = x + i;
                int newY = y + j;
                reveal(newX, newY);
            }
        }
    }
}

int main() {
    initializeBoard();
    placeMines();
    int gameOver = 0;

    while (!gameOver) {
        printBoard();
        printf("Enter row and column (e.g., 3 4): ");
        int row, col;
        scanf("%d %d", &row, &col);

        if (row < 1 || row > SIZE || col < 1 || col > SIZE) {
            printf("Invalid input. Please try again.\n");
            continue;
        }

        row--;
        col--;

        if (board[row][col] == '*') {
            printf("Game over! You hit a mine!\n");
            gameOver = 1;
        } else {
            reveal(row, col);
            int remaining = SIZE * SIZE - MINES;
            int revealed = 0;
            int i,j;
            for (i = 0; i < SIZE; i++) {
                for (j = 0; j < SIZE; j++) {
                    if (visible[i][j] != '-') {
                        revealed++;
                    }
                }
            }

            if (revealed == remaining) {
                printf("Congratulations! You win!\n");
                gameOver = 1;
            }
        }
    }

    return 0;
}
花了两三天空闲时间写写,对大家来说应该就是很普通的东西,没写注释了,太像八皇后了这东西

QQ截图20230902160512.png

评分

参与人数 4荣誉 +17 鱼币 +2 贡献 +6 收起 理由
zsy0226 + 2 + 2 orzorzorz
python爱好者. + 5 + 3 鱼C有你更精彩^_^
zhangjinxuan + 5 orz,%%%%膜拜膜拜
歌者文明清理员 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-2 16:19:32 | 显示全部楼层

回帖奖励 +3 鱼币

大佬

编程这么好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 16:20:28 | 显示全部楼层

回帖奖励 +3 鱼币

看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-2 16:36:22 | 显示全部楼层

回帖奖励 +3 鱼币

zc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-2 16:43:34 | 显示全部楼层

回帖奖励 +3 鱼币

厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-2 16:52:28 | 显示全部楼层

回帖奖励 +3 鱼币

看看代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-2 16:52:51 | 显示全部楼层
sfqxx 发表于 2023-9-2 16:19
大佬

编程这么好

别捧啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 16:53:24 | 显示全部楼层

回帖奖励 +3 鱼币

做了一个我一直都实现不了的作品,厉害

这个应该是要用广度优先搜索吧,请教一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 17:01:10 | 显示全部楼层

回帖奖励 +3 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-2 17:02:00 | 显示全部楼层

回帖奖励 +3 鱼币

看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-9-2 17:02:32 | 显示全部楼层
zhangjinxuan 发表于 2023-9-2 16:53
做了一个我一直都实现不了的作品,厉害

这个应该是要用广度优先搜索吧,请教一下

我是用深度做的,reveal(int x, int y) 函数就是来揭示(reveal)相邻的空白单元格。如果一个空白单元格被揭示,就继续递归把边上的空白格都翻出来,直到达到包围有地雷的边界。然后countAdjacentMines 计算周围的相邻地雷数量。

广度,应该也可以做,但是感觉代码量上会麻烦一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-2 17:03:59 | 显示全部楼层
zhangjinxuan 发表于 2023-9-2 16:53
做了一个我一直都实现不了的作品,厉害

这个应该是要用广度优先搜索吧,请教一下

我感觉和八皇后非常像这个东西,思路上都差不多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 17:12:05 | 显示全部楼层
yinda_peng 发表于 2023-9-2 17:02
我是用深度做的,reveal(int x, int y) 函数就是来揭示(reveal)相邻的空白单元格。如果一个空白单元格 ...

比较习惯用广搜,毕竟深搜的话要递归。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-2 17:13:11 | 显示全部楼层
zhangjinxuan 发表于 2023-9-2 17:12
比较习惯用广搜,毕竟深搜的话要递归。

都可以实现,个人偏好罢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 17:17:02 | 显示全部楼层
yinda_peng 发表于 2023-9-2 17:13
都可以实现,个人偏好罢了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-2 19:22:51 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-2 20:47:28 | 显示全部楼层

回帖奖励 +3 鱼币

感谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-3 11:33:05 | 显示全部楼层
怎么标记雷???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-3 15:31:53 | 显示全部楼层

我没做这个功能,因为只是在终端玩,没有做图形,所以说是简易了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-6 13:46:46 | 显示全部楼层
我来试试看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 23:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表