`
enix2212
  • 浏览: 25387 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

[javascript]9宫格拖拽拼图游戏 puzzle

阅读更多



1.跨浏览器,主流浏览器都可以运行
2.纯javascript开发。
3.配置实用方便。
4.二次开发简单,易用。


传送门 在线试玩

成品预览,见附近



  用一张图片用坐标的方式生成拼图单元格,类似css sprite。大致思路是,每个单元格有对应的两个索引,由数据驱动显示。创建实例时吧0-9乱序排列,每个单元格对应两个索引,一个是真实所在位置的索引,一个是记录现在位置的索引。拖动图片的时调整记录现在位置的索引,去对比原始数组如果值相等,那么就可以确定拼图完成。
1.乱序排列[0-9]的数组生成一个新数组,来产生拼图单元格的排序。为了避免生成不符合需求的数组,比较然后递归。

indicator.fn.unordered = function (array) {  //乱序排列
      array=array || [0,1,2,3,4,5,6,7,8,9];
      if (({}).toString.call(array).indexOf('Array') === -1) return;
      var arr = [], value = array.toString();
      arr = array.sort(function () {
         return Math.random() > 0.5 ? -1 : 1;
     });
     (arr.toString() === value) && arguments.callee(array);
     return arr;
};




2.主要难点在于拖拽时实时去检测现在单元格与其他单元格的位置关系,判断拖动的单元格是不是进入其他单元格而不是在自己的占位单元格。如果不符合要求,则把拖拽元素放回原始位置。

indicator.fn.checkPosition=function(e){ //检查单元格位置,符合条件插入 不符合条件放回原处
     e=that.getEvent(e);
     var i=that.htmls.length,size=null,pointer = [e.clientX,e.clientY];
     for(;i--;){
    size=that.getClinetRect(that.htmls[i]);
    if(size.top < pointer[1] && size.bottom>pointer[1]){
        if(size.left<pointer[0] && size.right>pointer[0]){
        that.htmls[i]===indicator.currentTarget || that.replaceElement(that.htmls[i]);
        }else{
         that.restore();
        }
    }
    }
};

  
3.为了避免拖拽元素时导致单元格产生的重新排列导致的错位,所以要产生一个占位单元格,这占位的单元格克隆自拖拽单元格。

indicator.fn.createPlaceholder=function(T){
   var node=T.cloneNode(true);
   node.innerHTML='';
   node.style.display='none';
   node.className='placeholder';
   T.parentNode.insertBefore(node,T);
   that.placeholder=node;
};


4.界定拖拽单元格是否进入其他单元格,左顶点大于当前单元格的top,left但是小于当前单元格的bottom,right

indicator.fn.checkPosition=function(e){ //检查单元格位置,符合条件插入 不符合条件放回原处
    e=that.getEvent(e);
    var i=that.htmls.length,size=null,pointer = [e.clientX,e.clientY];
    for(;i--;){
          size=that.getClinetRect(that.htmls[i]);
          if(size.top < pointer[1] && size.bottom>pointer[1]){
                if(size.left<pointer[0] && size.right>pointer[0]){
                   that.htmls[i]===indicator.currentTarget || that.replaceElement(that.htmls[i]);
               }else{
                     that.restore();
               }
         }
    }
};



5.调整单元格时,要改变拖拽单元个的两个记录位置的属性,还要改变当前单元格的两个位置属性,再调整记录位置的数组
这里的处理我觉得也是最繁复最有挑战的地方,修改了很久

       indicator.fn.replaceElement=function(targetNode){ //摆放单元至正确位置
 
    var current=indicator.currentTarget,k1=that.htmls,k2=that.sn,temp,j=0,k=0,a1=[-1,-1],a2=null,a3=-1,arr=[],parent=that.parent.children[0],li;
 
    current.style.position='static';
 
    that.index=[];
 
    for(;k<k1.length;k++){
        if(targetNode===that.htmls[k]) {a1[0]=k;}
        if(current===that.htmls[k]) {a1[1]=k;}
    }
    a1.sort();
 
    a2=k1[a1[0]];
    k1[a1[0]]=k1[a1[1]];
    k1[a1[1]]=a2;
 
    a3=k2[a1[0]];
    k2[a1[0]]=k2[a1[1]];
    k2[a1[1]]=a3;
 
    parent.innerHTML='';
 
    for(;j<k1.length;j++){
        li=that.htmls[j];
        that.index.push(that.htmls[j].index);
        try{parent.appendChild(li)}catch(e){}
    }
 
};


6.在释放鼠标时,检查原始数组和记录位置数组的值十分相等,确定是不是拼图完成。

that.index.join('')===that.sn.sort().join('')

 

  • 大小: 46.1 KB
分享到:
评论

相关推荐

    jQuery实现的9宫格拼图游戏效果.zip

    【标题】"jQuery实现的9宫格拼图游戏效果.zip" 涉及到的核心知识点是使用jQuery库来创建一个互动式的9宫格拼图游戏。jQuery是一个广泛应用于Web开发的JavaScript库,它简化了HTML文档遍历、事件处理、动画设计以及...

    C# 9宫格数学拼图

    在编程领域,特别是在游戏开发中,"9宫格数学拼图"是一种常见的逻辑挑战游戏,也被称为数独的简化版。它基于一个3x3的矩阵,每个单元格包含数字1到9,目标是通过填充空白单元格使每一行、每一列以及每个3x3的小宫格...

    C# 9宫格或8数码拼图游戏

    【C# 9宫格或8数码拼图游戏】是一种基于C#编程语言开发的智力游戏,也称为“滑动拼图”或“15拼图”。它在计算机科学领域中是一个经典的问题,通常用于教学和算法实践。这个游戏的目标是通过移动空格,将打乱顺序的...

    使用A*算法实现的9宫格拼图小游戏,包含源码和程序

    本项目将A*算法巧妙地应用到了一个简单的9宫格拼图游戏中,为玩家提供了一种直观理解A*算法工作原理的方式。下面,我们将深入探讨A*算法及其在9宫格拼图游戏中的具体实现。 首先,A*算法的核心在于其启发式搜索策略...

    安卓6宫格图片拼图组图

    安卓6宫格图片拼图组图,拼图预览,文字添加

    九宫格十二宫格自定义宫格小程序拼图游戏.rar

    标题中的“九宫格十二宫格自定义宫格小程序拼图游戏”表明这是一个基于微信小程序开发的拼图游戏,它可以适应不同的宫格模式,包括常见的九宫格和十二宫格,同时支持用户自定义宫格数量,提高了游戏的可玩性和趣味性...

    netbeans拼图游戏

    本文将深入探讨如何使用NetBeans IDE来开发一款9宫格拼图游戏。NetBeans是一款强大的开源集成开发环境,支持多种编程语言,包括Java,它以其友好的界面和丰富的功能深受开发者喜爱。 首先,我们要理解9宫格拼图游戏...

    Starling9宫格类库

    在游戏开发或UI设计中,9宫格缩放是一种常见的技术,它允许图片在保持角部不变形的情况下进行拉伸,从而在不同尺寸的屏幕上呈现出更加自然的视觉效果。 在Starling框架中,原生并不直接支持9宫格缩放,但通过自定义...

    javascript HTML5 APP网页游戏_9宫格,16宫格抽奖大转盘(源代码)

    javascript H5 APP网页游戏_九宫格,16宫格抽奖大转盘(源代码)

    十五宫格拼图/数字游戏

    同时,这个项目也可以作为进一步开发的基础,比如将其扩展为其他类型的拼图游戏,增加难度等级,或者与其他玩家在线竞技。 总的来说,《十五宫格拼图/数字游戏》不仅是一个有趣的休闲活动,也是学习和实践Delphi...

    iphone 9宫格实现

    在iOS开发中,创建一个9宫格界面是常见的任务,特别是在设计用户交互界面时,用于展示功能模块或者图片。这个场景通常涉及到自定义UICollectionView或UItableView的实现,因为这两种组件都可以方便地创建网格布局。...

    gamePintu_jQueryN宫格拼图_

    《jQuery N宫格拼图游戏详解》 在IT领域,游戏开发始终是吸引人们注意力的一个重要方向,尤其在网页端,轻量级的游戏更是受到广大用户的喜爱。本篇将深入探讨一个基于jQuery实现的N宫格拼图游戏,旨在帮助读者理解...

    android9宫格解锁

    这是 android手机 9宫格解锁软件 任何一款手机都可以装 经测试 100%可信

    9宫格后台模板

    9宫格的设计理念源于中国古代的九宫格数学游戏,它强调对称和平衡,这在UI设计中是非常重要的。在实际应用中,9宫格不仅限于9个方格,也可以根据需要扩展为更多格子,或者通过折叠、滑动等方式动态调整显示内容。 ...

    人物拼图游戏(九宫格).rar

    《人物拼图游戏(九宫格)》是一个基于.NET C#平台开发的益智类游戏,它在Visual Studio 2017环境下被成功编译并经过了充分的测试,确保了程序的稳定性和功能的完整性。这个游戏的核心设计是将一个九宫格中的图像...

    易语言 多宫格自定义拼图游戏源码-易语言

    在这个“多宫格自定义拼图游戏”项目中,我们可以看到易语言在游戏开发领域的应用。这个游戏的核心功能包括以下几个方面: 1. **宫格尺寸自定义**:游戏允许玩家选择宫格的大小,这意味着程序需要能够动态调整网格...

Global site tag (gtag.js) - Google Analytics