jq实现一个数独项目

一个初学jq的初学者求指导!!!

jquery部分

// JavaScript Document

$(document).ready(function() {	
	var dif=prompt("请输入您的难度系数 1.地狱 2.困难 3.凡人 4.弱鸡");
	switch(dif){
		case "1":dif =  parseInt(Math.random()*5+65); break;
		case "2":dif =  parseInt(Math.random()*5+55); break;
		case "3":dif =  parseInt(Math.random()*5+45); break;
		case "4":dif =  parseInt(Math.random()*5+35); break;
		default:dif = parseInt(Math.random()*5+25);
	}//该方法用于生成游戏的难度系统
	var a=new Array(81);//首先生成一个length=81的数组
	function selArr(a,n){
		var x=new Array();
		var y=new Array();
		var z=new Array();
		var b=new Array();
		var bingo=new Array();
		var x1=[1,2,3,4,5,6,7,8,9];
		var y1=[1,2,3,4,5,6,7,8,9];
		var z1=[1,2,3,4,5,6,7,8,9];
		var xi=0;
		var yi=0;
		var	zi=0;
		var bi=0;
		var bingoi=0;
		var px=parseInt(n/9);
		var py=n-parseInt(n/9)*9;
		var gy=parseInt(px/3);
		var gx=parseInt(py/3);
		var pz=gx*3+gy*27;
		for(var i=0;i<9;i++){
			if(a[px*9+i]!=""){
				x[xi]=parseInt(a[px*9+i]);
				xi++;			
			}
		 }
		for(var i2=0;i2<x.length;i2++){
			for(var i1=0;i1<x1.length;i1++){
				if(x[i2]==x1[i1]){
					x1.splice(i1,1);
				}	
			}
		}
			//alert(x1);
		//横
		
		for(var j=0;j<9;j++){
			if(a[py+j*9]!=""){
				y[yi]=parseInt(a[py+j*9]);
				yi++;			
			}
		 }
		for(var j2=0;j2<y.length;j2++){
			for(var j1=0;j1<y1.length;j1++){
				if(y[j2]==y1[j1]){
					y1.splice(j1,1);
				}	
			}
		}
			//alert(y1);
		//竖
		
		for(var h0=0;h0<3;h0++){
			for(var h1=0;h1<3;h1++){
			if(a[pz+h0+h1*9]!=""){
				z[zi]=parseInt(a[pz+h0+h1*9]);
				zi++;			
				}
			}
		 }
		for(var h2=0;h2<z.length;h2++){
			for(var h3=0;h3<z1.length;h3++){
				if(z[h2]==z1[h3]){
					z1.splice(h3,1);
				}	
			}
		}
			//alert(z1);
		//格
		
		 for(var q=0;q<x1.length;q++){
			for(var q0=0;q0<y1.length;q0++){
				if(x1[q]==y1[q0]){
					b[bi]=y1[q0];
					bi++;
					}	
			}
		}
		for(var q1=0;q1<b.length;q1++){
			for(var q2=0;q2<z1.length;q2++){
				if(b[q1]==z1[q2]){
					bingo[bingoi]=z1[q2];
					bingoi++;
					}	
			}
		}
		//alert(bingo);

		return bingo;
	}
	//根据数独的规则查找一个小格里可以填写数字的数组
	function create(a){
		for(var i=0;i<3;i++){
			for(var j=0;j<3;j++){
				for(var h=0;h<3;h++){
					a[(i*30)+(j*9)+h]=ran(selArr(a,((i*30)+(j*9)+h)));
				}
			}
		}
		out:
		for(var j=0;j<81;j++){	
			if(a[j]==undefined){
				var a1=new Array();
				var b=new Array();
				var j1=0;
				var flag=true;
				do{
				a1=and(selArr(a,j),b);
				b[j1]=ran(a1);
				if(b[j1]!=undefined){
					a[j]=b[j1];
				}else{
					break out;
				}
				j1++;
				flag=success(a);
				}while(flag);
			}
		}
	}
	//该方法为该数独的核心算法用于生成一个完整的数独解
	function succeed(a){
		for(var i=0;i<81;i++){
			if(a[i]==undefined){
				return true;
			}
		}
		return false;
	}
	//该方法用于判定数独是否生成成功
	function and(a,b){
		for(var z=0;z<a.length;z++){
			for(var z1=0;z1<b.length;z1++){
				if(a[z]==b[z1]){
					a.splice(z,1);
				}
			}
		}
		return a;
	}
	//该方法是求两个数组的并集的算法
	function success(a){
		for(var i=0;i<81;i++){
			if(a[i]==undefined){
				if(selArr(a,i).length==0){
					return true;
				}
			}
		}
		return false;
	}
	//该方法和create()方法配合使用
	function ran(n){
		var n1=new Array();
		n1=n;
		return n1[parseInt(Math.random()*(n.length))];
	}
	//该方法和selArr()方法合用用于随机选取一个数组里的一个元素
	while(succeed(a)){
		var a=new Array();
		create(a);	
	}
	//因为create()方法会有失败的数独集所以通过该循环来过滤
	for(var j=0;j<81;j++){
		$("#a"+j).val(a[j]);
	}	
	//将数独解集先赋给事先写好的表格中
	for(var h=0;h<dif;h++){
		$("#a"+parseInt(Math.random()*82+1)).val("");
	}
	//根据难度系统在删去格子中元素值;
	//从而生成一个数独游戏
	
	
	
});
	

	
	

html部分
<!doctype html>
<html>
<head>
<script src="../js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="../js/action.js"></script>
<link type="text/css" href="../css/style.css" rel="stylesheet">
<meta charset="UTF-8">
<title>数独</title>
</head>

<body>
<center>
<div id="d">
	<h2>数独游戏</h2>
	<table width="450" border="1">
  <tbody>
    <tr>
      <td><input class="m1" id="a0"></td>
      <td><input class="m1" id="a1"></td>
      <td><input class="m1" id="a2"></td>
      <td><input class="m" id="a3"></td>
      <td><input class="m" id="a4"></td>
      <td><input class="m" id="a5"></td>
      <td><input class="m1" id="a6"></td>
      <td><input class="m1" id="a7"></td>
      <td><input class="m1" id="a8"></td>
    </tr>
    <tr>
      <td><input class="m1" id="a9"></td>
      <td><input class="m1" id="a10"></td>
      <td><input class="m1" id="a11"></td>
      <td><input class="m" id="a12"></td>
      <td><input class="m" id="a13"></td>
      <td><input class="m" id="a14"></td>
      <td><input class="m1" id="a15"></td>
      <td><input class="m1" id="a16"></td>
      <td><input class="m1" id="a17"></td>
    </tr>
 	<tr>
      <td><input class="m1" id="a18"></td>
      <td><input class="m1" id="a19"></td>
      <td><input class="m1" id="a20"></td>
      <td><input class="m" id="a21"></td>
      <td><input class="m" id="a22"></td>
      <td><input class="m" id="a23"></td>
      <td><input class="m1" id="a24"></td>
      <td><input class="m1" id="a25"></td>
      <td><input class="m1" id="a26"></td>
    </tr>
     <tr>
      <td><input class="m" id="a27"></td>
      <td><input class="m" id="a28"></td>
      <td><input class="m" id="a29"></td>
      <td><input class="m1" id="a30"></td>
      <td><input class="m1" id="a31"></td>
      <td><input class="m1" id="a32"></td>
      <td><input class="m" id="a33"></td>
      <td><input class="m" id="a34"></td>
      <td><input class="m" id="a35"></td>
    </tr>
     <tr>
      <td><input class="m" id="a36"></td>
      <td><input class="m" id="a37"></td>
      <td><input class="m" id="a38"></td>
      <td><input class="m1" id="a39"></td>
      <td><input class="m1" id="a40"></td>
      <td><input class="m1" id="a41"></td>
      <td><input class="m" id="a42"></td>
      <td><input class="m" id="a43"></td>
      <td><input class="m" id="a44"></td>
    </tr>
     <tr>
      <td><input class="m" id="a45"></td>
      <td><input class="m" id="a46"></td>
      <td><input class="m" id="a47"></td>
      <td><input class="m1" id="a48"></td>
      <td><input class="m1" id="a49"></td>
      <td><input class="m1" id="a50"></td>
      <td><input class="m" id="a51"></td>
      <td><input class="m" id="a52"></td>
      <td><input class="m" id="a53"></td>
    </tr>
     <tr>
      <td><input class="m1" id="a54"></td>
      <td><input class="m1" id="a55"></td>
      <td><input class="m1" id="a56"></td>
      <td><input class="m" id="a57"></td>
      <td><input class="m" id="a58"></td>
      <td><input class="m" id="a59"></td>
      <td><input class="m1" id="a60"></td>
      <td><input class="m1" id="a61"></td>
      <td><input class="m1" id="a62"></td>
    </tr>
     <tr>
      <td><input class="m1" id="a63"></td>
      <td><input class="m1" id="a64"></td>
      <td><input class="m1" id="a65"></td>
      <td><input class="m" id="a66"></td>
      <td><input class="m" id="a67"></td>
      <td><input class="m" id="a68"></td>
      <td><input class="m1" id="a69"></td>
      <td><input class="m1" id="a70"></td>
      <td><input class="m1" id="a71"></td>
    </tr>
    <tr>
      <td><input class="m1" id="a72"></td>
      <td><input class="m1" id="a73"></td>
      <td><input class="m1" id="a74"></td>
      <td><input class="m" id="a75"></td>
      <td><input class="m" id="a76"></td>
      <td><input class="m" id="a77"></td>
      <td><input class="m1" id="a78"></td>
      <td><input class="m1" id="a79"></td>
      <td><input class="m1" id="a80"></td>
    </tr>
  </tbody>
</table>
</div>
<div id="d0">
	
</div>
</center>
</body>
</html>

css部分

@charset "UTF-8";

td{
	height:40px;
	width:40px;
	}

#d{
	height:600px;
	width:500px;
	}

.m{
	height:40px;
	width:40px;
	font-size:15px;
	text-align:center;
	}
	
.m1{
	height:40px;
	width:40px;
	font-size:15px;
	text-align:center;
	background-color:#F5D49E;
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值