document.ontouchmove = function (ev) {
ev.preventDefault();
};
// 获取li的宽,用来设置定位
console.log(window.screen.width);
let liWidth =70
if(window.screen.width<=600) liWidth = window.screen.width / 7
// 设置一个总分是变量
let grade = 0
// 设置一个定时器
let timing =61
$('.btnGo').click(()=>{
$('.zhezao').hide()
let timeId = setInterval(() => {
timing--
$('.time').text(timing)
if(timing<=0) {
$('body').css('background-color','transparent')
$('#ul1').hide()
$('.top').hide()
$('.endF').text(grade)
$('.end').show()
clearInterval(timeId)
}
}, 1000);
})
// 点击重新开始
$('.btn').click(()=>{
window.location.reload();
})
$(function () {
var Game = {
colNum: 7,
wH: liWidth,
timeBtn: true,
dir: 0,
dirThis: null,
init: function () {
this.oUl = $('#ul1');
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 = $('
');
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.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;
console.log('消除成功');
grade +=10
$('.grade').text(grade)
}
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 = $('');
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();
}
});
}
},
toReset: function () {
console.log('消除不成功');
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;
}
},
};
Game.init();
});