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 相关文章推荐
jQuery 关于伪类选择符的使用说明
Apr 24 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
Aug 13 Javascript
Visual Studio中js调试的方法图解
Jun 30 Javascript
Vue.js事件处理器与表单控件绑定详解
Mar 20 Javascript
Vue开发中整合axios的文件整理
Apr 29 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
Jun 20 Javascript
详解vue 模版组件的三种用法
Jul 21 Javascript
在vue项目中引入highcharts图表的方法
Jan 21 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 Javascript
Layui数据表格 前后端json数据接收的方法
Sep 19 Javascript
JS操作json对象key、value的常用方法分析
Oct 29 Javascript
vue实现抽屉弹窗效果
Nov 15 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 获取全局变量的代码
2011/04/21 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
Knockoutjs的环境搭建教程
2012/11/26 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
js控制frameSet示例
2013/09/10 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
js时间控件只显示年月
2017/01/08 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
python通过floor函数舍弃小数位的方法
2015/03/17 Python
python 读入多行数据的实例
2018/04/19 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
联想中国官方商城:Lenovo China
2017/10/18 全球购物
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
龟牌英国商店:Turtle Wax Brand Store UK
2019/07/02 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
银行类自荐信
2014/02/04 职场文书
春节联欢会主持词
2014/03/24 职场文书
学习之星事迹材料
2014/05/17 职场文书
出差报告范文
2014/11/06 职场文书
公务员政审材料
2014/12/23 职场文书
食品安全责任书范本
2015/05/09 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
python3中apply函数和lambda函数的使用详解
2022/02/28 Python