文/jorge
就来看这个最简单的算法: 【程序编程相关:FastReport常见问题集 】
如前所述,算法层的实现,不外乎两种操作:1.如果一个方块的数值等于周围未挖开的方块数目,则把周围所有方块标记为雷;2.如果一个方块的数值等于周围已经标记为雷的方块个数,则在该块上同时单击左右键.实际上,这只是最简单的两种判断(简单到甚至不该称之为“判断”,而只是例行公事而已),而比这更复杂的分析判断还可以有很多,但现在我们追求的是程序的简单易懂,而且,就这两种最简单的判断,已经可以达到很好的效果了,在实际中它们绝对占到了扫雷所用时间的一大多半.更高级的判断,在扫雷外挂的0.2版本里也已经实现了,但在此处若要加以叙述,不免还要大幅增加篇幅. 【推荐阅读:游戏外挂设计技术探讨① 】
//根据cells中的数据进行判断,把适当的操作填入operations中 【扩展信息:Delphi 控制摄像头 】
=================================================================
procedure analyzecells; var i, j: integer; neighborcount: integer; //保存一个方块周围未挖开的方块的数目 begin //首先清空输出缓冲区 for i:=0 to areawidth-1 do for j:=0 to areaheight-1 do operations[i, j] := opnone; //扫描输入缓冲区,执行两种最简单的判断 for i:=0 to areawidth-1 do for j:=0 to areaheight-1 do begin //取得一个方块周围未挖开的方块的数目 neighborcount := countneighbors(i, j, [csunknown, cspossible]); //只有1~8的数字,并且周围存在未挖开的方块,这样的方块才有分析价值 if (cells[i, j]>cs0) and (cells[i, j]<=cs8) and (neighborcount > 0) then //第一种情况 ... 下一页