首页 > 语言 > JavaScript > 正文

jQuery制作可自定义大小的拼图游戏

2024-05-06 16:17:51
字体:大 中 小
来源:转载
供稿:网友

这篇文章主要介绍了jQuery制作可自定义大小的拼图游戏的代码,非常的简单实用,虽然还只是局限于数字顺序的拼图,后续慢慢完善上图片,但还是分享给大家,有需要的小伙伴可以参考下。

我把大小限制在了3-10之间,实在闲的,或者有自虐倾向的可以试试改下。。

本来准备弄图片上去的,还没弄..

pintu.html

 

 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  5. <title>拼图</title> 
  6. <style type="text/css"> 
  7. #pt_main{ 
  8. margin:0 auto; 
  9. border:2px solid #000;} 
  10. #menu{ 
  11. text-align:center;} 
  12. #pt_main div{ 
  13. padding:0px; 
  14. margin:0px; 
  15. float:left; 
  16. line-height:200px; 
  17. font-size:100px; 
  18. text-align:center;} 
  19. #pt_main div:hover{ 
  20. cursor:pointer;} 
  21. .hui{ 
  22. background:#CCC;} 
  23. </style> 
  24.  
  25. <script src="http://code.jquery.com/jquery-latest.js"></script> 
  26. <script type="text/javascript"> 
  27. //div边框宽度 
  28. var border_w=2; 
  29. //div大小 
  30. var size=50; 
  31. //是否过关 
  32. var st=false; 
  33. //背景图片地址(功能还没写) 
  34. var imgurl=''; 
  35. //灰色块的位置 
  36. var hui=0; 
  37. //游戏宽高 
  38. var width=3; 
  39. var height=3; 
  40. $(function(){ 
  41. init(); 
  42. }); 
  43. //判断两个数字能不能交换 
  44. function ut_jh(a,b){ 
  45. if(Math.abs(a-b)==width){ 
  46. return true; 
  47. } 
  48. if(Math.abs(a-b)==1&& ut_line(a,b,width) ){ 
  49. return true; 
  50. } 
  51. return false; 
  52. } 
  53. //判断两个数字是否在同一行 
  54. function ut_line(a,b,width){ 
  55. if(parseInt(a/width)==parseInt(b/width)){ 
  56. return true; 
  57. }else{ 
  58. return false;  
  59. } 
  60. } 
  61. //生成可交换的集合(可与灰色块交换的集合) 
  62. function ut_sc(a){ 
  63. //最多为4个 
  64. var li=new Array(); 
  65. var i=0; 
  66. if(a-width>=0){ 
  67. li[i++]=a-width; 
  68. } 
  69. if(a+width<=width*height-1){ 
  70. li[i++]=a+width;  
  71. } 
  72. if(ut_line(a,a-1,width) && a-1>=0){ 
  73. li[i++]=a-1;  
  74. } 
  75. if(ut_line(a,a+1,width) && a+1<=width*height-1){ 
  76. li[i++]=a+1;  
  77. } 
  78. //alert(a+'-length:'+li.length) 
  79. return li; 
  80. } 
  81. //块的点击事件 
  82. function pt_click(){ 
  83. if(!st){ 
  84. return false; 
  85. } 
  86. //点击块的索引 
  87. var index=get().index($(this)); 
  88.  
  89. if(ut_jh(hui,index)){ 
  90. jh(hui,index); 
  91.  
  92. //判断是否过关 
  93. pd(); 
  94. } 
  95.  
  96.  
  97. } 
  98. //两块交换 
  99. function jh(hui_,index_){ 
  100. //alert(hui+1+","+(index_+1)); 
  101. var list=get();//所有块 
  102. var h=list.eq(hui_);//灰色块 
  103. var d=list.eq(index_);//点击的块 
  104.  
  105. //交换样式 
  106. h.removeClass(); 
  107. d.addClass('hui'); 
  108. h.html(d.html()); 
  109. d.html(''); 
  110. hui=index_; 
  111.  
  112. //交换各自属性 
  113. tg=h.attr('tg'); 
  114. h.attr('tg',d.attr('tg')); 
  115. d.attr('tg',tg); 
  116. } 
  117.  
  118. function init(){ 
  119. //不能太小... 
  120. if(width<3||height<3){ 
  121. return false;  
  122. } 
  123. hui=width*height-1; 
  124. var pp=$("#pt_main"); 
  125. pp.html(''); 
  126. //创建并初始化 
  127. var k=width*size+border_w*width*2; 
  128. var g=height*size+border_w*height*2; 
  129. pp.css({'width':k,'height':g}); 
  130. for(i=0;i<width*height;i++){ 
  131. var n=$("<div>"+(i+1)+"</div>");  
  132. n.css({'width':size, 
  133. 'height':size, 
  134. border:border_w+'px solid #000', 
  135. lineHeight:size+'px', 
  136. fontSize:parseInt(size/3)+'px' 
  137. }); 
  138. if(imgurl!=''){ 
  139.  
  140. } 
  141. pp.append(n); 
  142. //alert(i) 
  143.  
  144. } 
  145. get().last().html(''); 
  146. get().last().addClass('hui'); 
  147. get().on('click',pt_click); 
  148.  
  149. //为每个块附加属性,记录当前的值 
  150. $("#pt_main div").each(function(index, element) { 
  151. $(element).attr('tg',index); 
  152. }); 
  153.  
  154.  
  155. dl(); 
  156. st=true; 
  157. } 
  158. //判断是否通过(当每个块的值与自身的下标对应) 
  159. function pd(){ 
  160. var b=true; 
  161. get().each(function(index, element) { 
  162. if($(element).attr('tg')!=index){ 
  163. b=false; 
  164. return false; 
  165. } 
  166.  
  167. }); 
  168. if(b){ 
  169. st=false; 
  170. alert("恭喜过关!"); 
  171. return true; 
  172. }else{ 
  173. return false; 
  174. } 
  175. } 
  176. //获取集合 
  177. function get(){ 
  178. return $("#pt_main div"); 
  179. } 
  180. //打乱 
  181. function dl(){ 
  182. //打乱次数 
  183. var count=width*width*width; 
  184.  
  185. for(i =0;i<count;i++){ 
  186. //可交换集合 
  187. var li=ut_sc(hui); 
  188. var num=parseInt((li.length)*Math.random()); 
  189. jh(hui,li[num]); 
  190. } 
  191.  
  192. } 
  193. //初始化按钮的点击事件 
  194. function csh(){ 
  195. var dxv=$('#dx').val(); 
  196. if(!parseInt(dxv)){ 
  197. alert('请输入3-10之间的数字'); 
  198. $('#dx').val(''); 
  199. return false; 
  200. } 
  201. var v=parseInt(dxv); 
  202. if(v<3||v>10){ 
  203. alert('请输入3-10之间的数字'); 
  204. $('#dx').val(''); 
  205. return false; 
  206. } 
  207. width=v; 
  208. height=v; 
  209. init(); 
  210. } 
  211. </script> 
  212. </head> 
  213.  
  214. <body> 
  215. <div id='menu'> 
  216. 大小:<input id='dx' style="text-align:center;width:40px;"/> 
  217. <button onclick="csh()">初始化</button> 
  218. <button onclick="init()">刷新</button> 
  219. </div> 
  220. <div id="pt_main"> 
  221.  
  222. </div> 
  223.  
  224. </body> 
  225. </html> 

以上就是本文给大家分享的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选