zoukankan      html  css  js  c++  java
  • javascript sudoku 生成

    <html>
    <body>
        <input type="text" style="border-style: none" />
        <input type="button" id="refreshButton" value="Get New SuDoKu" onclick="onLoadTable()" />
        <table style="border-color: Red" border="1px" id="mainTable">
        </table>
    
        <script language="javascript" type="text/javascript">
    var sudokuArray = [[],[],[],[],[],[],[],[],[],[]];
    
    function onLoadTable()
    {
        do
        {
            sudokuArray = getNewArray();
            sudokuArray = getSudokuArray(sudokuArray);
        }
        while(!checkArray(sudokuArray))
        document.getElementById("result").innerHTML=checkArray(sudokuArray); 
        sudokuArray = setGameArray(sudokuArray);
        var table = document.getElementById("mainTable");
        table.removeChild(table.firstChild);
        for(var i=0;i<9;i++)
        {
            table.insertRow(i);
            for(var j=0;j<9;j++)
            {
    	        table.rows[i].insertCell(j);
    	        table.rows[i].cells[j].innerHTML = setNumberInTable(sudokuArray[i][j]);//Math.round(Math.random()*8+1);
                setStyle(i,j,table.rows[i].cells[j]);
            }
        }
    }
    
    function setNumberInTable(num)
    {
        if(isNaN(num))
        {
            return "<input type='text' value='' maxlength='1' size='1'/>";
        }   
        else
        {
            return "<input type='text' value='"+num+"' style='background-color:red' maxlength='1' size='1'/>";
        }
    
    }
    
    function getSudokuArray(filledArray)
    {
       var failed = false;
       for(var i=0;i<9;i++)
       {
    		for(var j=0;j<9;j++)
    		{
    		    var tempArray = getAvaildableArray(i, j, filledArray);
    		    if(tempArray.length > 0)
    		    {
    		        filledArray[i][j] = tempArray[Math.round(Math.random()*(tempArray.length-1))];
    		    }
    		}
    	}
    	return filledArray;
    }
    
    function checkArray(array)
    {
       for(var i=0;i<9;i++)
       {
    		for(var j=0;j<9;j++)
    		{
    		    if(array[i][j] == undefined||isNaN(array[i][j]))
    		    {
    		        return false;
    		    }
    		}
        }
        return true;
    }
    
    function getAvaildableArray(rowIndex, cellIndex, array)
    {
        var availdableArray = [1,2,3,4,5,6,7,8,9];
        for(var n=0;n<9;n++)
        {
            if(!isNaN(array[rowIndex][n]) && array[rowIndex][n] != undefined && n!=cellIndex)
            {
                availdableArray[array[rowIndex][n]-1] = NaN;
            }
            if(!isNaN(array[n][cellIndex]) && array[n][cellIndex] != undefined && n!=rowIndex)
            {
                availdableArray[array[n][cellIndex]-1] = NaN;
            }
        }
        var rowStartIndex = Math.floor(rowIndex/3)*3;
        var cellStartIndex = Math.floor(cellIndex/3)*3;
        for(var x=rowStartIndex;x<rowStartIndex+3;x++)
        {
            for(var y=cellStartIndex;y<cellStartIndex+3;y++)
            {
                //alert(x.toString()+" "+ y.toString()+ " " +array[x][y]);
                if((!isNaN(array[x][y])||array[x][y] != undefined) && !(x==rowIndex&&y==cellIndex))
                {
                    availdableArray[array[x][y]-1] = NaN;
                }
            }
        }
        var returnArray = [];
        for(var m=0;m<9;m++)
        {
            if(!isNaN(availdableArray[m]))
            {
                returnArray.push(availdableArray[m]);
            }
        }
        return returnArray;
    }
    
    function setGameArray(array)
    {
        for(var i=0;i<9;i++)
        {
    	    for(var j=0;j<9;j++)
    		{
    		    if(getAvaildableArray(i,j,array).length==1)
    		    {
    		        array[i][j] = NaN;
    		    }
    		}
        }
        return array;
    }
    
    function getNewArray()
    {
        return [[],[],[],[],[],[],[],[],[]];
    }
    
    function setStyle(rowIndex,cellIndex,cell)
    {
        cell.height="20";
        cell.width="20";
        if(cellIndex%3==2)
        {
    	    cell.style.borderRightColor="red";
        }
        if(cellIndex%3==0)
        {
    	    cell.style.borderLeftColor="red";
        }
        if(rowIndex%3==2)
        {
    	    cell.style.borderBottomColor="red";
        }
        if(rowIndex%3==0)
        {
    	    cell.style.borderTopColor="red";
        }
    }
        </script>
        <span id="result">Hello</span>
    </body>
    </html>
    
    

    Hello

  • 相关阅读:
    敏捷实践-学习实践资料汇总
    从数据仓库到数据湖—浅谈数据架构演进
    JVM知识点汇总备忘
    Protobuf的使用和原理
    kafka数据定时导入hive便于后续做数据清洗
    Mybatis Mapper接口动态代理实现原理及二次开发
    软考论文-写作大纲-备考思路总结
    css3另一个属性写法
    css3动画效果
    jquery点击鼠标后关闭图片
  • 原文地址:https://www.cnblogs.com/yangqianming/p/1696913.html
Copyright © 2011-2022 走看看