zoukankan      html  css  js  c++  java
  • 原生javascript扫雷游戏

    <!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);
            }
        }
        
    
    }
  • 相关阅读:
    软件定义网络实验4:Open vSwitch 实验——Mininet 中使用 OVS 命令(实验过程及结果记录)
    软件定义网络实验3:测量路径的损耗率 (实验过程及结果记录)
    第一次个人编程作业
    软件定义网络实验2:Mininet拓扑的命令脚本生成(实验过程及结果记录)
    软件定义网络实验1:Mininet源码安装和可视化拓扑工具(实验过程及结果记录)
    第一次博客作业
    第07组(69) 需求分析报告
    第七组(69)团队展示
    第三次作业
    结对编程作业
  • 原文地址:https://www.cnblogs.com/liulele/p/5884417.html
Copyright © 2011-2022 走看看