返回
用C语言写个简易扫雷游戏,测试逻辑思维和编程能力
后端
2023-10-02 00:44:38
扫雷游戏概述
扫雷游戏是一个单人游戏,目标是通过点击网格中的方块来找出所有隐藏的雷。每个方块可以是空的,也可以包含一个雷。当玩家点击一个空方块时,该方块及其周围的八个方块将被揭示。如果玩家点击一个包含雷的方块,游戏将结束。
实现扫雷游戏的基本步骤
- 创建一个网格来存储雷的位置。
- 创建一个网格来存储玩家的猜测。
- 编写一个函数来检查玩家的猜测是否正确。
- 编写一个函数来揭示玩家点击的方块及其周围的八个方块。
- 编写一个函数来检查游戏是否结束。
- 编写一个函数来打印游戏状态。
C语言实现扫雷游戏
#include <stdio.h>
#include <stdlib.h>
// 网格的大小
#define SIZE 10
// 雷的数量
#define NUM_MINES 10
// 创建网格来存储雷的位置
int mine[SIZE][SIZE];
// 创建网格来存储玩家的猜测
int guess[SIZE][SIZE];
// 检查玩家的猜测是否正确
int check_guess(int x, int y) {
// 如果玩家点击了一个包含雷的方块,返回-1
if (mine[x][y] == 1) {
return -1;
}
// 如果玩家点击了一个空的方块,返回0
if (mine[x][y] == 0) {
return 0;
}
// 如果玩家点击了一个已经被揭示的方块,返回1
if (guess[x][y] == 1) {
return 1;
}
// 如果玩家点击了一个没有被揭示的方块,返回2
return 2;
}
// 揭示玩家点击的方块及其周围的八个方块
void reveal_square(int x, int y) {
// 将玩家点击的方块标记为已揭示
guess[x][y] = 1;
// 揭示玩家点击的方块及其周围的八个方块
for (int i = x-1; i <= x+1; i++) {
for (int j = y-1; j <= y+1; j++) {
// 如果方块在网格内
if (i >= 0 && i < SIZE && j >= 0 && j < SIZE) {
// 如果方块没有被揭示
if (guess[i][j] == 0) {
// 揭示方块
guess[i][j] = 1;
// 如果方块是空的,继续揭示周围的方块
if (mine[i][j] == 0) {
reveal_square(i, j);
}
}
}
}
}
}
// 检查游戏是否结束
int check_game_over() {
// 如果玩家点击了一个包含雷的方块,游戏结束
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (mine[i][j] == 1 && guess[i][j] == 1) {
return -1;
}
}
}
// 如果玩家已经揭示了所有不包含雷的方块,游戏结束
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (mine[i][j] == 0 && guess[i][j] == 0) {
return 0;
}
}
}
// 游戏仍在继续
return 1;
}
// 打印游戏状态
void print_game() {
// 打印网格
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
// 如果方块是空的,打印一个空格
if (guess[i][j] == 0) {
printf(" ");
}
// 如果方块包含一个雷,打印一个*
else if (mine[i][j] == 1) {
printf("*");
}
// 如果方块已经被揭示,打印方块中的数字
else {
printf("%d", mine[i][j]);