iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >用C语言实现扫雷小程序
  • 285
分享到

用C语言实现扫雷小程序

2024-04-02 19:04:59 285人浏览 泡泡鱼
摘要

本文实例为大家分享了C语言实现扫雷小程序的具体代码,供大家参考,具体内容如下 扫雷程序的编写需要有清晰的思路,所以我们先要清楚扫雷的实现有几个功能模块让我们编写,再用主函数将功能结合

本文实例为大家分享了C语言实现扫雷小程序的具体代码,供大家参考,具体内容如下

扫雷程序的编写需要有清晰的思路,所以我们先要清楚扫雷的实现有几个功能模块让我们编写,再用主函数将功能结合在一起:

//菜单函数
//初始化数组函数
//布雷函数
//统计周围雷的个数
//打印玩家棋盘
//打印设计者棋盘
//扫雷函数
//避免第一次被雷炸死的函数
//展开函数
//判断玩家棋盘剩余未知区域的个数

根据这几点可以写出如下的头文件:

#ifndef __GAME_H__
#define __GAME__H__

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


#define row 12
#define col 12
#define COUNT 10//棋盘中雷的总数
extern char show_mine[row][col];//展示数组
extern char real_mine[row][col];//布雷数组

void muen();//菜单函数
void init_mine();//初始化数组函数
void set_mine();//布雷函数
int count_mine();//统计周围雷的个数
void print_player();//打印玩家棋盘
void print_mine();//打印设计者棋盘 
int  sweep_mine();//扫雷函数
void safe_mine();//避免第一次被雷炸死的函数
void open_mine(int x, int y);//展开函数
int count_show_mine(); ///判断玩家棋盘剩余未知区域的个数

#endif  //__GAME_H__

* 接下来要做的就是将主函数的大体框架程序写出来,在依次向各个函数块里面充填程序,以下为主函数:*

#include"lei.h"

void game()
{

    int ret = 0;
    init_mine();//初始化玩家棋盘和设计者棋盘
    set_mine();//给设计者棋盘布雷
    print_mine();//打印设计者棋盘(可不打印)
    printf("\n");
    print_player();//打印玩家棋盘

    safe_mine();//避免第一次被炸死

    if (count_show_mine() == COUNT)//一步就赢的情况
    {
        print_mine();
        printf("玩家赢!\n\n");
        return;
    }print_player();打印玩家棋盘

    while (1)//循环扫雷
    {
        int ret = sweep_mine();//扫雷,踩到雷返回1,没有踩到雷返回0
        if (count_show_mine() == COUNT)//若玩家棋盘的'*'个数为雷数时,扫雷完成,游戏胜利
        {
            print_mine();//打印设计者棋盘
            printf("玩家赢!\n\n");

            break;
        }
        if (ret)//判断是否踩到雷
        {
            printf("被雷炸死\n");
            print_mine();//打印设计者雷阵查看雷的分布
            break;
        }print_player();//打印玩家棋盘
    }
}


int main()
{
    srand((unsigned int)time(NULL));//产生随机数生成器
    int input = 0;
    muen();//菜单
    do
    {
        scanf_s("%d", &input);
        switch (input)
        {
        case 1:game();
            break;
        case 0:exit(1);//退出游戏
            break;
        default:
            printf("输入错误,重新输入\n");
            break;
        }
        muen();
        printf("contiue?\n");
    } while (1);//循环玩游戏
    system("pause");
    return 0;
}

接下来再依次实现主函数里面的各个函数块:

#include"lei.h"

char show_mine[row][col] = { 0 };
char real_mine[row][col] = { 0 };


void muen()
{
    printf("*******************************\n");
    printf("*****1.play       0.exit*******\n");
    printf("*******************************\n");
}


void init_mine()//初始化两个棋盘
{
    int i = 0;
    int j = 0;
    for (int i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            show_mine[i][j] = '*';
            real_mine[i][j] = '0';
        }
    }
}


void print_player()//打印玩家棋盘
{
    int i = 0;
    int j = 0;
    printf("0  ");
    for (i = 1; i <row - 1; i++)
    {
        printf("%d ", i);//打印横标(0--10)
    }
    printf("\n");
    for (i = 1; i <row - 2; i++)//打印竖标(1--10)
    {
        printf("%d  ", i);
        for (j = 1; j < col - 1; j++)
        {
            printf("%c ", show_mine[i][j]);//玩家棋盘数组
        }
        printf("\n");
    }
    printf("10 ");//开始打印最后一行
    for (i = 1; i < row - 1; i++)
    {
        printf("%c ", show_mine[10][i]);
    }
    printf("\n");
}


void print_mine()//打印设计者棋盘
{
    int i = 0;
    int j = 0;
    printf("0  ");
    for (i = 1; i <row - 1; i++)
    {
        printf("%d ", i);//打印横标(0--10)
    }
    printf("\n");
    for (i = 1; i <row - 2; i++)//打印竖标(1--10)
    {
        printf("%d  ", i);
        for (j = 1; j < col - 1; j++)
        {
            printf("%c ", real_mine[i][j]);
        }
        printf("\n");
    }
    printf("10 ");//开始打印最后一行
    for (i = 1; i < row - 1; i++)
    {
        printf("%c ", real_mine[10][i]);
    }
    printf("\n");
}

void set_mine()//给设计者棋盘布雷
{
    int x = 0;
    int y = 0;
    int count = COUNT;//雷总数
    while (count)//雷布完后跳出循环
    {
        int x = rand() % 10 + 1;//产生1到10的随机数,在数组下标为1到10的范围内布雷
        int y = rand() % 10 + 1;//产生1到10的随机数,在数组下标为1到10的范围内布雷
        if (real_mine[x][y] == '0')//找不是雷的地方布雷
        {
            real_mine[x][y] = '1';
            count--;
        }
    }
}


int count_mine(int x, int y)//检测周围8个区域雷的个数
{
    int count = 0;
    if (real_mine[x - 1][y - 1] == '1')
        count++;
    if (real_mine[x - 1][y] == '1')
        count++;
    if (real_mine[x - 1][y + 1] == '1')
        count++;
    if (real_mine[x][y - 1] == '1')
        count++;
    if (real_mine[x][y + 1] == '1')
        count++;
    if (real_mine[x + 1][y - 1] == '1')
        count++;
    if (real_mine[x + 1][y] == '1')
        count++;
    if (real_mine[x + 1][y + 1] == '1')
        count++;
    return count;
}

void safe_mine()//避免第一次炸死
{
    int x = 0;
    int y = 0;
    char ch = 0;
    int count = 0;
    int ret = 1;
    printf("输入坐标扫雷\n");
    while (1)
    {
        scanf_s("%d%d", &x, &y);//只能输入1到10,输入错误重新输入
        if ((x >= 1 && x <= 10) && (y >= 1 && y <= 10))//判断输入坐标是否有误
        {
            if (real_mine[x][y] == '1')//第一次踩到雷后补救
            {
                real_mine[x][y] = '0';
                char ch = count_mine(x, y);
                show_mine[x][y] = ch + '0';//数字对应的ASCII值和数字字符对应的ASCII值相差48,即'0'的ASCII值
                open_mine(x, y);
                while (ret)//在其余有空的地方设置一个雷
                {
                    int x = rand() % 10 + 1;//产生1到10的随机数,在数组下标为1到10的范围内布雷
                    int y = rand() % 10 + 1;//产生1到10的随机数,在数组下标为1到10的范围内布雷
                    if (real_mine[x][y] == '0')//找不是雷的地方布雷
                    {
                        real_mine[x][y] = '1';
                        ret--;
                        break;
                    }
                }break;//跳出此函数  
            }
            if (real_mine[x][y] == '0')
            {
                char ch = count_mine(x, y);
                show_mine[x][y] = ch + '0';//数字对应的ASCII值和数字字符对应的ASCII值相差48,即'0'的ASCII值
                open_mine(x, y);
                break;
            }
        }
        else//坐标错误
        {
            printf("输入错误重新输入\n");
        }
    }
}


int sweep_mine()//扫雷函数,踩到雷返回1,没有踩到雷返回0
{
    int x = 0;
    int y = 0;
    int count = 0;
    printf("输入坐标扫雷\n");
    scanf_s("%d%d", &x, &y);//只能输入1到10
    if ((x >= 1 && x <= 10) && (y >= 1 && y <= 10))//判断输入坐标是否有误,输入错误重新输入
    {
        if (real_mine[x][y] == '0')//没踩到雷
        {
            char ch = count_mine(x, y);
            show_mine[x][y] = ch + '0';//数字对应的ASCII值和数字字符对应的ASCII值相差48,即'0'的ASCII值
            open_mine(x, y);
            if (count_show_mine() == COUNT)//判断剩余未知区域的个数,个数为雷数时玩家赢
            {
                print_mine();
                printf("玩家赢!\n\n");
                return 0;
            }
        }
        else if (real_mine[x][y] == '1')//踩到雷
        {
            return 1;
        }

    }
    else
    {
        printf("输入错误重新输入\n");
    }
    return 0;//没踩到雷
}

void open_mine(int x, int y)//坐标周围展开函数
{
    if (real_mine[x - 1][y - 1] == '0')
    {
        show_mine[x - 1][y - 1] = count_mine(x - 1, y - 1) + '0';//显示该坐标周围雷数
    }
    if (real_mine[x - 1][y] == '0')
    {
        show_mine[x - 1][y] = count_mine(x - 1, y) + '0';//显示该坐标周围雷数
    }
    if (real_mine[x - 1][y + 1] == '0')
    {
        show_mine[x - 1][y + 1] = count_mine(x - 1, y + 1) + '0';//显示该坐标周围雷数
    }
    if (real_mine[x][y - 1] == '0')
    {
        show_mine[x][y - 1] = count_mine(x, y - 1) + '0';//显示该坐标周围雷数
    }
    if (real_mine[x][y + 1] == '0')
    {
        show_mine[x][y + 1] = count_mine(x, y + 1) + '0';//显示该坐标周围雷数
    }
    if (real_mine[x + 1][y - 1] == '0')
    {
        show_mine[x + 1][y - 1] = count_mine(x + 1, y - 1) + '0';//显示该坐标周围雷数
    }
    if (real_mine[x + 1][y] == '0')
    {
        show_mine[x + 1][y] = count_mine(x + 1, y) + '0';//显示该坐标周围雷数
    }
    if (real_mine[x + 1][y + 1] == '0')
    {
        show_mine[x + 1][y + 1] = count_mine(x + 1, y + 1) + '0';//显示该坐标周围雷数
    }
}


int count_show_mine()//判断剩余未知区域的个数,个数为雷数时玩家赢
{
    int count = 0;
    int i = 0;
    int j = 0;
    for (i = 1; i <= row - 2; i++)
    {
        for (j = 1; j <= col - 2; j++)
        {
            if (show_mine[i][j] == '*')
            {
                count++;
            }
        }

    }
    return count;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 用C语言实现扫雷小程序

本文链接: https://www.lsjlt.com/news/150727.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现扫雷小程序
    前言 《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。 多文件形式 在实现游戏...
    99+
    2024-04-02
  • 用C语言实现扫雷小程序
    本文实例为大家分享了C语言实现扫雷小程序的具体代码,供大家参考,具体内容如下 扫雷程序的编写需要有清晰的思路,所以我们先要清楚扫雷的实现有几个功能模块让我们编写,再用主函数将功能结合...
    99+
    2024-04-02
  • C语言编写扫雷小程序
    本文实例为大家分享了C语言实现扫雷小程序的具体代码,供大家参考,具体内容如下 首先创建一个项目,建立一个头文件game.h,两个源文件game.c和test.c game.h代码片:...
    99+
    2024-04-02
  • C语言实现简易扫雷程序
    前言 前面写了三子棋的小游戏,感觉不过瘾,今天再来一个扫雷的小游戏。欢迎评论探讨 思路分析 游戏简介 说到扫雷很容易想起很多个方形格子,表面什么也没有,点击其中一个小格子,如果时炸弹...
    99+
    2024-04-02
  • C语言扫雷排雷小游戏实现全程
    目录test.cgame.hgame.c详解游戏代码的实现1初化扫雷区2打印扫雷区3 设置雷4 排雷4.1展开一片的功能4.2雷标记功能的实现游戏过程test.c 在这个文件中,我们...
    99+
    2024-04-02
  • 用C语言实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 1. 规则 随便点一个格子,会有一块,上面的数字就代表数字周围八个格子会有几个雷,是1他周围就只有1个雷...
    99+
    2024-04-02
  • C语言实现扫雷小项目
    本文实例为大家分享了C语言实现扫雷小项目的具体代码,供大家参考,具体内容如下 游戏的基本设计流程如下: 菜单实现: void menu() { printf("#######...
    99+
    2024-04-02
  • 使用C语言实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 游戏规则 在一个9*9的地图上一共有十个雷,翻开所有不是雷的位置 游戏即为胜利, 如果踩到雷,游戏结束 ...
    99+
    2024-04-02
  • C语言如何实现一个扫雷程序
    本篇内容介绍了“C语言如何实现一个扫雷程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!整个游戏设计中主要的函数为:1、初始化地雷棋盘和显示...
    99+
    2023-06-17
  • 用C语言实现简单扫雷小游戏
    前言 今天学习了制作简易扫雷游戏,代码如下 提示:以下是本篇文章正文内容,下面案例可供参考 一、函数头文件(函数声明) 代码如下(示例): #pragma once #defin...
    99+
    2024-04-02
  • 用C语言简单实现扫雷小游戏
    本文实例为大家分享了C语言简单实现扫雷小游戏的具体代码,供大家参考,具体内容如下 设计思路 1. 定义两个二维数组,一个存放炸弹信息,一个隐藏信息后向玩家展示。 2. 玩家每一次选择...
    99+
    2024-04-02
  • 怎么用C语言实现扫雷小游戏
    这篇文章主要讲解了“怎么用C语言实现扫雷小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C语言实现扫雷小游戏”吧!具体内容如下经典扫雷游戏规则:当玩家点击游戏区域,该处周围的八个位...
    99+
    2023-06-25
  • 用C语言实现一个扫雷小游戏
    本文实例为大家分享了C语言实现一个扫雷小游戏的具体代码,供大家参考,具体内容如下 一、全部源码 //棋盘大小 #define ROW 9 #define COL 9 //棋盘加边...
    99+
    2024-04-02
  • C语言简易实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 经典扫雷游戏规则: 当玩家点击游戏区域,该处周围的八个位置有几个雷(如果是角落则是周边三个位置雷的个数,...
    99+
    2024-04-02
  • C语言怎么实现扫雷小游戏
    本篇内容介绍了“C语言怎么实现扫雷小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供...
    99+
    2023-06-20
  • 基于C语言实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 game.h 设置头文件 #include<stdio.h> #include<s...
    99+
    2024-04-02
  • C语言实现扫雷小游戏详解
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏。当用户选择退出时,程序运行结束,当用户选择玩游戏时,将...
    99+
    2024-04-02
  • C语言实现扫雷游戏小项目
    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 一.基本实现功能 1.建立一个游戏菜单 2.创建游戏盘,一个埋雷,一个显示。 3.打印游戏盘。 4.翻开坐...
    99+
    2024-04-02
  • C语言轻松实现扫雷小游戏
    前言 扫雷是一款经典的小游戏,那么如何用c语言来实现呢?下面我将带你搞定扫雷小游戏。 注:本此游戏所用到的文件与上篇三子棋类似,最后附有代码展示。 1.游戏设计逻辑 1.布置雷&md...
    99+
    2022-11-13
    C语言 扫雷
  • C语言编程实现扫雷游戏
    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 在我们熟知的扫雷中,我们点击小方块,小方块要么出现数字,要么遇到地雷。我打算,使用数组的方式来完成扫雷游戏...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作