[C] 简化版的C语言扫雷游戏 →→→→→进入此内容的聊天室

来自 Whipped Shama, 2024-03-06, 写在 C, 查看 18 次.
URL http://www.code666.cn/view/cf0e742f
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define SIZE 5
  6. #define MINES 5
  7.  
  8. char board[SIZE][SIZE];
  9. int mines[SIZE][SIZE];
  10. int revealed[SIZE][SIZE];
  11.  
  12. void initializeBoard() {
  13.     for (int i = 0; i < SIZE; i++) {
  14.         for (int j = 0; j < SIZE; j++) {
  15.             board[i][j] = '-';
  16.             revealed[i][j] = 0;
  17.         }
  18.     }
  19.  
  20.     for (int i = 0; i < MINES; i++) {
  21.         int x, y;
  22.         do {
  23.             x = rand() % SIZE;
  24.             y = rand() % SIZE;
  25.         } while (mines[x][y]);
  26.  
  27.         mines[x][y] = 1;
  28.     }
  29. }
  30.  
  31. void printBoard() {
  32.     for (int i = 0; i < SIZE; i++) {
  33.         for (int j = 0; j < SIZE; j++) {
  34.             printf("%c ", board[i][j]);
  35.         }
  36.         printf("\n");
  37.     }
  38. }
  39.  
  40. int countMines(int x, int y) {
  41.     int count = 0;
  42.     for (int i = -1; i <= 1; i++) {
  43.         for (int j = -1; j <= 1; j++) {
  44.             if (x + i >= 0 && x + i < SIZE && y + j >= 0 && y + j < SIZE && mines[x + i][y + j]) {
  45.                 count++;
  46.             }
  47.         }
  48.     }
  49.     return count;
  50. }
  51.  
  52. void reveal(int x, int y) {
  53.     if (x < 0 || x >= SIZE || y < 0 || y >= SIZE || revealed[x][y]) return;
  54.  
  55.     revealed[x][y] = 1;
  56.     board[x][y] = (mines[x][y]) ? '*' : ' ';
  57.  
  58.     if (countMines(x, y) > 0) {
  59.         board[x][y] = countMines(x, y) + '0';
  60.     } else {
  61.         for (int i = -1; i <= 1; i++) {
  62.             for (int j = -1; j <= 1; j++) {
  63.                 reveal(x + i, y + j);
  64.             }
  65.         }
  66.     }
  67. }
  68.  
  69. int main() {
  70.     srand(time(NULL));
  71.     initializeBoard();
  72.  
  73.     int x, y;
  74.     char input;
  75.  
  76.     do {
  77.         printBoard();
  78.         printf("输入坐标 (行 列): ");
  79.         scanf(" %c%c", &input, &input);
  80.         x = input - '0';
  81.         y = input - '0';
  82.  
  83.         if (board[x][y] == '-') {
  84.             reveal(x, y);
  85.         }
  86.  
  87.         for (int i = 0; i < SIZE; i++) {
  88.             for (int j = 0; j < SIZE; j++) {
  89.                 if (mines[i][j] && revealed[i][j]) {
  90.                     printf("\n游戏结束!你踩到雷了。\n");
  91.                     return 0;
  92.                 }
  93.             }
  94.         }
  95.  
  96.         printf("\n是否继续? (y/n): ");
  97.         scanf(" %c", &input);
  98.     } while (input == 'y' || input == 'Y');
  99.  
  100.     printf("\n游戏结束。\n");
  101.     return 0;
  102. }
  103.  
  104.  
  105.  
  106. 在这个代码中,SIZE定义了游戏的大小(5x5),MINES定义了雷的数量(5个)。board数组用于显示游戏界面,mines数组用于存储雷的位置,revealed数组用于跟踪哪些格子已经被揭示。
  107.  
  108. initializeBoard函数初始化游戏板,printBoard函数打印游戏板,countMines函数计算给定位置周围的雷的数量,reveal函数揭示一个格子及其周围的非雷格子。

回复 "简化版的C语言扫雷游戏"

这儿你可以回复上面这条便签

captcha