登录 [F2] | 注册 | 找回密码 | 软件下载 | 更新历史 | 关于本站 | 管理团队
首页 排行榜 录像 雷界 论坛 教程 雷神殿 我的地盘 新手上路
[杂谈]闲话扫雷 (7/1467)
 [童生] 李海婷 发表于 2008年6月18日

        
        

        

        

        战略经营RPG,凡是称得上PC game的,连其中人物甚至道具,招数都会惹人喜爱。扫雷是Windows最早的游戏之一,我却一直不甚喜欢。说起来可笑,上小学前的暑假,爸爸带回家中第一台电脑。我对着一局99雷的高级扫雷,纠结了一晚上愣是没给窗口正中的那个小人戴上个墨镜,脾气暴躁到想把电脑砸掉。觉得这玩意儿就是没“小霸王”学习机过瘾。大人告诉我说,扫雷可是个考耐力和分析的游戏,你要是觉得暴躁,没有玩儿之前就已经输了。我听了,也就不再怄气,原谅它了。可是从此以后,每打开扫雷,一股疙疙瘩瘩的感情油然而生,尽管我一再刷新这纪录。

        今年四月,我们的RE课题,也就是国内的研学,来到了关键性一步。我需要学习Computer aided design(CAD),来完成下一步的工作。于是到网上找了份教程和软件下载。尽管开了迅雷,M1这个奸商提供的无线网依旧是我下象棋时落子的速度一样慢。要随时观察资源所以不能开全屏的娱乐,无聊之余,便随手打开了久违的Windows扫雷。

        陈奕迅的《十年》真是首意义深刻的歌曲。十年之前我刚开始看《名侦探柯南》时,我比柯南还小;十年之后我比工藤新一还大;十年之前我家的第一台电脑还是Windows95的经典窗口;十年之后我点击虚浮的光标打开面目全非的扫雷。

        扫雷也许是世上最简单的游戏。我们某位敬爱的先人曾写过这样的诗句:“玩通扫雷三百局,不会双击也会蒙”,可见扫雷的妙处。偏偏我玩得不是时候,很长时间没有扫雷,手都僵了。直到几百个M的软件下载完,愣是一次都没有clear。

        但是和我一组做RE的来自安徽安庆的张帅,甚至同班的越南同学Linh帅,都是玩扫雷的高手。张帅当场给我demo了一局143秒99雷高级扫雷通关,看得我直心疼我的鼠标。APM我估计有300了。

        Vista系统下的扫雷,地雷的图标可以自由变化,我把雷的图标修改成了葵花骨朵儿的样子,叫做“Flower Garden Mode”,倒不是因为我喜欢龙葵。这时候,哪怕是一不小心点错了键,也不会像老版扫雷那样轰隆一下一个红叉,屏幕正中的小笑脸儿也成了X.X,而是像黛玉妹妹“冷月葬花魂”那样,湖蓝或是翡翠绿的背景上开出一朵朵葵花骨朵儿。看着这样的场景,你还以为是点击时误踩了机关巧入百花园呢。

        我不觉动了情,想好好玩一玩让我疙疙瘩瘩的扫雷。

        张帅开始一点一点给我讲解扫雷的一些高级技巧。叫他张帅,其实并不是特别的帅,只是肩膀很宽很平,西装套上有型而已。大概是张帅想让我真切地体会一下扫雷的乐趣吧?重新开了一局,放慢了点击的速度,让我明白他每一步推测的过程以及原因。界面是湖蓝色的,格子如同玻璃石一般镶嵌在一起。

        张帅叹息似的轻轻说:你瞧这群小东西,多神秘。

        我就问道:像这样一盘扫雷,一般要用多长时间?

        张帅说:正常速度的话三四百秒。但是那得要是人品好。一盘扫雷下来脑子也不能闲着,分析,排除,有的时候需要经验以及大胆的猜测。给予那些数字的雷可能很有限,足够他们标记的数字就好了。他们从来不争,也不计较什么。日复一日年复一年,不辞辛苦地在窗口中一次次出现……

        我又问道,这样好的游戏,寿命有多久。

        张帅摇一摇头说:这要看你怎么算了。每一盘扫雷都是随机的,生的突兀,消失得也迅速。只要轻轻点击窗口右上角的红叉叉,他们也就不复存在了。

        我的心不禁一颤:多可爱的小生灵啊!对人物所求,给人的却是极好的东西。思考的乐趣,冒险的经历,可不是哪里都可以得到的啊。扫雷是在扫雷,又是在挑战生活,以这种充满乐趣的方式。这是一种生活方式,也是一种生活态度。小小的扫雷正是容纳了这种游戏人生的精神。游戏发于生活,始于生活,并最终服务于生活,这是一种崇高,一种境界。

        试想,下载时,是谁陪我们度过百无聊赖的时光?烦躁时,是谁仅仅用几下鼠标的点击就还予我们性灵的宁静?透过电脑屏幕,我注视着屏幕上的扫雷局。是的,葵花骨朵儿们没法主宰自己的命运,也不曾想去主宰他人的命运——他们只是在为自己,为别人,也为后世子孙,进行着生命的博弈。

        这黑夜,我做了个奇怪的梦,梦见自己有点开了一盘扫雷



附录:Flash扫雷源代码>
>function buildMap(map) { 
W = map[0].length; 
H = map.length; 
for (var j = 0; j<H; ++j) { 
  for (var i = 0; i<W; ++i) { 
   this.attachMovie("tile", "t_"+j+"_"+i, ++d); 
   var _mc = this["t_"+j+"_"+i]; 
   _mc._x = i*size+width[level]; 
   _mc._y = j*size+height[level]; 
   _mc.gotoAndStop(12); 
   _mc.state = 0; 
   _mc.number = 0; 
   _mc.bomb = 0; 
   _mc.count = 0; 
   _mc.mark = 0; 
   _mc.x = i; 
   _mc.y = j; 
  } 


function placeBombs() { 
var counter = 0; 
while (counter<bombs[level]) { 
  var ranW = random(W); 
  var ranH = random(H); 
  var _mc = this["t_"+ranH+"_"+ranW]; 
  var b = _mc.bomb; 
  if (!b) { 
   _mc.bomb = 1; 
   myMap[ranH][ranW] = 9; 
   ++counter; 
  } 


function placeNumbers(map) { 
for (var j = 0; j<H; ++j) { 
  for (var i = 0; i<W; ++i) { 
   var _mc = this["t_"+j+"_"+i]; 
   if (!_mc.bomb) { 
    if (map[j][i+1] == 9) { 
     ++_mc.count; 
    } 
    if (map[j][i-1] == 9) { 
     ++_mc.count; 
    } 
    if (map[j+1][i] == 9) { 
     ++_mc.count; 
    } 
    if (map[j-1][i] == 9) { 
     ++_mc.count; 
    } 
    if (map[j-1][i-1] == 9) { 
     ++_mc.count; 
    } 
    if (map[j-1][i+1] == 9) { 
     ++_mc.count; 
    } 
    if (map[j+1][i+1] == 9) { 
     ++_mc.count; 
    } 
    if (map[j+1][i-1] == 9) { 
     ++_mc.count; 
    } 
    if (_mc.count !== 1) { 
     continue; 
    } 
    _mc.number = 1; 
    continue; 
    _mc.number = 
回复此主题
第 1 楼
 [童生] 李海婷 回复于 2008年6月18日
 if (_mc.count !== 1) { 
     continue; 
    } 
    _mc.number = 1; 
    continue; 
    _mc.number = 2; 
    continue; 
    _mc.number = 3; 
    continue; 
    _mc.number = 4; 
    continue; 
    _mc.number = 5; 
    continue; 
    _mc.number = 6; 
    continue; 
    _mc.number = 7; 
    continue; 
    _mc.number = 8; 
    continue; 
   } 
  } 


function setLabel(m) { 
markedLabel = "Marked: "+m+" / "+bombs[level]; 
switch (level) { 
case 1 : 
  levelLabel = "Beginner"; 
  break; 
case 2 : 
  levelLabel = "Intermediate"; 
  break; 
case 3 : 
  levelLabel = "Expert"; 
  break; 


function findTile(x, y) { 
var Y = y; 
var X = x; 
var tu = this["t_"+(Y-1)+"_"+X]; 
var td = this["t_"+(Y+1)+"_"+X]; 
var tl = this["t_"+Y+"_"+(X-1)]; 
var tr = this["t_"+Y+"_"+(X+1)]; 
var tur = this["t_"+(Y-1)+"_"+(X+1)]; 
var tdr = this["t_"+(Y+1)+"_"+(X+1)]; 
var tul = this["t_"+(Y-1)+"_"+(X-1)]; 
var tdl = this["t_"+(Y+1)+"_"+(X-1)]; 
if (tu.bomb == 0 && tu.mark == 0 || td.bomb == 0 && td.mark == 0 || tl.bomb == 0 && tl.mark == 0 || tr.bomb == 0 && tr.mark == 0 || tur.bomb == 0 && tur.mark == 0 || tdr.bomb == 0 && tdr.mark == 0 || tul.bomb == 0 && tul.mark || tdl.bomb == 0 && tdl.mark == 0) { 
  this["t_"+Y+"_"+X].state = 1; 
  this["t_"+Y+"_"+X].gotoAndStop(13); 
  if (tu.number == 0 && tu.state == 0 && tu.bomb == 0 && tu.mark == 0) { 
   findTile(X, Y-1); 
  } else if (tu.bomb == 0 && tu.mark == 0) { 
   tu.gotoAndStop(tu.number); 
   tu.state = 1; 
  } 
  if (td.number == 0 && td.state == 0 && td.bomb == 0 && td.mark == 0) { 
   findTile(X, Y+1); 
  } else if (td.bomb == 0 && td.mark == 0) { 
   td.gotoAndStop(td.number); 
   td.state = 1; 
  } 
  if (tl.number == 0 && tl.state == 0 && tl.bomb == 0 && tl.mark == 0) { 
   findTile(X-1, Y); 
  } else if (tl.bomb == 0 && tl.mark == 0) { 
   tl.gotoAndStop(tl.number); 
   tl.state = 1; 
  } 
  if (tr.number == 0 && tr.state == 0 && tr.bomb == 0 && tr.mark == 0) { 
   findTile(X+1, Y); 
  } else if (tr.bomb == 0 && tr.mark == 0) { 
   tr.gotoAndStop(tr.number); 
   tr.state = 1; 
  } 
  if (tur.number == 0 && tur.state == 0 && tur.bomb == 0 && tur.mark == 0) { 
   findTile(X+1, Y-1); 
  } else if (tur.bomb == 0 && tur.mark == 0) { 
   tur.gotoAndStop(tur.number); 
   tur.state = 1; 
  } 
  if (tdr.number == 0 && tdr.state == 0 && tdr.bomb == 0 && tdr.mark == 0) { 
   findTile(X+1, Y+1); 
  } else if (tdr.bomb == 0 && tdr.mark == 0) { 
   tdr.gotoAndStop(tdr.number); 
   tdr.state = 1; 
  } 
  if (tul.number == 0 && tul.state == 0 && tul.bomb == 0 && tul.mark == 0) { 
   findTile(X-1, Y-1); 
  } else if (tul.bomb == 0 && tul.mark == 0) { 
   tul.gotoAndStop(tul.number); 
   tul.state = 1; 
  } 
  if (tdl.number == 0 && tdl.state == 0 && tdl.bomb == 0 && tdl.mark == 0) { 
   findTile(X-1, Y+1); 
   return; 
  } 
  if (tdl.bomb == 0 && tdl.mark == 0) { 
   tdl.gotoAndStop(tdl.number); 
   tdl.state = 1; 
  } 


function gameOver(x, y) { 
var _this = this; 
for (var j = 0; j<H; ++j) { 
  for (var i = 0; i<W; ++i) { 
   if (_this["t_"+j+"_"+i].bomb) { 
    _this["t_"+j+"_"+i].gotoAndStop(9); 
   } 
  } 

_this["t_"+y+"_"+x].gotoAndStop(10); 
playGame = 0; 
snd2.start(0, 1); 
statusLabel = "DEAD!"; 

function checkWin() { 
var count = 0; 
for (var j = 0; j<H; ++j) { 
  for (var i = 0; i<W; ++i) { 
   var mc = this["t_"+j+"_"+i]; 
   if (mc.state == 1) { 
  &n
回复此主题
第 2 楼
 [童生] 李海婷 回复于 2008年6月18日
if (playGame) { 
  if (Key.isDown(32)) { 
   var col = int((_xmouse-width[level])/size); 
   var row = int((_ymouse-height[level])/size); 
   var _mc = this["t_"+row+"_"+col]; 
   if (!_mc.mark && !_mc.state) { 
    _mc.mark = 1; 
    _mc.gotoAndStop(11); 
    ++marked; 
    setLabel(marked); 
   } 
  } 

}; 
d = 0; 
marked = 0; 
playGame = 1; 
myMap = _root["myMap"+level]; 
buildMap(myMap); 
placeBombs(); 
placeNumbers(myMap); 
setLabel(marked); 
statusLabel = ""; 
Key.addListener(_root); 
stop();
回复此主题
第 3 楼
 [秀才] 刘康乐 回复于 2008年6月18日
不错,不错
我以前主要在走液相(实验)时进样间隙扫雷。。
甚至帮朋友修电脑时在电脑忙碌的间隙,(尤其是给mm修电脑时)也会乘机按下windows徽标键+r,输入winmine,然后在朋友羡慕的目光下挥舞鼠标。。
回复此主题
第 4 楼
 [雷神] 石磊 回复于 2008年6月19日
嗯嗯,
收藏了。
回复此主题
第 5 楼
 [雷神] 时瑞新 回复于 2008年6月20日
像读一首诗,顶起~~
回复此主题
第 6 楼
 [雷圣] 张宏 回复于 2008年6月20日
呵呵,这文章似曾相识啊。难道是杨朔的《荔枝蜜》?
回复此主题
第 7 楼
 [童生] 李海婷 回复于 2008年6月21日
恩  荔枝蜜原文:http://zhidao.baidu.com/question/37878332.html?fr=qrlhttp://zhidao.baidu.com/question/37878332.html?fr=qrl
 
回复此主题
  共 7 篇回复  首页 | 上一页 | 下一页 | 末页  现在是第 1/1 页
楼主信息
Copyright @ 2008 扫雷网 Saolei.wang 版权所有 陕ICP备19026089号-1