iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言制作扫雷游戏(图形库)
  • 162
分享到

C语言制作扫雷游戏(图形库)

2024-04-02 19:04:59 162人浏览 安东尼
摘要

本文实例为大家分享了C语言制作扫雷游戏的具体代码,供大家参考,具体内容如下 游戏预览: 学习内容: 1.图形库文件的使用2.c++的使用,如类函数3.了解扫雷的规则,严谨的思维逻

本文实例为大家分享了C语言制作扫雷游戏的具体代码,供大家参考,具体内容如下

游戏预览:

学习内容:

1.图形库文件的使用
2.c++的使用,如类函数
3.了解扫雷的规则,严谨的思维逻辑

扫雷的规则:

玩家点击一个地方,如果该地方是雷,则游戏结束;如果是空格,则会显示周围空格和周围8个格子的雷的数量,玩家依照提示逐步挖掘全部的雷,从而结束游戏。

制作步骤:

基本的库函数和常量

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include <graphics.h>
#include <coNIO.h>
#include <windows.h>

#define WIDTH 10//游戏宽度
#define NUM 12//雷的数量
#define SIZE 70///单张位置图片的大小

1.生成游戏地图

如果想生成一个M x N的扫雷地图,是不是要定义一个map[M][N]的二维数组呢?
答案是否定的。
点击一个位置,如果它是空格需要遍历周围8个位置,如果周围8个位置有空格的话,那么那个空格也需遍历周围8个位置,如此反复。但问题来了,如果当遍历到了边缘一层,边缘周围没有8个位置,造成数组越界怎么办?
所以,这里我们就要在地图设2个区,即保护区游戏区

假设我们像创作一个M x N大小的扫雷地图,**那么就定义一个map[M+2][N+2]大小的数组。**即设计一层保护区,其目的就是当遍历到边缘一格时,防止数组越界报错。

int map[WIDTH + 2][WIDTH + 2];

2.初始化游戏地图

第一步:先假设每个位置都是空格,即0

for (int i = 1; i <= WIDTH; i++)
    {
        for (int j = 1; j <= WIDTH; j++)
        {
            map[i][j] = 0;
            putimage(i*SIZE, j*SIZE, &img[0]);
        }
    }

第二步:初始化雷的分布

int n = 0;
    while (n < NUM)
    {
        int r = rand() % WIDTH + 1;
        int c = rand() % WIDTH + 1;
        if (map[r][c] == 0)//当该位置是空格时才产生雷
        {
            map[r][c] = -1;//-1代表雷
            n++;
        }
    }

第三步:遍历一个空格周围8个位置的雷的数量,每有一个雷,该位置所对应的数组值加1

for (int i = 1; i <= WIDTH; i++)//从游戏区的第1个坐标开始
    {
        for (int j = 1; j <= WIDTH; j++)
        {
            if (map[i][j] == -1)//如果这个位置是雷
            {
                for (int m = i - 1; m <= i + 1; m++)//遍历周围8八个
                {
                    for (int n = j - 1; n <= j + 1; n++)
                    {
                        if (map[m][n] != -1 && m != 0 && n != 0)
                        {
                            map[m][n]++;
                        }
                    }
                }
            }
        }
    }

第四步:给每个位置都加密,让这些位置的在一个范围内显示“■”

for (int i = 1; i <= WIDTH; i++)
    {
        for (int j = 1; j <= WIDTH; j++)
        {
            map[i][j] += 20;
            if (map[i][j] > 11)
            {
                printf_s("■ ");
                putimage((i-1)*SIZE, (j-1)*SIZE, &img[12]);
            }
        }
        printf_s("\n");
    }

3.鼠标点击功能

定义鼠标函数,让它可以点击相应的位置触发函数

fflush(stdin);//清空缓冲区的字符
    flushmessage(EM_MOUSE | EM_KEY);//清空缓冲区的鼠标事件
    int heng, zong;
    ExMessage m;
    m = getmessage(EM_MOUSE | EM_KEY);//获取鼠标或键盘事件
    heng = m.x / SIZE+1;//获取鼠标点击在控制台上的横坐标
    zong = m.y / SIZE+1;//获取鼠标点击在控制台上的纵坐标
    switch (m.message)
    {
    case WM_LBUTTONDOWN://按鼠标左键扫雷
        s = DiTu.ReturnT(heng, zong);//点击的位置是否能触发函数
        if ((heng >= 1 && heng <= WIDTH&&zong >= 1 && zong <= WIDTH)&&s)//没被标记的才能被点击
        {
            updateNum(heng, zong);
            DiTu.drawMap();//每点一下就画一次图
        }
        break;
    case WM_RBUTTONDOWN://按鼠标右键做标记
        DiTu.BiaoJi(heng,zong);
        break;
    case WM_MBUTTONDOWN://按鼠标滑轮退出
        exit(0);
        break;
    }

判断函数:判断点击的位置是否合理

bool ReturnT(int heng, int zong)
{
    if (map[heng][zong]<50)
    {
        return true;
    }
    else
    {
        return false;
    }
}

标记函数:点击鼠标右边标记该点,使该点不能被点击

void BiaoJi(int heng, int zong)
{
    if (map[heng][zong]>10 && map[heng][zong] < 50)
    {
        map[heng][zong] += 50;
    }
    else{
        map[heng][zong] -= 50;
    }
}

4.扫出周围数字的函数,如果有周围有空格则遍历执行

void UpdateNum(int heng, int zong)
{
    if (map[heng][zong] - 20 == 0)//0才需要遍历
    {
        for (int i = heng - 1; i <= heng + 1; i++)
        {
            for (int j = zong - 1; j <= zong + 1; j++)
            {
                UpdateNum(i, j);//递归
                if (map[heng][zong] > 10 && map[heng][zong]<50)//除去保护密码
                {
                    map[heng][zong] -= 20;
                    putimage(heng*SIZE, zong*SIZE, &img[map[heng][zong]]);
                }
            }
        }
    }
    if (map[heng][zong] > 10 && map[heng][zong] < 50)//除去保护密码
    {
        map[heng][zong] -= 20;
        putimage(heng*SIZE, zong*SIZE, &img[map[heng][zong]]);
    }
}

游戏效果浏览

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

--结束END--

本文标题: C语言制作扫雷游戏(图形库)

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

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

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

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

下载Word文档
猜你喜欢
  • C语言制作扫雷游戏(图形库)
    本文实例为大家分享了C语言制作扫雷游戏的具体代码,供大家参考,具体内容如下 游戏预览: 学习内容: 1.图形库文件的使用2.C++的使用,如类函数3.了解扫雷的规则,严谨的思维逻...
    99+
    2024-04-02
  • 使用C语言制作扫雷游戏
    本篇文章和大家了解一下使用C语言制作扫雷游戏。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。实现扫雷创建俩12*12的字符数组,一个用作放雷,一个呈现给用户2、利用随机数往防雷数组中产生雷3、设计呈现给用户的数组4、利用输...
    99+
    2023-06-15
  • C语言版扫雷游戏
    本文实例为大家分享了C语言版扫雷游戏的具体代码,供大家参考,具体内容如下 1、思路 一、创建二维数组,来表示地图 每一个格子要表示的信息: 1、未翻开状态(草地)和已翻开状态(...
    99+
    2024-04-02
  • C语言版扫雷小游戏
    本文实例为大家分享了C语言版扫雷小游戏的具体代码,供大家参考,具体内容如下 一、游戏功能 1、显示该点周围雷的个数 2、第一次下子,不炸死 3、坐标周围没雷,可以实现展开 二、效果...
    99+
    2024-04-02
  • 使用C语言怎么制作一个扫雷游戏
    本篇文章给大家分享的是有关使用C语言怎么制作一个扫雷游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底...
    99+
    2023-06-14
  • C语言版简单扫雷游戏
    本文实例为大家分享了C语言版的简单扫雷游戏,供大家参考,具体内容如下 思想 我们在设计的时候,首先将其分为三个部分,分别为头文件game.h游戏界面及主要实现的功能函数部分test....
    99+
    2024-04-02
  • 用C语言实现扫雷游戏
    用C语言实现扫雷游戏,因为代码会比较多,所以采用多文件的方式,使代码看起来更好。 一.main.c 在主调函数中首先要提供一个给用户选择的界面,在这里我们假定选择1为开始游戏,0为退...
    99+
    2024-04-02
  • C语言编程实现扫雷游戏
    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 在我们熟知的扫雷中,我们点击小方块,小方块要么出现数字,要么遇到地雷。我打算,使用数组的方式来完成扫雷游戏...
    99+
    2024-04-02
  • C语言数组实现扫雷游戏
    本文实例为大家分享了C语言数组实现扫雷游戏的具体代码,供大家参考,具体内容如下 游戏界面展示: 一开始菜单界面: 选择 0 退出程序: 选择 1 开始游戏: 输入要排查雷的坐标...
    99+
    2024-04-02
  • 使用C语言实现扫雷游戏
    目录一、游戏介绍二、实现模块三、实现原理四、实现逻辑五、全部代码六、运行结果本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 一、游戏介绍 扫雷游戏是在一个...
    99+
    2022-11-13
    C语言 扫雷
  • c语言扫雷小游戏源代码
    这期内容当中小编将会给大家带来有关c语言扫雷小游戏源代码,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。说明:该游戏的实现需要建立三个文件test2.c:整个游戏,开始游戏/退出游戏的大体执行流程game2...
    99+
    2023-06-06
  • C语言练习之扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 *1.设计思路与实现要求 (1)创建两个二维数组 9x9 ,一个表示显示地图数组showMap-未翻开状...
    99+
    2024-04-02
  • C语言实现扫雷经典游戏
    C语言实现扫雷游戏,供大家参考,具体内容如下 实现扫雷游戏 与三子棋游戏类似,为了便于后期对于代码的阅读、理解与地图大小和地雷的数量变更,先用#define定义一个标识符表示一个常量...
    99+
    2024-04-02
  • 利用C语言实现扫雷游戏
    通过一段时间的C语言学习,想必小伙伴们也想跃跃欲试的编写一些小程序,这个扫雷简易游戏,非常适合C语言初学者去实践。 实现扫雷,首先要有两个棋盘,一个棋盘放置着雷的信息,另个用于展示到...
    99+
    2024-04-02
  • C语言怎样实现扫雷游戏
    这篇文章主要介绍了C语言怎样实现扫雷游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。概述扫雷是一款大众类的益智小游戏。游戏目标是根据点击格子出现的数字找出所有非雷格子,同时...
    99+
    2023-06-15
  • 用C语言实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 1. 规则 随便点一个格子,会有一块,上面的数字就代表数字周围八个格子会有几个雷,是1他周围就只有1个雷...
    99+
    2024-04-02
  • C语言递归实现扫雷游戏
    前言 首先要实现扫雷原理上同三子棋,都是通过一个二维数组来实现游戏主题功能那么这里有几个值得注意的点 1、初级扫雷我们知道是九乘九数组实现,那么在这里我们创建的是11乘11的数组,目...
    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语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 经典扫雷游戏规则: 当玩家点击游戏区域,该处周围的八个位置有几个雷(如果是角落则是周边三个位置雷的个数,...
    99+
    2024-04-02
  • C语言扫雷游戏的简单实现
    今天来用c语言做一个扫雷功能的简单实现,首先创建一个test.c来用于在写代码的途中测试扫雷代码,game.h来存放实现扫雷函数需要用到的头文件,game.c来存放最终的成品。 首先...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作