[C] 扫雷不会玩?不存在的,试一下傻瓜式一键扫雷吧...

这篇博客介绍了使用C语言编写的扫雷程序,具备不同VIP等级的功能,包括基础的坐标扫雷、周围雷数探测、非雷区域显示、首炸免死以及一键全扫等,帮助玩家轻松游戏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近用C语写了一个扫雷目前实现了以下功能

基础功能

  • 输入坐标扫雷
    这里写图片描述
  • 如图所示其中,“*”表示未知区域 输入相应坐标后判断此地区是否有雷存在,”0”表示此区没雷,可以继续排雷

VIP 1加强功能

  • 提供选中目标周围探测服务,当您输入坐标区域没有雷,此区域则会显示其周围一圈有雷的个数,有效提高您判断能力,降低您失败概率.
    这里写图片描述
  • 此图表明坐标 8 6 周围存在2个雷

VIP 2加强强功能

  • 在VIP 1功能上提供显示周围一圈非雷区域.
    这里写图片描述
  • 由此图可以直接判定坐标 4 1区域有颗雷,安全,省心,便捷.您值得拥有

VIP 3加强强强功能

  • 如果第一次就被炸死了怎么办,没关系,我们向您提供了首炸免死服务,当您碰巧第一次选就选中雷的时候,我们会自动将此雷移至其他地方.您通关之旅,畅通无阻.
    普通玩家
    普通玩家如图所示踩中坐标4,1中的雷, 死亡,游戏结束.

您如果碰到坐标4,1中的雷情况则如下图,此区域的雷将自动移走
这里写图片描述
选择VIP 3,从此运气成分不在阻挡您前进的脚步.

VIP 4 加强强强强功能

在VI3的基础上,提供显示周围三圈非雷区域和探测服务,如图所示

这里写图片描述
事半功倍,您的时间很宝贵.

VIP 爹 加强强强强强功能

现在您还怕啥啊,随便输入,1刀99级,一键扫雷. 包您HIGH翻天
只需要输入一个坐标,剩下的雷我们帮您排除.
这里写图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROWS 11
#define COLS 11
#define COUNT 8
#define SPREAD 8
#define NUM 8
char mine[ROWS][COLS];
char show[ROWS][COLS];
void InitBoard(char board[ROWS][COLS], int row, int col, char set);
void Display(char board[ROWS][COLS], int row, int col);
void SetMine(char board[ROWS][COLS]);
int Checkwin(char show[ROWS][COLS]);
void ClearMine(char board[ROWS][COLS], char show[ROWS][COLS]);
int CountMineNum(char board[ROWS][COLS], int x, int y);
void ShowMineNum(char board[ROWS][COLS], char show[ROWS][COLS], int x, int y);
#include"game.h"

void InitBoard(char board[ROWS][COLS],int row, int col, char set)
{
    memset(board, set, row*col*sizeof(board[0][0]));
}
void Display(char Board[ROWS][COLS], int row, int col)
{
    int i, j;
    printf(" ");
    for (int i = 1; i < col; i++)
    {
        printf(" %d", i);
    }
    printf("\n");
    for (i = 1; i < row; i++)
    {
        printf("%d ", i);
        for (j = 1; j < row; j++)
        {
            printf("%c ", Board[i][j]);
        }
        printf("\n");
    }
}
void SetMine(char Board[ROWS][COLS])
{
        int i, j;
        int MineNum = COUNT;
        while (MineNum)
        {
            i = rand() % 9 + 1;
            j = rand() % 9 + 1;
            if ('0' == Board[i][j])
             {
                Board[i][j] = '1';
                MineNum--;
            }
        }
}


void ClearMine(char board[ROWS][COLS],char show[ROWS][COLS])
{
    int x, y;
    int MineNum = COUNT;
    printf("爹,请输入扫雷坐标\n");
    while (1)
    {

        scanf("%d%d", &x, &y);

        if ('0' == board[x][y])
        {
            MineNum--;
            ShowMineNum(mine, show, x, y);
            show[x][y] = CountMineNum(mine,x,y)+'0';
            Display(show, 10, 10);
            if (COUNT==Checkwin(show))
            {

                printf("扫雷完毕,爹,您赢了~\n");
                break;
            }
            printf("您继续\n");
            printf("输入下一次目标\n");

        }
        //保证第一次不会被炸死而且会把这颗雷移到别的地方//这部分保证函数的逻辑顺序
        if ('1' == board[x][y] && COUNT == MineNum)
        {
            board[x][y] = '0';
            while (1)
            {
                int x1 = rand() % 9 + 1;
                int y1 = rand() % 9 + 1;
                if (x1!=x && y!=y1 && '0' == board[x1][y1])
                {
                    board[x1][y1] = '1';
                    break;
                }
            }
            ShowMineNum(mine, show, x, y);
            show[x][y] = CountMineNum(mine, x, y)+'0';
            Display(show, 10, 10);
            if (COUNT == Checkwin(show))
            {

                printf("扫雷完毕,爹,您赢了~\n");
                break;
            }
            printf("您继续\n");
            printf("输入下一次目标\n");
        }

        else if ('1' == board[x][y])
        {
            show[x][y] = board[x][y];
            Display(show, 10, 10);
            printf("您死了");
            break;
        }   

    }
}
int CountMineNum(char board[ROWS][COLS], int x,int y)
{
    //统计周围一圈的雷  坐标变换在-SPREAD 到+SPREAD之间
    int  sum = 0;
    int i , j ;
    for (i = -NUM; i <= NUM; i++)
    {
        for (j = -NUM; j <= NUM; j++)
        {
            if ((x + i) <= 9 && (y + j) <= 9 && (x + i) >= 1 && (y + j) >= 1)
            {
                if ('1' == board[x + i][y + j])
                {
                    sum++;
                }
            }

        }
    }

    return sum;
}
void ShowMineNum(char board[ROWS][COLS], char show[ROWS][COLS] ,int x, int y)
{
    int i , j ;
    //展开周围一圈的非雷  坐标变换在 -SPREAD到+SPREAD之间
    for (i = -SPREAD; i <= SPREAD; i++)
    {
        for (j = -SPREAD; j <= SPREAD; j++)
        {
            if (board[x + i][y + j] != '1')
            {
                show[x + i][y + j] = board[x + i][y + j];
            }

        }
    }
}
int Checkwin(char show[ROWS][COLS])
{
    int i, j;
    int count = 0;
    for (i = 1; i <= 9; i++)
    {
        for (j = 1; j <= 9; j++)
        {
            if ('*' == show[i][j])
            {
                count++;
            }
        }
    }
    return count;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值