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操纵Cookie实现购物车程序
Feb 15 Javascript
js 一个关于图片onload加载的事
Nov 10 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
Jul 05 Javascript
JSON字符串转JSON对象
Jul 31 Javascript
jquery控制显示服务器生成的图片流
Aug 04 Javascript
js数组如何添加json数据及js数组与json的区别
Oct 27 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
Nov 02 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
Dec 16 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
Jul 23 Javascript
详解微信小程序开发之formId使用(模板消息)
Aug 27 Javascript
Vue 组件的挂载与父子组件的传值实例
Sep 02 Javascript
JavaScript实现五子棋小游戏
Oct 26 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
php5新改动之短标记启用方法
2008/09/11 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
js模拟点击事件实现代码
2012/11/06 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
微信中一些常用的js方法汇总
2015/03/12 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
Vuejs实现带样式的单文件组件新方法
2017/05/02 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
会议邀请函范文
2014/01/09 职场文书
房地产开发计划书
2014/01/10 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
幼儿生日活动方案
2014/08/27 职场文书
社区助残日活动总结
2014/08/29 职场文书
产品委托授权书范本
2014/09/16 职场文书
郭明义观后感
2015/06/08 职场文书
Linux中如何安装并部署Redis
2022/04/18 Servers