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 相关文章推荐
IE8对JS通过属性和数组遍历解析不一样的地方探讨
May 06 Javascript
JS实现的倒计时效果实例(2则实例)
Dec 23 Javascript
bootstrap学习笔记之初识bootstrap
Jun 21 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 Javascript
Bootstrap按钮组简单实现代码
Mar 06 Javascript
AngularJS 中的数据源的循环输出
Oct 12 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
Oct 31 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
Jan 25 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
Sep 19 Javascript
Vue实现数据表格合并列rowspan效果
Nov 30 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
Feb 27 Javascript
vue中使用v-for时为什么不能用index作为key
Apr 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
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
2016/01/05 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
2016/12/08 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
python实现拼图小游戏
2020/02/22 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
学期自我鉴定范文
2013/10/01 职场文书
班组长的岗位职责
2013/12/09 职场文书
网上签名寄语活动留言
2014/01/18 职场文书
演讲稿格式范文
2014/05/19 职场文书
房屋租赁协议书
2014/10/18 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
使用Python解决图表与画布的间距问题
2022/04/11 Python
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python