战略经营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 = 
|
|
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
|
|
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();
|
|
不错,不错 我以前主要在走液相(实验)时进样间隙扫雷。。 甚至帮朋友修电脑时在电脑忙碌的间隙,(尤其是给mm修电脑时 )也会乘机按下windows徽标键+r,输入winmine,然后在朋友羡慕的目光下挥舞鼠标。。
|
|
|
|