下载 > 资源分类 >  开发技术 >  Java > 扫雷源代码刨析

扫雷源代码刨析

2004-08-11 上传大小:12KB
扫雷源代码刨析
注意:源代码仅供个人作学习研究时的参考,不得在程序制作中直接抄录。

    源代码一共两个文件:Mine.java,MGame.java,另外还有一些图片。
    在JBuilder下建立一个新的工程,将两个源文件复制到工程目录下的src\mine目录中,将所有图片复制到src\images目录中就可以了。

要点分析

数据结构
    首先要说明一下用来存
放地雷信息的数组grid。
    grid是一个二维数组,第一位对应表格的行,第二位对应表格的列,比如grid[y][x]表示第y行第x列。每个字节的含义分三段:0-9表示已经挖开;10-19表示仍然埋藏;20-29表示做了标记。每段中:0-8表示周围的地雷数量;9表示是地雷。

newGame()函数
    这是用于开始一个新游戏的。
    由于每次地雷的埋放地是随机的,应次开始新游戏之前先要生成新的地雷信息。
    第一步是初始化grid,将所有内容都置成10,因为一开始所有格子都是埋藏的。
        for(i=0;i<Height; i++)
        {
          for(j=0; j<Width; j++)
              grid[i][j] = 10;
        }

    第二步是随机产生地雷。当然了,已经产生过地雷的地方要避开。
        for(i=0; i<MINECOUNT; i++)
        {
          while(true)
          {
              x = Math.abs(rand.nextInt()) % Width;
              y = Math.abs(rand.nextInt()) % Height;
              if (grid[y][x] != 19)
              {
                  grid[y][x] = 19;
                  break;
              }
          }
        }
    最后就是无雷处计算周围的雷数了。怎么计算?一个一个加就是了。

挖雷与做标记
    在看一下按键响应函数keyPressed(int kcode),按1键是挖开动作。
    前半部分表示如果当前焦点在一个埋藏格(值介于10到19之间),那么将其值减10,表示现在挖开。当然如果地下不是雷而且周围没有雷(值等于0)那么需要自动展开,这里调用了Expand(),(selx,sely)是当前焦点的表格坐标。
    后半部分表示如果当前焦点在一个已经挖开的格子上(值小于10),那么就调用SafeExp()来自动挖开周围未挖的格子。
    按3键是做标记动作。如果当前格是埋藏格,就做上标记(值加10);如果当前格已经做了标记,那么就去掉标记(值减10)。

自动展开
    Expand()是一个嵌套函数,他的作用是将周围不含地雷的格子周围全部挖开,如果挖开的部分中也有周围不含地雷的格子,那么对那些格子也重复前面的操作,直到把相关的格子都挖开。挖的顺序是左上、上、右上、左、右、左下、下、右下,如果遇到一个周围不含地雷的格子(值为0)那么马上嵌套调用Expand()对那个格子进行处理。
    SafeExp()是一个自动挖开周围未挖格子的函数。当然要实现这个功能是有条件的,就是周围做了标记的格子数量必须等于当前格所标的数字,也就是说玩家把周围所有的地雷都标记了(不管是否标错)。函数中第一个部分就是做以上条件的判断。
    第二部分是把周围埋藏的格子挖开。但是由于玩家的错误可能标记了没有地雷的格子,而把有地雷的格子漏标了,所以先要检查一下没做标而有地雷的格子和做错标记的格子。如果没有这些错误,那么可以安全的翻开了,同时也要检查是否挖到周围不含雷的格子,有的话就要调用Expand()了。
    SafeExp()的返回值表示是否引爆了地雷,就是标记错误,true表示是,false表示否。这主要用于判断这次游戏是否要结束。

类介绍

图像缓存 ExtendedImage
    ExtendedImage是Siemens自己扩展的一个专用类,只在Siemens的Java中存在。
    这个类主要是用做图像的缓存。大家不知道还有没有印象,以前在PC上编程的时候由于显示的速度比较慢,往往会开一片显示缓存,先把要现实的内容画到这片缓存中,全部画好后再一次性显示出来,ExtendedImage类就起到了这个作用。其实Java本身的Image类也可以实现类似的功能,但是显示速度好象不如人意,而且ExtendedImage更好用,所以我基本上都采用这个类。当然这对通用性是不利的。
    ExtendImage的主要函数有:
      void clear(byte color);
        用给定的颜色填充整个图形区域。
      void blitToScreen(int x, int y);
        将缓存内容贴到显示屏上,(x,y)是屏幕左上角坐标。
      Image getImage();
        返回一个标准的Image类。可以通过ExtendImage.getImage().getGraphics()得到与其相关的Graphics对象,用来往ExtendImage上面画图。
...展开收缩
综合评分:4(117位用户评分)
直接下载 开通VIP会员 免积分下载

评论共有1条

name
nbucnzxwq2015-09-29 22:18:43
不错,可以借鉴

评论资源

您不能发表评论,可能是以下原因:

登录后才能评论

待评论资源
 

热门专辑

关闭
img

spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip

CSDN VIP年卡 4000万程序员的必选现在开通,立省522元
下载
img

扫雷源代码刨析

会员到期时间: 剩余下载个数: 剩余C币:0 剩余积分:
VIP下载

积分不足!

资源所需积分 当前拥有积分
您可以选择
开通VIP年卡
4000万
程序员的必选
600万
绿色安全资源
现在开通
立省522元
或者
购买C币兑换积分 C币抽奖
img
资源所需积分 当前拥有积分 当前拥有C币
5 4 45
(仅够下载10个资源)
VIP年卡
全站1200个资源免积分下载
下载
img
资源所需积分 当前拥有积分 当前拥有C币
5 0 0
VIP年卡
全站1200个资源免积分下载
C币充值开通VIP年卡
img
资源所需积分 当前拥有积分 当前拥有C币
5 4 45
您的积分不足,将扣除 10 C币
VIP年卡
全站1200个资源免积分下载
下载
下载

兑换成功

你当前的下载分为234开始下载资源
你还不是VIP会员
开通VIP会员权限,免积分下载
立即开通

你下载资源过于频繁,请输入验证码

你下载资源过于频繁,请输入验证码

您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:webmaster@csdn.net!

举报

若举报审核通过,可奖励20下载分

  • 举报人:
  • 被举报人:
  • 举报的资源分:
  • *类型:
  • *详细原因: