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

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

基础功能

  • 输入坐标扫雷
    [C] 扫雷不会玩?不存在的,试一下傻瓜式一键扫雷吧..._第1张图片
  • 如图所示其中,“*”表示未知区域 输入相应坐标后判断此地区是否有雷存在,”0”表示此区没雷,可以继续排雷

VIP 1加强功能

  • 提供选中目标周围探测服务,当您输入坐标区域没有雷,此区域则会显示其周围一圈有雷的个数,有效提高您判断能力,降低您失败概率.
    [C] 扫雷不会玩?不存在的,试一下傻瓜式一键扫雷吧..._第2张图片
  • 此图表明坐标 8 6 周围存在2个雷

VIP 2加强强功能

  • 在VIP 1功能上提供显示周围一圈非雷区域.
    [C] 扫雷不会玩?不存在的,试一下傻瓜式一键扫雷吧..._第3张图片
  • 由此图可以直接判定坐标 4 1区域有颗雷,安全,省心,便捷.您值得拥有

VIP 3加强强强功能

  • 如果第一次就被炸死了怎么办,没关系,我们向您提供了首炸免死服务,当您碰巧第一次选就选中雷的时候,我们会自动将此雷移至其他地方.您通关之旅,畅通无阻.
    [C] 扫雷不会玩?不存在的,试一下傻瓜式一键扫雷吧..._第4张图片
    普通玩家如图所示踩中坐标4,1中的雷, 死亡,游戏结束.

您如果碰到坐标4,1中的雷情况则如下图,此区域的雷将自动移走
[C] 扫雷不会玩?不存在的,试一下傻瓜式一键扫雷吧..._第5张图片
选择VIP 3,从此运气成分不在阻挡您前进的脚步.

VIP 4 加强强强强功能

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

[C] 扫雷不会玩?不存在的,试一下傻瓜式一键扫雷吧..._第6张图片
事半功倍,您的时间很宝贵.

VIP 爹 加强强强强强功能

现在您还怕啥啊,随便输入,1刀99级,一键扫雷. 包您HIGH翻天
只需要输入一个坐标,剩下的雷我们帮您排除.
[C] 扫雷不会玩?不存在的,试一下傻瓜式一键扫雷吧..._第7张图片

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#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;
}

你可能感兴趣的