请用C语言写一个15*15的扫雷小游戏
时间: 2023-09-11 18:05:02 浏览: 100
### 回答1:
扫雷是一个非常有趣的游戏,可以使用 C 语言编写。下面是一个简单的扫雷代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 15
#define COL 15
#define MINE_COUNT 99
int map[ROW][COL];
int state[ROW][COL];
void init() {
int i, j;
int x, y;
int count;
srand(time(0));
for (i = 0; i < MINE_COUNT; i++) {
x = rand() % ROW;
y = rand() % COL;
if (map[x][y] == -1) {
i--;
continue;
}
map[x][y] = -1;
for (j = -1; j <= 1; j++) {
for (k = -1; k <= 1; k++) {
if (x + j >= 0 && x + j < ROW && y + k >= 0 && y + k < COL && map[x + j][y + k] != -1) {
map[x + j][y + k]++;
}
}
}
}
}
void show() {
int i, j;
printf(" ");
for (i = 0; i < COL; i++) {
printf("%d ", i);
}
printf("\n");
for (i = 0; i < ROW; i++) {
printf("%2d ", i);
for (j = 0; j < COL; j++) {
if (state[i][j] == 1) {
printf("%d ", map[i][j]);
} else {
printf("* ");
}
}
printf("\n");
}
}
void open(int x, int y) {
if (x < 0 || x >= ROW || y < 0 || y >= COL) {
return;
}
if (state[x][y] == 1) {
return;
}
if (map[x][y] == -1) {
printf("you lose\n");
exit(0);
}
state[x][y] = 1;
if (map[x][y] == 0) {
open(x - 1, y - 1);
open(x - 1, y);
open(x - 1, y + 1);
open(x, y - 1);
open(x, y + 1);
open(x + 1, y - 1);
open(x + 1, y);
open(x + 1, y + 1);
}
}
int main() {
int x, y;
init();
while (1) {
show();
printf("input x y:");
### 回答2:
下面是一个简单的C语言代码实现一个15*15的扫雷小游戏:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 15
#define MINE_COUNT 20
int main() {
int minefield[SIZE][SIZE];
int revealed[SIZE][SIZE];
int i, j;
// 初始化雷区和标记数组
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
minefield[i][j] = 0;
revealed[i][j] = 0;
}
}
// 随机放置雷
srand(time(NULL));
for (i = 0; i < MINE_COUNT; i++) {
int x = rand() % SIZE;
int y = rand() % SIZE;
minefield[x][y] = -1; // -1代表雷
}
// 计算每个方格周围的雷数
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
if (minefield[i][j] == -1) {
continue; // 当前位置是雷,跳过
}
int count = 0;
if (i > 0 && j > 0 && minefield[i-1][j-1] == -1) count++;
if (i > 0 && minefield[i-1][j] == -1) count++;
if (i > 0 && j < SIZE-1 && minefield[i-1][j+1] == -1) count++;
if (j > 0 && minefield[i][j-1] == -1) count++;
if (j < SIZE-1 && minefield[i][j+1] == -1) count++;
if (i < SIZE-1 && j > 0 && minefield[i+1][j-1] == -1) count++;
if (i < SIZE-1 && minefield[i+1][j] == -1) count++;
if (i < SIZE-1 && j < SIZE-1 && minefield[i+1][j+1] == -1) count++;
minefield[i][j] = count; // 将周围雷数存储在雷区数组中
}
}
// 打印雷区,测试用
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
printf("%2d ", minefield[i][j]);
}
printf("\n");
}
return 0;
}
```
这个代码实现了一个简单的扫雷小游戏的基本功能。你可以自行扩展并完善该游戏,添加用户交互逻辑,实现雷的揭示和标记、游戏结束判断等功能。
阅读全文