`
celebration
  • 浏览: 34971 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

扫雷程序的实现

阅读更多

      春节在家没事干,亲戚朋友都在老家,整天都猫在家里。感觉有点写东西的冲动,于是找了本编程的书,把上面感觉有点意思而且值得写的东西随便写了些。后来想到了写个扫雷玩玩,扫雷的游戏我还是比较喜欢的,以前没事的时候经常玩。

      我选择了C++实现,不过我的界面不行,也懒得写。于是就简单的做了个内核性的东西,直接在cmd界面接收输入和打印输出。宏定义扫雷区域的大小(N*N)和地雷的数量(M),方便修改。其实可以做成根据选择的游戏难度来改变雷区的大小和地雷的数量,和微软带的扫雷程序一样,不过我懒得弄了。记录雷区状态(有雷,空白,数字)自然就选择了二维数组(0--空白 -1--地雷 正整数--周围雷的数量),如果雷区的大小是N的话,我的数组就是(N+2)*(N+2),然后将最外围的都赋值为0。

      首先是开局的时候初始化雷区的问题,我选择的先随即生成M(地雷个数)个不同的位置,将地雷状态数组的相应位置置成-1,表示这个位置有地雷。把所有的地雷都随即生成好以后,接下来的任务就是要把其他的位置安装地雷的情况进行赋值,如果某个位置周围没有地雷则直接赋值为0,否则就是周围8个位置的地雷数。由于表示雷区数组的大小比实际的雷区大,所以不用考虑边缘的情况,也在一定的程度上提高了效率,用空间复杂度换取了时间复杂度。这样就完成了雷区的初始化。

下一步的任务就是开始游戏了,玩家是通过输入坐标的值来进行游戏的。
    如果该位置有地雷(值是-1),则直接显示游戏结束,打印出雷区的全貌(地雷,数字和空白)。
    如果该地是大于0的整数,则直接显示该位置,游戏继续
    如果该位置是空白(值为0),表示该地区是空白区,即周围没有地雷,这个时候要做的就是把周围的非空白区都显示出来,本步骤最难的也就是这个过程了。
点到空白区的显示算法我是用递归实现的,也就是如果当前位置是空白区,则递归显示周围的8个位置(如果是边缘可能小于8,需要判断小不能超出范围)。递归的终结条件就是点到的位置不是空白区为止(即值大于0为止)。可能有人担心万一点到地雷了呢?这种情况是不可能发生的,原因我就不多说了,相信大家都能明白。

      最后一步就是判断游戏胜利的条件,其实这个实现上更容易。只要记录下所有显示的位置的数量,满足N*N-M即可。

      整个流程就是这样,思路还是非常简单的,可能调试起来稍微花点时间,但是用心调的话应该也会很快的。本来就是自己无聊写着玩的,写完后也没有整理,不过看到网上不少的新手求助扫雷程序的思路和代码。代码我就不贴了,没有整理没有优化太乱了,在这里就简单的说下思路吧。

注:     

      如果想做成和微软带的一样的扫雷其实也很简单,写好了界面后在每次点击鼠标左键的时候捕获相应的坐标,其他的思路是一样的。然后加个右键标示该位置是地雷,对某个数字位置按住左键再按右键的时候如果该位置周围的雷都已经标示出来的话,进行的操作就是显示该位置周围的其他未显示的位置。再加上记录时间,显示剩余地雷的数量,弄个重置游戏的按钮就好了。这样的话做出来的东西就和微软的扫雷差不多了,有时间有兴趣可以做着玩,不过我懒得弄了。

分享到:
评论
4 楼 celebration 2009-02-13  
fxsjy 写道

左右键同时按的功能做了没有?当初我也做了一个,就是这个功能还没实现了:http://microsoft.csdn.net/vs/dev_contest/Ms_rich_Detail.aspx?pointid=116

这个我没做,不过应该也比较简单,只要把周围还没有显示的格子都显示出来就可以了。
3 楼 celebration 2009-02-13  
姜太公 写道

楼主啊,我们真是有缘,我也写了一个。同样是没有界面,直接在cmd上输出,也是(width+2) * (height + 2)的数组。连0表示空白,-1表示雷都一样。握个手!不过我用的是Python,写起来很轻松。

呵呵,握个手!
2 楼 姜太公 2009-02-09  
楼主啊,我们真是有缘,我也写了一个。同样是没有界面,直接在cmd上输出,也是(width+2) * (height + 2)的数组。连0表示空白,-1表示雷都一样。握个手!

不过我用的是Python,写起来很轻松。
1 楼 fxsjy 2009-02-09  
左右键同时按的功能做了没有?当初我也做了一个,就是这个功能还没实现了:http://microsoft.csdn.net/vs/dev_contest/Ms_rich_Detail.aspx?pointid=116

相关推荐

    [毕业设计]网格扫雷程序实现.zip

    [毕业设计]网格扫雷程序实现

    加载位图示例,是扫雷程序实现的第一步

    在扫雷程序的开发过程中,第一步通常是加载游戏所需的图像资源,比如位图。位图是一种常见的图像文件格式,用于存储像素级别的图像数据。在扫雷新手教程或基础实现中,"加载位图示例"是指如何将位图文件集成到扫雷...

    扫雷程序源代码 Java实现

    【扫雷程序源代码 Java实现】是一个典型的编程项目,它涉及到计算机科学中的多个核心概念,主要使用Java语言来实现。扫雷游戏虽然简单,但在编程实现中却能涵盖很多编程基础、逻辑思维以及算法设计的知识点。以下是...

    基于java面向对象实现扫雷程序源码

    基于java面向对象实现扫雷程序源码 基于java面向对象实现扫雷程序源码 基于java面向对象实现扫雷程序源码 基于java面向对象实现扫雷程序源码 基于java面向对象实现扫雷程序源码 基于java面向对象实现扫雷程序源码 ...

    C++程序设计大作业可视化小程序扫雷的实现源码.zip

    C++程序设计大作业可视化小程序“扫雷”的实现源码C++程序设计大作业可视化小程序“扫雷”的实现源码C++程序设计大作业可视化小程序“扫雷”的实现源码C++程序设计大作业可视化小程序“扫雷”的实现源码C++程序设计...

    C语言实现扫雷程序代码

    该段代码示例展示了如何使用C语言结合`graphics.h`库实现一个简单的扫雷游戏。它不仅涵盖了基本的数据类型和控制结构,还涉及到了较为复杂的图形界面设计和游戏逻辑处理。通过对这段代码的学习,可以帮助开发者理解...

    用Visual C++实现的扫雷程序

    《Visual C++ 实现扫雷程序的技术解析》 在计算机编程的世界中,扫雷游戏作为一个经典的小型项目,常被用来作为学习编程语言特性的实践案例。本篇将深入探讨如何利用Visual C++来实现这一有趣的应用,以及在这个...

    java实现的扫雷程序

    用java实现的一个扫雷程序,界面比较美观,基本上实现的window扫雷的功能

    用c++实现的扫雷程序

    用c++实现的扫雷程序 简单 易懂,是学习扫雷程序的好资料

    windows扫雷程序(源码)

    模拟windows扫雷程序实现。 采用virsual c++6.0 实现,使用MFC框架。

    扫雷程序

    Delphi 的扫雷程序实现涉及以下几个核心知识点: 1. **控件使用**:在 Delphi 中,界面元素称为控件,如按钮(TButton)、标签( TLabel)、网格(TGridPanel)等。扫雷程序通常会使用网格布局来展示游戏区域,每个...

    VB简单扫雷程序

    【VB简单扫雷程序】是一个基于Visual Basic 6.0(VB6.0)开发的简易版扫雷游戏。VB6.0是Microsoft推出的一种面向对象的编程环境,主要用于开发Windows应用程序。这个程序展示了如何利用VB的基础知识和控件来实现经典...

    Java实现的扫雷程序

    这是一个用Java编写的扫雷程序。。。。 。。。

    简单 的 扫雷 程序

    ### IT知识点:C语言实现的简单扫雷程序分析 #### 核心概念解析 本文将深入探讨一个基于C语言的简单扫雷程序设计与实现,该程序运行在DOS界面下,利用图形库进行交互式游戏体验。我们将从程序结构、关键函数功能...

    扫雷源程序及exe

    【扫雷游戏源程序及exe】是一个编程爱好者自制的扫雷项目,包含了源代码和编译后的可执行文件。这个项目对于那些想要了解扫雷游戏的实现原理、学习编程技巧或者对游戏开发感兴趣的朋友们来说,是一份宝贵的资源。...

    扫雷程序(C语言版)

    下面将详细阐述这款扫雷程序的核心知识点及其实现。 1. **C++语言基础**: - C++是C语言的增强版,支持面向对象编程,具有类、对象、封装、继承和多态等特性。在扫雷程序中,C++被用来定义各种游戏元素,如雷区、...

    codeBlocks + wxWidget做的扫雷程序

    在本项目“codeBlocks + wxWidget做的扫雷程序”中,开发者利用了codeBlocks的IDE功能和wxWidgets库来实现经典的扫雷游戏。扫雷游戏有三种难度级别:初级、中级和高级,每种级别对应不同的雷区大小和雷的数量,这些...

    c语言实现的简单的扫雷程序

    【标题】:“C语言实现的简单的扫雷程序” 在编程领域,扫雷游戏是一个经典的练习项目,它能帮助初学者理解和应用基本的算法、逻辑思维以及用户界面设计。本项目是用C语言编写的,专注于在Windows 32位平台上运行。...

    java扫雷代码详解

    本篇文章主要讲解了Java扫雷程序的代码实现,通过对扫雷程序的代码注释,帮助初学者更好地理解扫雷程序的工作原理。 Java扫雷程序的设计 Java扫雷程序的设计主要分为三个步骤:第一步,extends JFrame,继承JFrame...

Global site tag (gtag.js) - Google Analytics