作者:LAMP小白 点击:1876 发布日期:2012-09-23 12:08:00 返回列表
我是这样写的 直接分析代码吧
当页面加载完成的时候去执行init方法,根据DIV的宽度和一个格子的宽度高度生成合适数量的格子
然后生成格子,地雷数据是保存在数组之中,点击的时候根据ID读取数组中相应键名的数据,判断有没有点到地雷
如果没有点到,则打开这个格子,同时判断周围的地雷个数,如果个数为0,那么递归调用自己,自动打开周围的8个格子
$(document).ready(function(){ init(); $('.unknow').click(function(){ var id = $(this).attr('id'); openThis(id); }); });
初始化数据
function init(){ //获取横着多少个 numW = Math.floor(mainW / divW); //获取竖着多少个 numH = Math.floor(mainH / divH); totals = numW * numH; alert(numW); alert(totals); data[0] = 0; for(var i = 1; i mio_lt;= totals; i++){ data[i] = 0; $('#main').append('mio_lt;div id="'+i+'" style="width:'+divW+'px;height:'+divH+'px;" class="unknow"mio_gt;mio_lt;/divmio_gt;'); } //生成地雷数据 mines = num; while(num mio_gt; 0){ i = Math.ceil(Math.random() * totals); if(data[i] != 1){ data[i] = 1; num--; } } };
点击格子时判断这个id的数组是否为1,然后根据数值的不同进行不同的处理
function openThis(id){ if(data[id] == 0){ $('#'+id).attr({class:'safe'}); var info = mine_open(id); if(info == 0){ info = 'mio_amp;nbsp;'; } $('#'+id).empty().html(info); totals = totals - 1; }else if(data[id] == 1){ alert('完蛋咯~'); } }
打开一个不为地雷的格子的函数,如果周8个格子都没有雷,那么递归调用自己再次触发打开格子事件
mio_lt;pre class="brush:js; toolbar: true; auto-links: true;"mio_gt; function mine_open(id){ var arr = {}; var mineTotal = 0; arr = int2xy(id); var x = arr[0]; var y = arr[1]; var reId = 0; //确定坐标周围的9个坐标 for(var w = -1; w mio_lt; 2 ; w++){ for(var h = -1; h mio_lt; 2; h++){ mineTotal = data[xy2int(x-h,y-w)] + mineTotal; } } if(mineTotal == 0){ for(w = -1; w mio_lt; 2 ; w++){ for(h = -1; h mio_lt; 2; h++){ reId = xy2int(x-h,y-w); if(reId == 0) continue; if($('#'+reId).attr('class') == 'safe') continue; openThis(reId); } } } return mineTotal; }mio_lt;/premio_gt;mio_lt;brmio_gt;
上一篇:scanf键盘输入 下一篇:快递查询API