C语言实现扫雷游戏

原创 2018年04月15日 14:25:50

C语言实现扫雷游戏

我的扫雷有如下几个功能:

  • 显示该点周围雷的个数
  • 坐标周围没雷,可以实现展开

一、分功能阐述:

1.初始化两个雷阵

void Initboard(char board[ROWS][COLS],int rows,int cols,char set)
{
    int i = 0;
    for(i=0;i<rows;i++)
    {
        int j = 0;
        for(j=0;j<cols;j++)
        {
            board[i][j] = set;//将mine全部初始化为‘0’,将show全部初始化为‘*’
        }
    }
}

2.打印雷阵及行列号

void Display(char board[ROWS][COLS],int row,int col)
{
    int i = 0;
    for(i=0;i<=col;i++)//打印列号
    {
        printf("%d ",i);
    }
    printf("\n");
    for(i=1;i<=row;i++)
    {
        int j = 0;
        printf("%d ",i);//打印行号
        for(j=1;j<=col;j++)
        {
            printf("%c ",board[i][j]);
        }
        printf("\n");
    }
}

3.布雷

void Setmine(char board[ROWS][COLS],int row,int col)
{
    int count = COUNT;
    while(count)
    {
        int x = rand()%9+1;//产生1-9的随机数
        int y = rand()%9+1;
        if(board[x][y]=='0')
        {
            board[x][y] = '1';
            count--;
        }
    }
}

4.统计当前坐标周围雷的个数

int Getminecount(char mine[ROWS][COLS],int x,int y)
{
    return (mine[x-1][y-1]+mine[x-1][y]+mine[x-1][y+1]+
              mine[x][y-1]+mine[x][y+1]+mine[x+1][y-1]+
              mine[x+1][y]+mine[x+1][y+1])-8*'0';
}

5.实现展开功能

void open_mine(char mine[ROWS][COLS],char show[ROWS][COLS],int x, int y)//坐标周围展开函数
{
    if (mine[x - 1][y - 1]== '0')
    {
        show[x - 1][y - 1] = Getminecount(mine,x - 1, y - 1) + '0';//显示该坐标周围雷数
    }
    if (mine[x - 1][y] == '0')
    {
        show[x - 1][y] = Getminecount(mine,x - 1, y) + '0';//显示该坐标周围雷数
    }
    if (mine[x - 1][y + 1] == '0')
    {
        show[x - 1][y + 1] = Getminecount(mine,x - 1, y + 1) + '0';//显示该坐标周围雷数
    }
    if (mine[x][y - 1] == '0')
    {
        show[x][y - 1] = Getminecount(mine,x, y - 1) + '0';//显示该坐标周围雷数
    }
    if (mine[x][y + 1] == '0')
    {
        show[x][y + 1] = Getminecount(mine,x, y + 1) + '0';//显示该坐标周围雷数
    }
    if (mine[x + 1][y - 1] == '0')
    {
        show[x + 1][y - 1] = Getminecount(mine,x + 1, y - 1) + '0';//显示该坐标周围雷数
    }
    if (mine[x + 1][y] == '0')
    {
        show[x + 1][y] = Getminecount(mine,x + 1, y) + '0';//显示该坐标周围雷数
    }
    if (mine[x + 1][y + 1] == '0')
    {
        show[x + 1][y + 1] = Getminecount(mine,x + 1, y + 1) + '0';//显示该坐标周围雷数
    }
}

6.扫雷

void sweepmine(char mine[ROWS][COLS],
               char show[ROWS][COLS],int row,int col)
{
    int x = 0;
    int y = 0;
    int win = 0;
    while(win<col*row-COUNT)
    {

        printf("请输入要排查的坐标:");
        scanf("%d %d",&x,&y);
        if(x>=1 && x<=row && y>=1 && y<=col)
        {
            if(mine[x][y] == '1')
            {
                printf("很遗憾,你被炸死了!\n");
                break;
            }
            else
            {

                int count = Getminecount(mine,x,y);
                win++;
                show[x][y] = count+'0';
                open_mine(mine,show,x,y);
                Display(show,row,col);
            }
        }
        else
        {
            printf("坐标有误!\n");
        }
    }
    if(win == row*col-COUNT)
    {
        printf("恭喜您,扫雷成功!\n");
    }
}

二、分文件

1.game.h中

#ifndef __GAME_H__
#define __GAME_H__
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define COUNT 10

void Initboard(char board[ROWS][COLS],int rows,int cols,char set);
void Display(char board[ROWS][COLS],int row,int col);
void Setmine(char board[ROWS][COLS],int row,int col);
void sweepmine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);

#endif

2.game.c中

void sweepmine(char mine[ROWS][COLS],
               char show[ROWS][COLS],int row,int col)
{
    int x = 0;
    int y = 0;
    int win = 0;
    while(win<col*row-COUNT)
    {

        printf("请输入要排查的坐标:");
        scanf("%d %d",&x,&y);
        if(x>=1 && x<=row && y>=1 && y<=col)
        {
            if(mine[x][y] == '1')
            {
                printf("很遗憾,你被炸死了!\n");
                break;
            }
            else
            {

                int count = Getminecount(mine,x,y);
                win++;
                show[x][y] = count+'0';
                open_mine(mine,show,x,y);
                Display(show,row,col);
            }
        }
        else
        {
            printf("坐标有误!\n");
        }
    }
    if(win == row*col-COUNT)
    {
        printf("恭喜您,扫雷成功!\n");
    }
}

3.main.c中

#include"game.h"
void game()
{
    char mine[ROWS][COLS] = {0};
    char show[ROWS][COLS] = {0};
    Initboard(mine,ROWS,COLS,'0');
    Initboard(show,ROWS,COLS,'*');
    Setmine(mine,ROW,COL);
    Display(show,ROW,COL);
    sweepmine(mine,show,ROW,COL);
    Display(mine,ROW,COL);
}
void menu()
{
    printf("**************************\n");
    printf("********  1.play  ********\n");
    printf("********  0.exit  ********\n");
    printf("**************************\n");
}
void test()
{
    int input = 0;
    srand((unsigned int)time(NULL));
    do
    {
        menu();
        printf("请选择:");
        scanf("%d",&input);
        switch(input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误\n");
            break;
        }
    }
    while(input);
}
int main()
{
    test();
    return 0;
}

结果展示:

开始运行:

炸死的情况:
炸死

C语言从入门到精通+贪吃蛇游戏开发实战

-
  • 1970年01月01日 08:00

c语言编程 :模拟实现简单扫雷游戏

这里指的扫雷是简单模拟电脑中的扫雷游戏,但以我目前的水平,也就只能在黑框中实现 test.c #include #include #include #include "game2.h" voi...
  • ChaseRaod
  • ChaseRaod
  • 2017-01-11 17:09:33
  • 2130

扫雷游戏(C语言实现)

扫雷游戏 自己动手写了扫雷游戏(C语言版)。 我使用了EasyX这个库(下载地址:http://www.easyx.cn EasyX 2014冬至版)。 在写扫雷游戏过程中用到了 1.二维数...
  • qq_27602093
  • qq_27602093
  • 2015-07-28 08:50:55
  • 1838

【C语言】简易扫雷游戏——C语言实现

好玩的简易扫雷游戏——C语言实现
  • LX18792732127
  • LX18792732127
  • 2016-10-12 09:23:24
  • 16025

扫雷游戏 C语言实现

扫雷游戏 C语言实现实现了如下功能: 鼠标控制 左键点开 右键标记 中键自动翻开(效果同windows扫雷) 首次点击不会中雷下面是几张效果图: 这是初始界面,3种难度级别,难度同经典版w...
  • c_duoduo
  • c_duoduo
  • 2015-02-20 20:06:13
  • 6749

C语言编程实现 扫雷游戏

  • 2013年09月14日 21:15
  • 1KB
  • 下载

扫雷游戏的C语言实现

在学习C语言初期,我们可以找一些平常玩的游戏进行简单的C语言实现。今天就和大家分享一下关于windows中扫雷游戏的实现。...
  • Monster_Girl
  • Monster_Girl
  • 2016-10-09 18:51:30
  • 3640

C语言二维数组实现扫雷游戏

#include //使用二维数组实现 扫雷 int main() { char ui[8][8]={ '+','+','+','+','+','+','+...
  • morixinguan
  • morixinguan
  • 2016-05-04 13:59:32
  • 2809

C语言实现扫雷小游戏(设定游戏简易程度,实现空白,实现跳过第一次选中雷)

首先,演示一下: 要写出扫雷,首先要对扫雷有一个基本的认识。 分析一下: (1):初始化棋盘 初始化棋盘分为两步:第一步,我们给一个全为“*”的棋盘;第二步,我们考虑到在计算雷周围数目的数目的时候...
  • Quinn0918
  • Quinn0918
  • 2017-04-10 15:36:33
  • 780

简易小游戏扫雷——C语言编程实现

#define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #include #define ROWS 10 #define COLS ...
  • JenaeLi
  • JenaeLi
  • 2016-10-28 15:52:24
  • 939
收藏助手
不良信息举报
您举报文章:C语言实现扫雷游戏
举报原因:
原因补充:

(最多只允许输入30个字)