jQuery制作可自定义大小的拼图游戏


Posted in Javascript onMarch 30, 2015

我把大小限制在了3-10之间,实在闲的,或者有自虐倾向的可以试试改下。。
本来准备弄图片上去的,还没弄..

pintu.html

<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>拼图</title>
<style type="text/css">
#pt_main{
  margin:0 auto;
  border:2px solid #000;}
#menu{
  text-align:center;}
#pt_main div{
  padding:0px;
  margin:0px;
  float:left;
  line-height:200px;
  font-size:100px;
  text-align:center;}
#pt_main div:hover{
  cursor:pointer;}
.hui{
  background:#CCC;}
</style>
 
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
//div边框宽度
var border_w=2;
//div大小
var size=50;
//是否过关
var st=false;
//背景图片地址(功能还没写)
var imgurl='';
//灰色块的位置
var hui=0;
//游戏宽高
var width=3;
var height=3;
$(function(){
  init();
});
//判断两个数字能不能交换
function ut_jh(a,b){
  if(Math.abs(a-b)==width){
    return true;
  }
  if(Math.abs(a-b)==1&& ut_line(a,b,width) ){
    return true;
  }
  return false;
}
//判断两个数字是否在同一行
function ut_line(a,b,width){
  if(parseInt(a/width)==parseInt(b/width)){
    return true;
  }else{
    return false;  
  }
}
//生成可交换的集合(可与灰色块交换的集合)
function ut_sc(a){
  //最多为4个
  var li=new Array();
  var i=0;
  if(a-width>=0){
    li[i++]=a-width;
  }
  if(a+width<=width*height-1){
    li[i++]=a+width;  
  }
  if(ut_line(a,a-1,width) && a-1>=0){
    li[i++]=a-1;  
  }
  if(ut_line(a,a+1,width) && a+1<=width*height-1){
    li[i++]=a+1;  
  }
  //alert(a+'-length:'+li.length)
  return li;
}
//块的点击事件
function pt_click(){
  if(!st){
    return false;
  }
  //点击块的索引
  var index=get().index($(this));
   
  if(ut_jh(hui,index)){
    jh(hui,index);
     
    //判断是否过关
    pd();
  }
   
   
}
//两块交换
function jh(hui_,index_){
    //alert(hui+1+","+(index_+1));
    var list=get();//所有块
    var h=list.eq(hui_);//灰色块
    var d=list.eq(index_);//点击的块
     
    //交换样式
    h.removeClass();
    d.addClass('hui');
    h.html(d.html());
    d.html('');
    hui=index_;
     
    //交换各自属性
    tg=h.attr('tg');
    h.attr('tg',d.attr('tg'));
    d.attr('tg',tg);
}
 
function init(){
  //不能太小...
  if(width<3||height<3){
    return false;  
  }
  hui=width*height-1;
  var pp=$("#pt_main");
  pp.html('');
  //创建并初始化
  var k=width*size+border_w*width*2;
  var g=height*size+border_w*height*2;
  pp.css({'width':k,'height':g});
  for(i=0;i<width*height;i++){
    var n=$("<div>"+(i+1)+"</div>");  
    n.css({'width':size,
      'height':size,
      border:border_w+'px solid #000',
      lineHeight:size+'px',
      fontSize:parseInt(size/3)+'px'
    });
    if(imgurl!=''){
     
    }
    pp.append(n);
    //alert(i)
     
  }
  get().last().html('');
  get().last().addClass('hui');
  get().on('click',pt_click);
   
  //为每个块附加属性,记录当前的值
  $("#pt_main div").each(function(index, element) {
    $(element).attr('tg',index);
  });
   
   
  dl();
  st=true;
}
//判断是否通过(当每个块的值与自身的下标对应)
function pd(){
  var b=true;
  get().each(function(index, element) {
    if($(element).attr('tg')!=index){
      b=false;
      return false;
    }
     
  });
  if(b){
    st=false;
    alert("恭喜过关!");
    return true;
  }else{
    return false;
  }
}
//获取集合
function get(){
  return $("#pt_main div");
}
//打乱
function dl(){
  //打乱次数
  var count=width*width*width;
   
  for(i =0;i<count;i++){
    //可交换集合
    var li=ut_sc(hui);
    var num=parseInt((li.length)*Math.random());
    jh(hui,li[num]);
  }
   
}
//初始化按钮的点击事件
function csh(){
  var dxv=$('#dx').val();
  if(!parseInt(dxv)){
    alert('请输入3-10之间的数字');
    $('#dx').val('');
    return false;
  }
  var v=parseInt(dxv);
  if(v<3||v>10){
    alert('请输入3-10之间的数字');
    $('#dx').val('');
    return false;
  }
  width=v;
  height=v;
  init();
}
</script>
</head>
 
<body>
<div id='menu'>
  大小:<input id='dx' style="text-align:center;width:40px;"/>
  <button onclick="csh()">初始化</button>
  <button onclick="init()">刷新</button>
</div>
<div id="pt_main">
 
</div>
 
</body>
</html>

以上就是本文给大家分享的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JavaScript网页制作特殊效果用随机数
May 22 Javascript
jQuery 定时局部刷新(setInterval)
Nov 19 Javascript
基于jquery实现ajax无刷新评论
Aug 19 Javascript
jquery事件绑定解绑机制源码解析
Sep 19 Javascript
AngularJS中的DOM操作用法分析
Nov 04 Javascript
浅谈EasyUI常用控件的禁用方法
Nov 09 Javascript
谈谈因Vue.js引发关于getter和setter的思考
Dec 02 Javascript
Mongoose学习全面理解(推荐)
Jan 21 Javascript
BetterScroll 在移动端滚动场景的应用
Sep 18 Javascript
详解Vue的组件中data选项为什么必须是函数
Aug 17 Javascript
原生JavaScript实现五子棋游戏
Nov 09 Javascript
echarts浮动显示单位的实现方法示例
Dec 04 Javascript
JS实现向表格中动态添加行的方法
Mar 30 #Javascript
JS实现向表格行添加新单元格的方法
Mar 30 #Javascript
JS实现控制表格行文本对齐的方法
Mar 30 #Javascript
JS实现控制表格行内容垂直对齐的方法
Mar 30 #Javascript
JS实现控制表格内指定单元格内容对齐的方法
Mar 30 #Javascript
JS实现控制表格单元格垂直对齐的方法
Mar 30 #Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 #Javascript
You might like
第七节--类的静态成员
2006/11/16 PHP
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
php Hex RGB颜色值互换的使用
2013/05/10 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
PHP递归算法的简单实例
2019/02/28 PHP
Prototype Hash对象 学习
2009/07/19 Javascript
YUI的Tab切换实现代码
2010/04/11 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
2017/10/20 jQuery
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
使用Python中PDB模块中的命令来调试Python代码的教程
2015/03/30 Python
python3+mysql查询数据并通过邮件群发excel附件
2018/02/24 Python
python 对象和json互相转换方法
2018/03/22 Python
浅谈Python协程
2020/06/17 Python
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
物流专业毕业生推荐信范文
2013/11/18 职场文书
音乐学个人的自荐书范文
2013/11/26 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
债务纠纷代理词
2015/05/25 职场文书
运动员入场词
2015/07/18 职场文书
Python进程间的通信之语法学习
2022/04/11 Python
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL