jQuery实现简易的天天爱消除小游戏


Posted in Javascript onOctober 16, 2015

今天分享一枚小demo:《天天爱消除游戏》,我想大家对这个游戏不陌生吧!?近期挺火的一款手游

妙味的讲师也很喜欢玩这款游戏 ,课余时间就写了个简易版天天的爱消除,除了PC端以外,试试在iPad、iPhone上玩吧~

涉及知识点:JS、HTML5;

游戏截图:

jQuery实现简易的天天爱消除小游戏

CSS:

*{ margin:0; padding:0;}
#ul1{ position:relative; margin:20px auto; background:#1b1f2b; overflow:hidden;}
#ul1 li{ list-style:none;}

body { text-align:center;}
#input1 { width:490px; height:50px; border:none; font-size:20px; position:relative; top:10px; border-radius: 12px 12px 0 0; box-shadow: 0px 3px 1px 1px #d1aca2;
background: -webkit-linear-gradient(top,#fae0e1,#e8c4c2);background: -moz-linear-gradient(top,#fae0e1,#e8c4c2);background: linear-gradient(top,#fae0e1,#e8c4c2); color:#fff; }

#sty1 .box0{ width:70px; height:70px; background:url(img/1.jpg) no-repeat; float:left;}
#sty1 .box1{ width:70px; height:70px; background:url(img/2.jpg) no-repeat; float:left;}
#sty1 .box2{ width:70px; height:70px; background:url(img/3.jpg) no-repeat; float:left;}
#sty1 .box3{ width:70px; height:70px; background:url(img/4.jpg) no-repeat; float:left;}
#sty1 .box4{ width:70px; height:70px; background:url(img/5.jpg) no-repeat; float:left;}
#sty1 .box5{ width:70px; height:70px; background:url(img/6.jpg) no-repeat; float:left;}

#sty2 .box0{ width:70px; height:70px; background:url(img/d.jpg) no-repeat; float:left;}
#sty2 .box1{ width:70px; height:70px; background:url(img/l.jpg) no-repeat; float:left;}
#sty2 .box2{ width:70px; height:70px; background:url(img/m.jpg) no-repeat; float:left;}
#sty2 .box3{ width:70px; height:70px; background:url(img/w.jpg) no-repeat; float:left;}
#sty2 .box4{ width:70px; height:70px; background:url(img/y.jpg) no-repeat; float:left;}
#sty2 .box5{ width:70px; height:70px; background:url(img/z.jpg) no-repeat; float:left;}

JS

document.ontouchmove = function(ev){
 ev.preventDefault(); 
};

$(function(){
 
 var bBtn = true;
 
 $('#input1').click(function(){
 if(bBtn){
 $(this).val('点击切换到爱消除版');
 $('body').attr('id','sty2');
 $('#ul1').css('background','#fff');
 }
 else{
 $(this).val('点击切换教师节版');
 $('body').attr('id','sty1');
 $('#ul1').css('background','#1b1f2b');
 }
 bBtn = !bBtn;
 });
 
 var Game = {
 colNum : 7,
 wH : 70,
 timeBtn : true,
 dir : 0,
 dirThis : null,
 init : function(){
 this.oUl = $('#ul1');
 this.addSound();
 this.createMap();
 
 },
 createMap : function(){
 
 this.oUl.css({width : this.colNum*this.wH , height : this.colNum*this.wH});
 var numX = 0;
 var numY = 0;
 
 for(var i=0;i<Math.pow(this.colNum,2);i++){
 var oLi = $('<li>');
 oLi.attr('class','box'+ Math.floor(Math.random()*6));
 
 oLi.data({x : numX , y : numY});
 
 numX++;
 
 if( numX == this.colNum ){
  numX = 0;
  numY++;
 }
 
 this.oUl.append( oLi );
 }
 
 this.positionShow();
 
 this.removeShow();
 
 this.bindTouch();
 
 },
 positionShow : function(){
 
 this.aLi = this.oUl[0].getElementsByTagName('li');
 
 var arr = [];
 $(this.aLi).each(function(i,elem){
 arr.push( [ elem.offsetLeft , elem.offsetTop ] );
 });
 $(this.aLi).each(function(i,elem){
 $(elem).css({position : 'absolute',left : arr[i][0] , top : arr[i][1]});
 
 });
 
 this.arr = arr;
 
 },
 bindTouch : function(){
 
 var startX = 0;
 var startY = 0;
 var This = this;
 var izIndex = 2;
 var startThis = null;
 
 this.oUl.delegate('li','touchstart mousedown',function(event){
 
  var data = event.originalEvent.changedTouches ? event.originalEvent.changedTouches[ 0 ] : event;
  startX = data.clientX;
  startY = data.clientY;
  
  startThis = this;
  
  return false;
 });
 
 this.oUl.delegate('li','touchend mouseup',function(event){
 
 var data = event.originalEvent.changedTouches ? event.originalEvent.changedTouches[ 0 ] : event;
 
 if(This.timeBtn && ( Math.abs(startX - data.clientX)>10 || Math.abs(startY - data.clientY) > 10 )){
  
 $(startThis).css('zIndex',izIndex++);
 
 if( Math.abs(startX - data.clientX) > Math.abs(startY - data.clientY) ){// 左右
  if(startX < data.clientX){ //→
  
  if( $(startThis).data('x') != This.colNum-1 ){
  
  This.dir = 1;
  
  var index = $(startThis).data('x')+1 + $(startThis).data('y')*This.colNum;
  
  var nextLi = $(This.oUl).find('li').eq(index);
  
  $(startThis).insertAfter( nextLi ); 
  
  $(startThis).animate({left : This.arr[index][0]},300); 
  nextLi.animate({left : This.arr[index-1][0]},300); 
  
  $(startThis).data('x',$(startThis).data('x')+1);
  nextLi.data('x',nextLi.data('x')-1);
  
  This.dirThis = nextLi;
  
  }
  
  }
  else{ //←
  
  if( $(startThis).data('x') != 0 ){
  
  This.dir = 2;
  
  var index = $(startThis).data('x')-1 + $(startThis).data('y')*This.colNum;
  
  var prevLi = $(This.oUl).find('li').eq(index);
  
  $(startThis).insertBefore( prevLi ); 
  $(startThis).animate({left : This.arr[index][0]},300); 
  prevLi.animate({left : This.arr[index+1][0]},300); 
  
  $(startThis).data('x',$(startThis).data('x')-1);
  prevLi.data('x',prevLi.data('x')+1);
  
  This.dirThis = prevLi;
  
  }
  
  }
 }
 else{ //上下
 
  if(startY < data.clientY){ //↓
  
  if( $(startThis).data('y') != This.colNum-1 ){
  
  This.dir = 3;
  
  var index = $(startThis).data('x') + ($(startThis).data('y')+1)*This.colNum; 
  
  var downLi = $(This.oUl).find('li').eq(index);
  
  var prevThis = $(startThis).prev();
  
  $(startThis).insertAfter( downLi ); 
  downLi.insertAfter( prevThis );
  
  $(startThis).animate({top : This.arr[index][1]},300); 
  downLi.animate({top : This.arr[index-This.colNum][1]},300); 
  
  $(startThis).data('y',$(startThis).data('y')+1);
  downLi.data('y',downLi.data('y')-1);
  
  This.dirThis = downLi;
  
  }
  
  }
  else{ //↑
 
  if( $(startThis).data('y') != 0 ){
  
  This.dir = 4;
  
  var index = $(startThis).data('x') + ($(startThis).data('y')-1)*This.colNum; 
  
  var upLi = $(This.oUl).find('li').eq(index);
  
  var prevThis = $(startThis).prev();
  
  $(startThis).insertAfter( upLi ); 
  upLi.insertAfter( prevThis );
  
  $(startThis).animate({top : This.arr[index][1]},300); 
  upLi.animate({top : This.arr[index+This.colNum][1]},300); 
  
  $(startThis).data('y',$(startThis).data('y')-1);
  upLi.data('y',upLi.data('y')+1);
  
  This.dirThis = upLi;
  
  }
  
  }
 
 }
  This.oA.src = 'sound/b.mp3';
  This.oA.play();
  
  This.removeShow();
 }
 
 return false;
 
 });
 },
 removeShow : function(){
 
 var arr = [];
 var This = this;
 
 function addArr(aLi){
 
 var prevLi = aLi[0];
 var iNum = 0;
 
 for(var i=0;i<aLi.length;i++){
  if( aLi[i].className == prevLi.className && i%7!=0 ){
  iNum++;
  }
  else{
  
  if(iNum >= 2){
  for(var j=0;j<=iNum;j++){
  arr.unshift( aLi[(i-1)-j] );
  }
  
  }
  
  iNum = 0;
  }
  prevLi = aLi[i]; 
 }
 
 if(iNum >= 2){
  for(var j=0;j<=iNum;j++){
  arr.unshift( aLi[(i-1)-j] );
  }
  
 }
 
 }
 
 addArr(this.aLi);
 addArr(this.xyChange(this.aLi));
 
 for(var i=0;i<arr.length;i++){
 
 for(var j=0;j<this.aLi.length;j++){
  if( arr[i] == this.aLi[j] ){
  this.aLi[j].bBtn = true;
  }
 }
 }
 
 var removeNum = 0;
 var removeY = [];
 var changeArr = [];
 
 for(var i=0;i<this.aLi.length;i++){
 if( this.aLi[i].bBtn ){
  removeNum++;
  removeY.push( this.aLi[i] );
 }
 }
 
 if(removeY.length){
 this.timeBtn = false;
 this.dir = 0;
 }
 else{
 this.toReset();
 return;
 }
 
 for(var i=0;i<removeY.length;i++){
 for(var j=0;j<this.arrY[ $(removeY[i]).data('x') ].length;j++ ){
  
  if( removeY[i] == this.arrY[ $(removeY[i]).data('x') ][j] ){
  this.arrY[ $(removeY[i]).data('x') ].iNum++;
  this.arrY[ $(removeY[i]).data('x') ].splice(j,1);
  this.arrY[ $(removeY[i]).data('x') ].unshift( this.oneLi( $(removeY[i]).data('x') , this.arrY[ $(removeY[i]).data('x') ].iNum ) );
  
  }
 }
 }
 
 for(var i=0;i<this.colNum;i++){
 changeArr = changeArr.concat( this.arrY[i] );
 }
 
 var c = this.xyChange( changeArr );
 var removeYnum = 0;
 
 for(var i=0;i<removeY.length;i++){
 
 $(removeY[i]).animate({opacity:0},function(){
  $(this).remove();
  
  removeYnum++;
  
  if(removeYnum == removeY.length){
  
  
  for(var i=0;i<c.length;i++){
  This.oUl.append( c[i] );
  }
  
  var numX = 0;
  var numY = 0;
  
  for(var i=0;i<This.aLi.length;i++){
  
  $(This.aLi).eq(i).data({x : numX , y : numY});
  
  numX++;
  
  if( numX == This.colNum ){
  numX = 0;
  numY++;
  }
  
  }
  
  This.movePos();
  }
  
 });
 }
 
 },
 xyChange : function(aLi){
 
 var arr = [];
 var This = this;
 this.arrY = {};
 iNum = 0;
 
 for(var i=0;i<this.colNum;i++){
 this.arrY[i] = [];
 this.arrY[i].iNum = 0;
 }
 
 (function(){
 
 if(iNum==This.colNum){
  return;
 }
 
 for(var i=0;i<aLi.length;i++){
  if(i%This.colNum == iNum){
  arr.push( aLi[i] );
  This.arrY[iNum].push( aLi[i] );
  }
 }
 iNum++;
 arguments.callee();
 
 })();
 
 return arr;
 
 },
 oneLi : function(x,iNum){
 
 var oLi = $('<li>');
 oLi.attr('class','box'+ Math.floor(Math.random()*6));
 oLi.css({ position : 'absolute' , left : x*this.wH , top : -iNum*this.wH });
 this.oUl.append( oLi );
 
 return oLi.get(0);
 
 },
 movePos : function(){
 
 var bBtn = true;
 var This = this;
 
 for(var i=0;i<this.aLi.length;i++){
 $(this.aLi[i]).animate({top : this.arr[i][1] },function(){
  if(bBtn){
  bBtn = false;
  
  This.timeBtn = true;
  
  This.removeShow();
  
  This.oA.src = 'sound/a.mp3';
  This.oA.play();
  
  }
 });
 }
 
 },
 toReset : function(){
 
 switch(this.dir){
 case 1:
  
  var index = $(this.dirThis).data('x')+1 + $(this.dirThis).data('y')*this.colNum;
  
  var nextLi = $(this.oUl).find('li').eq(index);
  
  $(this.dirThis).insertAfter( nextLi ); 
  
  $(this.dirThis).animate({left : this.arr[index][0]},300); 
  nextLi.animate({left : this.arr[index-1][0]},300); 
  
  $(this.dirThis).data('x',$(this.dirThis).data('x')+1);
  nextLi.data('x',nextLi.data('x')-1);
  
 break;
 case 2:
 
  var index = $(this.dirThis).data('x')-1 + $(this.dirThis).data('y')*this.colNum;
  
  var prevLi = $(this.oUl).find('li').eq(index);
  
  $(this.dirThis).insertBefore( prevLi ); 
  $(this.dirThis).animate({left : this.arr[index][0]},300); 
  prevLi.animate({left : this.arr[index+1][0]},300); 
  
  $(this.dirThis).data('x',$(this.dirThis).data('x')-1);
  prevLi.data('x',prevLi.data('x')+1);
 
 break;
 case 3:
 
  var index = $(this.dirThis).data('x') + ($(this.dirThis).data('y')+1)*this.colNum; 
  
  var downLi = $(this.oUl).find('li').eq(index);
  
  var prevThis = $(this.dirThis).prev();
  
  $(this.dirThis).insertAfter( downLi ); 
  downLi.insertAfter( prevThis );
  
  $(this.dirThis).animate({top : this.arr[index][1]},300); 
  downLi.animate({top : this.arr[index-this.colNum][1]},300); 
  
  $(this.dirThis).data('y',$(this.dirThis).data('y')+1);
  downLi.data('y',downLi.data('y')-1);
 
 break;
 case 4:
 
  var index = $(this.dirThis).data('x') + ($(this.dirThis).data('y')-1)*this.colNum; 
  
  var upLi = $(this.oUl).find('li').eq(index);
  
  var prevThis = $(this.dirThis).prev();
  
  $(this.dirThis).insertAfter( upLi ); 
  upLi.insertAfter( prevThis );
  
  $(this.dirThis).animate({top : this.arr[index][1]},300); 
  upLi.animate({top : this.arr[index+this.colNum][1]},300); 
  
  $(this.dirThis).data('y',$(this.dirThis).data('y')-1);
  upLi.data('y',upLi.data('y')+1);
 
 break;
 }
 
 
 },
 addSound : function(){
 
 this.oA = document.createElement('audio');
 document.body.appendChild( this.oA );
 
 }
 
 };

 Game.init();
 
});

HTML

<input type="button" value="点击切换到教师节版" id="input1" />
<ul id="ul1">
</ul>

当然啦,千万别忘记载入jQuery

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
Javascript 相关文章推荐
Code:loadScript( )加载js的功能函数
Feb 02 Javascript
Google 静态地图API实现代码
Nov 19 Javascript
解析window.open的使用方法总结
Jun 19 Javascript
js 获取input点选按钮的值的方法
Apr 14 Javascript
JS实现为排序好的字符串找出重复行的方法
Mar 02 Javascript
第九章之路径分页标签与徽章组件
Apr 25 Javascript
Select2.js下拉框使用小结
Oct 24 Javascript
Angular7.2.7路由使用初体验
Mar 01 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
Aug 14 Javascript
JavaScript实现捕获鼠标坐标
Apr 12 Javascript
JS面试题中深拷贝的实现讲解
May 07 Javascript
jquery实现异步文件上传ajaxfileupload.js
Oct 23 jQuery
两款JS脚本判断手机浏览器类型跳转WAP手机网站
Oct 16 #Javascript
纯JavaScript代码实现移动设备绘图解锁
Oct 16 #Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
Oct 16 #Javascript
javascript实现3D切换焦点图
Oct 16 #Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
Oct 16 #Javascript
jQuery实现带渐显效果的人物多级关系图代码
Oct 16 #Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
Oct 16 #Javascript
You might like
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
深入了解js原型模式
2019/05/30 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
python3简单实现微信爬虫
2015/04/09 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
Python输入二维数组方法
2018/04/13 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
python之随机数函数的实现示例
2020/12/30 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
女娲补天教学反思
2014/02/05 职场文书
亲戚结婚的请假条
2014/02/11 职场文书
挂靠协议书范本
2014/04/22 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript