帮我用C语言写一扫雷的小游戏
时间: 2024-10-26 08:04:14 浏览: 21
C语言实现简单扫雷小游戏
5星 · 资源好评率100%
编写一个简单的扫雷游戏需要一些基本的游戏逻辑和图形界面处理。这里是一个基础的控制台版扫雷游戏的简要概述,你可以根据这个框架扩展到更复杂的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROWS 10 // 游戏行数
#define COLS 10 // 游戏列数
#define MINECOUNT (ROWS * COLS / 10) // 每个区域的雷的数量
// 定义游戏矩阵结构
typedef struct {
int grid[ROWS][COLS]; // 雷区网格
int flags[ROWS][COLS]; // 标记已翻开的格子
} Minesweeper;
void init_grid(Minesweeper* game) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if ((i == 0 && j == 0) || (i == ROWS - 1 && j == COLS - 1)) { // 边缘位置默认为地雷
game->grid[i][j] = -1;
} else {
game->grid[i][j] = 0;
}
game->flags[i][j] = 0;
}
}
}
void print_board(const Minesweeper* game) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", game->grid[i][j]);
}
printf("\n");
}
}
void reveal(int x, int y, Minesweeper* game) {
if (game->flags[x][y] != 0) return;
game->flags[x][y] = 1;
if (game->grid[x][y] == -1) {
printf("爆雷!\n");
} else {
printf("周围共有%d颗雷。\n", game->grid[x][y]);
// 检查相邻格子并递归揭示
for (int dx = -1; dx <= 1; dx++) {
for (int dy = -1; dy <= 1; dy++) {
if (dx == 0 && dy == 0) continue;
reveal(x + dx, y + dy, game);
}
}
}
}
int main() {
Minesweeper game;
init_grid(&game);
printf("欢迎来到扫雷游戏!\n");
print_board(&game);
int choice_x, choice_y;
while (true) {
printf("\n请输入你要翻开的位置(格式:x y),输入'q'退出:");
scanf("%d %d", &choice_x, &choice_y);
if (choice_x >= 0 && choice_x < ROWS && choice_y >= 0 && choice_y < COLS) {
reveal(choice_x, choice_y, &game);
} else if (choice_x == 'q') {
break;
} else {
printf("无效的选择,请重试。\n");
}
}
printf("游戏结束,谢谢玩!\n");
return 0;
}
```
这个代码示例包含了基本的扫雷游戏流程,包括初始化、打印游戏板和揭示棋盘。用户可以通过输入坐标选择翻开格子,如果是雷会提示爆炸,如果不是则显示周围的雷数。注意这只是一个非常基础的版本,实际游戏中你可能还需要添加更多的功能,比如计时、游戏结束判断等。
阅读全文