<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>扫雷游戏</title>
<meta http-equiv="Content-Language" content="zh-CN" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="Generator" content="Notepad++" />
<meta name="Robots" content="all" />
<meta name="Author" content="622" />
<meta name="Keywords" content="模版" />
<meta name="Description" content="模版" />
<meta name="Copyright" content="Copyright (c) 2014 rick All Rights Reserved." />
<script language="javascript"></script>
<style>
.all{margin:0 auto; width:960px;}

ul,li{margin:0; padding:0; list-style:none;}
#block>ul{height:32px; cursor:pointer;}
#block>ul>li{float:left; width:30px; height:30px; border:1px solid black; background:gray; color:white; text-align:center; position:relative;}
#block>ul>li>span{position:absolute; top:0; left:0; height:30px; width:30px; background:#eee;}

#ctrl{margin:20px auto;}
</style>
</head>
<body>
<div class="all">
    <h1>小乐扫雷大作战</h1>
    <form id="ctrl">
        <label>行(1~30)<input type="text" id="row_n" value="10" /></label><br />
        <label>列(1~30)<input type="text" id="col_n" value="10" /></label><br />
        <label>雷的比例(1~0.01)<input type="text" id="thunder_n" value="0.3" /></label><br />
        <input type="button" id="submit" value="提交" />
        <input type="reset" id="reset" value="重置" /><br />
        <label>提示消息<input type="text" id="msg" readonly="ture" /></label>
    </form>
    <div id="block"></div>
</div>
</body>
</html>
document.oncontextmenu=function ()
{
    return false;    //阻止默认事件
};
window.onload=function(){
        var oSubmit = document.getElementById("submit");
        //var oReset = document.getElementById("reset");
        //var oRow_n = document.getElementById("row_n");
        //var oCol_n = document.getElementById("col_n");
        //var oThunder_n = document.getElementById("thunder_n");
        var oMsg = document.getElementById("msg");
        oMsg.value = "请输入要挑战的雷阵!";
        oSubmit.onclick = init;

    function init(){
        var oSubmit = document.getElementById("submit");
        var oReset = document.getElementById("reset");
        var oRow_n = document.getElementById("row_n");
        var oCol_n = document.getElementById("col_n");
        var oThunder_n = document.getElementById("thunder_n");
        var oMsg = document.getElementById("msg");

        //参数设置
        var m = oRow_n.value;  //行
        var n = oCol_n.value;  //列
        var p = oThunder_n.value;
        var x = Math.floor(m*n*p);  //雷的数目
        //console.log(m,n,x);

        if(!(m<30&&m>=0&&n<30&&n>=0&&p>=0&&p<=1)){
            oMsg.value = "参数不合法";
        }else{
            oMsg.value = "参数设置成功";
            var oDiv = document.getElementById("block");
            oDiv.innerHTML = "";
            var array = new Array(m);

            //布局
            for(var j=0; j<m; j++){
                var oUl = document.createElement("ul");
                array[j] = new Array(n);
                for(var i=0; i<n; i++){
                    var oLi = document.createElement("li");
                    oUl.appendChild(oLi);
                    array[j][i] = [0,0,0]; //[是否是雷,标记状态,周围雷数]
                }
                oDiv.appendChild(oUl);
            }

            //初始化雷区
            for(var i=0; i<x; i++){
                var a = Math.floor(Math.random() * m);
                var b = Math.floor(Math.random() * n);
                if(array[a][b][0] == 0){
                    array[a][b][0] = 1;
                    valid(a-1,b-1);
                    valid(a-1,b);
                    valid(a-1,b+1);
                    valid(a,b-1);
                    valid(a,b+1);
                    valid(a+1,b-1);
                    valid(a+1,b);
                    valid(a+1,b+1);
                }else{
                    x++;
                }
            }

            //布雷
            for(var i=0; i<m; i++){
                for(var j=0; j<n; j++){
                    oLi = getBlock(i,j);
                    if(array[i][j][0] == 0){
                        oLi.innerHTML = array[i][j][2];
                    }else{
                        oLi.innerHTML = "#";
                        oLi.style.background = "red";
                    }
                    var oSpan = document.createElement("span");
                    oLi.appendChild(oSpan);
                }
            }

            //监听事件
            for(var i=0; i<m; i++){
                for(var j=0; j<n; j++){
                    var oSpan = getBlock(i,j).getElementsByTagName("span")[0];
                    oSpan._i = i;
                    oSpan._j = j;
                    function listen_1(){
                        if(array[this._i][this._j][1]==2) return false;
                        this.style.display = "none";
                        array[this._i][this._j][1] = 1;
                        check();
                        if(array[this._i][this._j][0]==1){
                            alert("game over");
                            oMsg.value = "抱歉,挑战失败";
                            var aSpan = oDiv.getElementsByTagName("span");
                            for(var m=0; m < aSpan.length; m++){
                                aSpan[m].style.display = "none";
                            }
                        }
                    }
                    function listen_2(){
                        if(array[this._i][this._j][1] == 0){
                            array[this._i][this._j][1] = 2;
                            this.style.backgroundColor = "red";
                            check();
                        }else{
                            array[this._i][this._j][1] = 0;
                            this.style.backgroundColor = "#eee";
                            check();
                        }
                    }
                    function check(){
                        console.log(array);
                        var f=1;
                        for(var i=0; i<m; i++){
                            for(var j=0; j<n; j++){
                                console.log(array[i][j]);
                                if(array[i][j][0]==0){
                                    if(array[i][j][1]!=1){
                                        f=0;
                                        break;
                                        break;
                                    }
                                }
                                if(array[i][j][0]==1){
                                    if(array[i][j][1]!=2){
                                        f=0;
                                        break;
                                        break;
                                    }
                                }
                            }
                        }
                        if(f==1){
                            alert("恭喜挑战成功");
                            oMsg.value = "恭喜挑战成功";
                        }
                    }
                    on(oSpan,"click",listen_1);
                    on(oSpan,"contextmenu",listen_2);

                }
            }
        }

        function valid(x,y){
            if(x>=0&&x<m&&y>=0&&y<n){
            array[x][y][2] ++;
            }
        }

    }
    function getBlock(m,n){
        var oDiv = document.getElementById("block");
        var aUl = oDiv.getElementsByTagName("ul");
        var ali = aUl[m].getElementsByTagName("li");
        var oLi = ali[n];
        return oLi;
    }

    function on(node,eventType,handler){
        node = typeof node == "string" ? document.getElementById(node) : node;
        if(document.all){
            node.attachEvent("on" + eventType, handler);
        }else{
            node.addEventListener(eventType, handler, false);
        }
    }

}

原生javascript扫雷游戏的更多相关文章

  1. 原生javascript开发仿微信打飞机小游戏

    今天闲来无事,于是就打算教一个初学javascript的女童鞋写点东西,因此为了兼顾趣味性与简易程度,果断想到了微信的打飞机小游戏.. 本来想用html5做的,但是毕竟人家才初学,连jquery都还不 ...

  2. 用原生javascript模拟经典FC游戏公路争霸

    #用原生javascript模拟经典FC游戏公路争霸 前几天看了园子里面的随笔 [原生javascript开发仿微信打飞机小游戏](http://www.cnblogs.com/Mr-Nobody/p ...

  3. Javascript 综合示例 网页扫雷游戏

    ---------------认定了的事情,只要是对的,干到底! ------------------------------------------------------------------- ...

  4. javascript+HTMl5游戏下载,开发一个都能月薪上万!舅服你

    HTML5时代已经到来许久了,你是否已经掌握了那么一点呢?今天小编给大家讲讲h5的折叠多设备.跨平台特性, 即用HTML5制作游戏.相比flash,HTML5更加灵活方便,随着浏览器技术的不断升级,H ...

  5. 原生JavaScript运动功能系列(二):缓冲运动

    匀速运动实现回顾 缓冲运动剖析 示例实现 方法提取 匀速运动实现回顾及缓冲运动剖析: 在这个系列的上一篇博客中原生JavaScript运动功能系列(一):运动功能剖析与匀速运动实现就运动的核心功能组成 ...

  6. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  7. 原生 Javascript 编写五子棋

    原文地址:原生 Javascript 编写五子棋 博客地址:http://www.extlight.com 一.背景 近一个月没写 Javascript 代码,有点生疏.正好浏览网页时弹出五子棋的游戏 ...

  8. 20 个使用原生 JavaScript 实现的 Web 项目

    20 个使用原生 JavaScript 实现的 Web 项目 20 vanilla JavaScript Web Projects https://github.com/learning-js-by- ...

  9. 原生javascript 实现 animate

    原生javascript 实现 animate //animate function getstyle(obj,name){ if(obj.currentStyle){ return obj.curr ...

随机推荐

  1. The initialization of the CRM authentication pipline execution has failed

    由于公司电路切换,昨天晚上不得不将服务器暂时关闭.早上重新开机时,发现开发环境连不上了.这可把我急坏了,大家可都等着开发呢. 于是查看服务器错误消息,发现时数据库连接连接不上. The initial ...

  2. Python实现LDAP用户名密码验证

    网上借鉴了不少东西,下面是python代码,备份后用. 思路,因为每个用户的组都不一样,这样就导致了dn不一致的情况, 据需要先根据用户名获取该用户的dn,然后再bind用户名和密码进行验证. 反正是 ...

  3. discuz 取消门户首页url中的portal.php

    这几天准备用discuz搭建一个素食网站,一切就绪之后,访问discuz的门户时总是带着portal.php,可能是职业毛病,在url中总是带着,感觉太碍眼了,并且discuz就是搜索引擎收录一直抵制 ...

  4. 3分钟教你做一个iphone手机浏览器

    3分钟教你做一个iphone手机浏览器 第一步:新建一个Single View工程: 第二步:新建好工程,关闭arc. 第三步:拖放一个Text Field 一个UIButton 和一个 UIWebV ...

  5. Make Things Move -- Javascript html5版(二)实现最基本的Sprite类和stage管理对象

    现在这几篇写的都是比较基础的东西,有过相应开发经验的朋友可直接忽略啦. 计算机模拟的动画都是由很多静态的一连串影像(sprite)在一定帧率(fps)内逐帧播放出来的. 对于js来说,我们可以用提供的 ...

  6. asp.net 上传文件

    文件上传实例 公司产品中一直是采用 flash 实现文件上传功能,但用户的需求多了以后遇到了越来越多难以解决的问题,最后试着用硕正提供的freeform.小型页面控件来解决. 硕正文件上传的实现途径有 ...

  7. HNCU1323:算法2-1:集合union (线性表)

    http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1323 题目描述 假设利用两个线性表LA和 ...

  8. CF 327E(Axis Walking-状态压缩Dp-lowbit的使用)

    E. Axis Walking time limit per test 3 seconds memory limit per test 512 megabytes input standard inp ...

  9. linux下如何使用USB存储设备

    如何在Linux环境中使用USB接口的 存储 设备?这是各大电脑论坛上出现得比较多的一个问题,同此可见这也是摆在许多电脑玩家面前的一道难题. 本文就为您提供一套完美的解决方案,通过下面的方法,您仅可以 ...

  10. android openGl视频

    链接如下:http://download.csdn.net/detail/jltxgcy/5667345