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 相关文章推荐
js 加载时自动调整图片大小
May 28 Javascript
jquery 插件学习(三)
Aug 06 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
Feb 17 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
Feb 07 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
Jan 21 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
Jun 25 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
Oct 14 Javascript
小程序实现选择题选择效果
Nov 04 Javascript
js对象数组和对象的使用实例详解
Aug 27 Javascript
小程序跳转H5页面的方法步骤
Mar 06 Javascript
Jquery cookie插件实现原理代码解析
Aug 04 jQuery
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
function.inc.php超越php
2006/12/09 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
PHP递归统计系统中代码行数
2019/09/19 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
js动态为代码着色显示行号
2013/05/29 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
Python中__new__与__init__方法的区别详解
2015/05/04 Python
python 网络爬虫初级实现代码
2016/02/27 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
幼儿运动会邀请函
2014/01/17 职场文书
小学中秋节活动方案
2014/02/06 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
电子商务实训报告总结
2014/11/05 职场文书
思想道德自我评价2015
2015/03/09 职场文书
郭明义观后感
2015/06/08 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书