一、引言
扫雷游戏作为一款经典益智游戏,想必大家都耳熟能详。在本篇博客中,我将为大家分享如何运用 C 语言实现一个简易的扫雷游戏。通过这个项目实践,能让我们更深入地掌握 C 语言的基本语法、数组操作以及逻辑判断等知识要点。
二、游戏规则
扫雷游戏的规则简洁明了:在一个矩形的棋盘之上,分布着若干颗地雷。玩家需通过点击方格来揭开其状态,若方格显示数字,此数字代表该方格周围 8 个方格内的地雷数量;若点击到地雷,则游戏宣告失败;若成功揭示出所有非地雷方格,那么玩家赢得游戏。
三、代码实现
c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 定义棋盘的大小
#define ROW 9
#define COL 9
// 定义地雷的数量
#define MINE_NUM 10
// 打印棋盘函数
void printBoard(int board[ROW][COL], int revealed[ROW][COL]) {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (revealed[i][j]) {
if (board[i][j] == -1) {
printf("* ");
} else {
printf("%d ", board[i][j]);
}
} else {
printf("# ");
}
}
printf("\n");
}
}
// 初始化棋盘
void initBoard(int board[ROW][COL], int revealed[ROW][COL]) {
srand((unsigned)time(NULL));
int count = 0;
while (count < MINE_NUM) {
int x = rand() % ROW;
int y = rand() % COL;
if (board[x][y]!= -1) {
board[x][y] = -1;
count++;
}
}
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (board[i][j]!= -1) {
int num = 0;
for (int m = i - 1; m <= i + 1; m++) {
for (int n = j - 1; n <= j + 1; n++) {
if (m >= 0 && m < ROW && n >= 0 && n < COL && board[m][n] == -1) {
num++;
}
}
}
board[i][j] = num;
}
}
}
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
revealed[i][j] = 0;
}
}
}
// 检查是否胜利
int checkWin(int revealed[ROW][COL]) {
int count = 0;
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (revealed[i][j] == 1 && board[i][j]!= -1) {
count++;
}
}
}
if (count == (ROW * COL - MINE_NUM)) {
return 1;
} else {
return 0;
}
}
// 游戏主函数
int main() {
int board[ROW][COL];
int revealed[ROW][COL];
initBoard(board, revealed);
int x, y;
int gameOver = 0;
while (!gameOver) {
printBoard(board, revealed);
printf("请输入坐标(行 列):");
scanf("%d %d", &x, &y);
if (x >= 0 && x < ROW && y >= 0 && y < COL) {
if (board[x][y] == -1) {
printf("游戏失败!\n");
gameOver = 1;
} else {
revealed[x][y] = 1;
if (checkWin(revealed)) {
printf("游戏胜利!\n");
gameOver = 1;
}
}
} else {
printf("输入无效,请重新输入!\n");
}
}
return 0;
}
四、总结
通过完成这个简易的扫雷游戏实现,我们对 C 语言的运用有了更为深刻的理解。当然,此版本仅是基础版本,在界面美化、增加难度级别等方面,还有诸多可优化与拓展之处。期待大家能在此基础上持续探索与创新,让扫雷游戏变得更加完善且富有趣味性!