JS写扫雷游戏

JS写扫雷游戏

作者: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
0