C解决扫雷

 

一、引言

扫雷游戏作为一款经典益智游戏,想必大家都耳熟能详。在本篇博客中,我将为大家分享如何运用 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 语言的运用有了更为深刻的理解。当然,此版本仅是基础版本,在界面美化、增加难度级别等方面,还有诸多可优化与拓展之处。期待大家能在此基础上持续探索与创新,让扫雷游戏变得更加完善且富有趣味性!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值