Js版连连看V1.0

<html>
<head>
<style type="text/css">
input {width:22px;height:22px;}
</style>
</head>
<body>
<script type="text/javascript">
//Cody by:dnawo

var rows = 8;//行
var cols = 8;//列
var type = 4;//种类
var arrPoint = [];//全部坐标点
var selPoint = [null,null];//选中坐标
var count = 0;//已选中的点总数

//生成随机数
var rnd = [];
for(var i=1;i<=(rows-2)*(cols-2)/2;i++)
{
    var r = parseInt(Math.random()*type+1);
    rnd[rnd.length]=rnd[rnd.length+1]=r;
}
//生成界面
for(var i=0;i<rows;i++)
{
    arrPoint[i] = [];
    for(var j=0;j<cols;j++)
    {
        var o = document.createElement("input");
        //最外一层不显示
        if(i>0 && i<rows-1 && j>0 && j<cols-1)
        {
            var k = parseInt(Math.random()*rnd.length);
            var value = rnd[k];
            rnd.splice(k,1);
            
            o.type = "button";
            o.setAttribute("value",value);
            o.setAttribute("v",value);
            o.setAttribute("onclick",function(){savePoint(this);});
        }
        else
        {
            o.type = "hidden";
            o.setAttribute("value","");
            o.setAttribute("v",null);
        }
        o.setAttribute("x",i);
        o.setAttribute("y",j);
        arrPoint[i][j] = o;
        document.body.appendChild(arrPoint[i][j]);
    }
    document.write("<br/>");
}

//存储选择对象
function savePoint(o)
{
    if(o.v != null)
    {
        if(selPoint[0]!=null && selPoint[1]!=null)
        {
            selPoint[0] = null;
            selPoint[1] = null;
        }
        
        if(selPoint[0] == null)
        {
            selPoint[0] = o;
        }
        else
        {
            //选择同一个对象,本次选择取消
            if(selPoint[0] == o)
            {
                selPoint[0] = null;
                selPoint[1] = null;
            }
            else
            {
                selPoint[1] = o;
                //值相同则进行连线
                if(selPoint[0].v == selPoint[1].v)
                {
                    if(!isLine(selPoint[0],selPoint[1]))
                    {
                        var arrTmp1=[],arrTmp2=[];
                        
                        if(selPoint[0].x != selPoint[1].x)
                        {
                            //selPoint[0]横左
                            for(var i=selPoint[0].y-1;i>=0;i--){if(arrPoint[selPoint[0].x][i].v == null){arrTmp1[arrTmp1.length]=arrPoint[selPoint[0].x][i]}else{break;}};
                            //selPoint[0]横右
                            for(var i=selPoint[0].y+1;i<cols;i++){if(arrPoint[selPoint[0].x][i].v == null){arrTmp1[arrTmp1.length]=arrPoint[selPoint[0].x][i]}else{break;}};
                            //一折
                            arrTmp1[arrTmp1.length] = arrPoint[selPoint[0].x][selPoint[0].y];
                            //selPoint[1]横左
                            for(var i=selPoint[1].y-1;i>=0;i--){if(arrPoint[selPoint[1].x][i].v == null){arrTmp2[arrTmp2.length]=arrPoint[selPoint[1].x][i]}else{break;}};
                            //selPoint[1]横右
                            for(var i=selPoint[1].y+1;i<cols;i++){if(arrPoint[selPoint[1].x][i].v == null){arrTmp2[arrTmp2.length]=arrPoint[selPoint[1].x][i]}else{break;}};
                            //一折
                            arrTmp2[arrTmp2.length] = arrPoint[selPoint[1].x][selPoint[1].y];
                            for(var i=0;i<arrTmp1.length;i++)
                            {
                                for(var j=0;j<arrTmp2.length;j++)
                                {
                                    if(arrTmp1[i].y == arrTmp2[j].y)
                                    {
                                        //连线
                                        if(isLine(arrTmp1[i],arrTmp2[j]))
                                        {
                                            selPoint[0].value = "";
                                            selPoint[0].v = null;
                                            selPoint[1].value = "";
                                            selPoint[1].v = null;
                                            count +=2;
                                            if(count == (rows-2)*(cols-2))
                                            {
                                                alert("恭喜你,过关了!");
                                            }
                                            return;
                                        }
                                    }
                                }
                            }
                        }
                        
                        arrTmp1=[];arrTmp2=[];
                        
                        if(selPoint[0].y != selPoint[1].y)
                        {
                            //selPoint[0]竖上
                            for(var i=selPoint[0].x-1;i>=0;i--){if(arrPoint[i][selPoint[0].y].v == null){arrTmp1[arrTmp1.length]=arrPoint[i][selPoint[0].y]}else{break;}};
                            //selPoint[0]竖下
                            for(var i=selPoint[0].x+1;i<rows;i++){if(arrPoint[i][selPoint[0].y].v == null){arrTmp1[arrTmp1.length]=arrPoint[i][selPoint[0].y]}else{break;}};
                            //一折
                            arrTmp1[arrTmp1.length] = arrPoint[selPoint[0].x][selPoint[0].y];
                            //selPoint[1]竖上
                            for(var i=selPoint[1].x-1;i>=0;i--){if(arrPoint[i][selPoint[1].y].v == null){arrTmp2[arrTmp2.length]=arrPoint[i][selPoint[1].y]}else{break;}};
                            //selPoint[1]竖下
                            for(var i=selPoint[1].x+1;i<rows;i++){if(arrPoint[i][selPoint[1].y].v == null){arrTmp2[arrTmp2.length]=arrPoint[i][selPoint[1].y]}else{break;}};
                            //一折
                            arrTmp2[arrTmp2.length] = arrPoint[selPoint[1].x][selPoint[1].y];
                            for(var i=0;i<arrTmp1.length;i++)
                            {
                                for(var j=0;j<arrTmp2.length;j++)
                                {
                                    if(arrTmp1[i].x == arrTmp2[j].x)
                                    {
                                        //连线
                                        if(isLine(arrTmp1[i],arrTmp2[j]))
                                        {
                                            selPoint[0].value = "";
                                            selPoint[0].v = null;
                                            selPoint[1].value = "";
                                            selPoint[1].v = null;
                                            count +=2;
                                            if(count == (rows-2)*(cols-2))
                                            {
                                                alert("恭喜你,过关了!");
                                            }
                                            return;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        selPoint[0].value = "";
                        selPoint[0].v = null;
                        selPoint[1].value = "";
                        selPoint[1].v = null;
                        count +=2;
                        if(count == (rows-2)*(cols-2))
                        {
                            alert("恭喜你,过关了!");
                        }
                        return;
                    }
                }
            }
        }
    }
}

//判断是否可直线相连
function isLine(p1,p2)
{
    var tmpPoint = null;
    
    //水平搜索
    if(p1.x == p2.x)
    {
        tmpPoint = p1;
        if(tmpPoint.y>p2.y)
        {
            p1 = p2;
            p2 = tmpPoint;
        }
        
        for(var i=p1.y+1;i<p2.y;i++)
        {
            if(arrPoint[p1.x][i].v != null)return false;
        }
        return true;
    }
    //垂直搜索
    else if(p1.y == p2.y)
    {
        tmpPoint = p1;
        if(tmpPoint.x>p2.x)
        {
            p1 = p2;
            p2 = tmpPoint;
        }
        
        for(var i=p1.x+1;i<p2.x;i++)
        {
            if(arrPoint[i][p1.y].v != null)return false;
        }
        return true;
    }
    else
    {
        return false;
    }
}
</script>
</body>
</html>


上一篇: (function (){})()语句的优势
下一篇: Js版连连看V1.1
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 0 | 引用: 0 | 查看次数: 4592
发表评论
登录后再发表评论!