鱼C论坛

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

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

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

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

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

x
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. #define SIZE 9
  5. #define MINES 10

  6. char board[SIZE][SIZE];
  7. char visible[SIZE][SIZE];

  8. void initializeBoard() {
  9.         int i,j;
  10.     for (i = 0; i < SIZE; i++) {
  11.         for (j = 0; j < SIZE; j++) {
  12.             board[i][j] = ' ';
  13.             visible[i][j] = '-';
  14.         }
  15.     }
  16. }

  17. void printBoard() {
  18.     printf("  1 2 3 4 5 6 7 8 9\n");
  19.     int i,j;
  20.     for (i = 0; i < SIZE; i++) {
  21.         printf("%d ", i + 1);
  22.         for (j = 0; j < SIZE; j++) {
  23.             printf("%c ", visible[i][j]);
  24.         }
  25.         printf("\n");
  26.     }
  27. }

  28. void placeMines() {
  29.     srand(time(NULL));
  30.     int count = 0;
  31.     while (count < MINES) {
  32.         int x = rand() % SIZE;
  33.         int y = rand() % SIZE;
  34.         if (board[x][y] != '*') {
  35.             board[x][y] = '*';
  36.             count++;
  37.         }
  38.     }
  39. }

  40. int countAdjacentMines(int x, int y) {
  41.     int count = 0,i,j;
  42.     for (i = -1; i <= 1; i++) {
  43.         for (j = -1; j <= 1; j++) {
  44.             int newX = x + i;
  45.             int newY = y + j;
  46.             if (newX >= 0 && newX < SIZE && newY >= 0 && newY < SIZE && board[newX][newY] == '*') {
  47.                 count++;
  48.             }
  49.         }
  50.     }
  51.     return count;
  52. }

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

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

  58.     if (visible[x][y] == '0') {
  59.             int i,j;
  60.         for (i = -1; i <= 1; i++) {
  61.             for (j = -1; j <= 1; j++) {
  62.                 int newX = x + i;
  63.                 int newY = y + j;
  64.                 reveal(newX, newY);
  65.             }
  66.         }
  67.     }
  68. }

  69. int main() {
  70.     initializeBoard();
  71.     placeMines();
  72.     int gameOver = 0;

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

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

  82.         row--;
  83.         col--;

  84.         if (board[row][col] == '*') {
  85.             printf("Game over! You hit a mine!\n");
  86.             gameOver = 1;
  87.         } else {
  88.             reveal(row, col);
  89.             int remaining = SIZE * SIZE - MINES;
  90.             int revealed = 0;
  91.             int i,j;
  92.             for (i = 0; i < SIZE; i++) {
  93.                 for (j = 0; j < SIZE; j++) {
  94.                     if (visible[i][j] != '-') {
  95.                         revealed++;
  96.                     }
  97.                 }
  98.             }

  99.             if (revealed == remaining) {
  100.                 printf("Congratulations! You win!\n");
  101.                 gameOver = 1;
  102.             }
  103.         }
  104.     }

  105.     return 0;
  106. }
复制代码

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

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-5-11 01:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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