mirror of
https://github.com/wu736139669/vczero.github.io.git
synced 2026-08-05 06:23:38 +00:00
272 lines
6.1 KiB
JavaScript
272 lines
6.1 KiB
JavaScript
|
|
$(function(){
|
|
|
|
t2048 = new T2048();
|
|
t2048.play();
|
|
|
|
$('#play_game').click(function(){
|
|
t2048 = new T2048();
|
|
t2048.play();
|
|
});
|
|
|
|
$('#show_game_over').hide();
|
|
|
|
$('#close_div').click(function(){
|
|
$('#show_game_over').hide();
|
|
t2048 = new T2048();
|
|
t2048.play();
|
|
});
|
|
});
|
|
|
|
|
|
//T2048类
|
|
var T2048 = function(){
|
|
//记录数字变化的二维数组
|
|
var bk_table = [];
|
|
//玩家分数
|
|
var myScore = 0;
|
|
//UI绘制
|
|
var createUI = function (){
|
|
for(var i = 0; i < 4; i++){
|
|
bk_table[i] = [];
|
|
for(var j = 0; j <4; j++){
|
|
bk_table[i][j] = 0;
|
|
var bk_cell = $('#bk_cell_'+ i + '_' + j);
|
|
bk_cell.css('top', getTop(i, j));
|
|
bk_cell.css('left', getLeft(i, j));
|
|
}
|
|
}
|
|
}
|
|
//产生并显示随机数
|
|
var initNumber = function (){
|
|
var xy1 = createPosition(bk_table);
|
|
//能够产生随机数,则产生随机数
|
|
if(xy1){
|
|
var number1 = createNumber();
|
|
//产生一个数
|
|
bk_table[xy1.x][xy1.y] = number1;
|
|
// var xy2 = createPosition(bk_table);
|
|
// var number2 = createNumber();
|
|
// bk_table[xy2.x][xy2.y] = number2;
|
|
showNumber(bk_table);
|
|
}
|
|
}
|
|
|
|
//产生随机数
|
|
var createNumber = function (){
|
|
return Math.random() *10 > 5 ? 4:2;
|
|
}
|
|
|
|
//获取下一个绘制的位置
|
|
var createPosition = function (table){
|
|
var x = Math.floor(Math.random() *4);
|
|
var y = Math.floor(Math.random() *4);
|
|
var i = 0;
|
|
while(i < 500){
|
|
if(table[x][y] === 0)
|
|
return {x:x, y:y};
|
|
x = Math.floor(Math.random() *4);
|
|
y = Math.floor(Math.random() *4);
|
|
i++;
|
|
}
|
|
|
|
for(i = 0; i < 4; i++){
|
|
for(var j = 0; j < 4; j++){
|
|
if(table[i][j] === 0)
|
|
return {x:i, y:j};
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
//将数字绘制出来
|
|
var showNumber = function (table){
|
|
$('.fr_cell').remove();
|
|
for(var i = 0; i < 4; i++){
|
|
for(var j = 0; j < 4; j++){
|
|
var fr_cell_str = '<div class="fr_cell" id=fr_cell_' + i + '_' + j +'>' + '</div>';
|
|
$('#main_ui_cell').append(fr_cell_str);
|
|
var fr_cell = $('#fr_cell_'+ i + '_' + j);
|
|
if(table[i][j] == 0){
|
|
fr_cell.css('width', '0');
|
|
fr_cell.css('height', '0');
|
|
fr_cell.css('top', getTop(i, j) + 50);
|
|
fr_cell.css('left', getLeft(i, j) + 50);
|
|
}else{
|
|
|
|
|
|
fr_cell.css('backgroundColor', getBackColor(table[i][j])); //设置背景色
|
|
fr_cell.css('color', getTextColor(table[i][j])); //设置文字颜色
|
|
fr_cell.css('width', '100px');
|
|
fr_cell.css('height', '100px');
|
|
fr_cell.css('top', getTop(i, j));
|
|
fr_cell.css('left', getLeft(i, j));
|
|
fr_cell.text(table[i][j]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//获取背景色
|
|
var getBackColor = function (number){
|
|
switch(number){
|
|
case 2: return '#EEE4DA'; break;
|
|
case 4: return '#EEE4DA'; break;
|
|
case 8: return '#F3B079'; break;
|
|
case 16: return '#EB8E53'; break;
|
|
case 32: return '#FB795F'; break;
|
|
case 64: return '#EB573B'; break;
|
|
case 128: return '#00C6E5'; break;
|
|
case 256: return '#EDCA62'; break;
|
|
case 512: return '#FCD209'; break;
|
|
case 1024: return '#E12D2D'; break;
|
|
case 2048: return '#4CB649'; break;
|
|
default: break;
|
|
}
|
|
}
|
|
|
|
//获取文本颜色
|
|
var getTextColor = function (number){
|
|
if(number <= 4)
|
|
return '#665C52';
|
|
return '#FFF';
|
|
}
|
|
|
|
var getTop = function (i , j){
|
|
return i*110 + 10;
|
|
}
|
|
|
|
var getLeft = function (i, j){
|
|
return j*110 + 10;
|
|
}
|
|
|
|
//判断是否还可以移动(游戏是否结束)
|
|
var notMove = function (){
|
|
var full = (function (){
|
|
for(var i = 0; i < 4; i++){
|
|
for(var j = 0; j < 4; j++){
|
|
if(bk_table[i][j] === 0)
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
})();
|
|
|
|
var noLeftRight = (function (){
|
|
for(var i = 0; i < 4; i++){
|
|
for(var j = 0; j < 3; j++){
|
|
if(bk_table[i][j] === bk_table[i][j+1])
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
})();
|
|
|
|
var noTopBottom = (function (){
|
|
for(var j = 0; j < 4; j++){
|
|
for(var i = 0; i < 3; i++){
|
|
if(bk_table[i][j] === bk_table[i+1][j])
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
})();
|
|
|
|
return full & noLeftRight & noTopBottom;
|
|
|
|
}
|
|
|
|
//监听用户的键盘移动
|
|
var getKeyDowm = function (e){
|
|
var isOver = notMove();
|
|
if(!isOver){
|
|
switch(e.which){
|
|
case 37:
|
|
//left
|
|
//整体向左移 并合并相同的数字,i不变
|
|
for(var i = 0; i < 4; i++){
|
|
for(var j = 3; j > 0; j--){
|
|
if(bk_table[i][j-1] === 0 || (bk_table[i][j] === bk_table[i][j-1])){
|
|
bk_table[i][j-1] = bk_table[i][j] + bk_table[i][j-1];
|
|
myScore = myScore + bk_table[i][j-1];
|
|
bk_table[i][j] = 0;
|
|
}
|
|
}
|
|
}
|
|
//生成新的数字和UI
|
|
$('#my_score').text(myScore);
|
|
initNumber(bk_table);
|
|
break;
|
|
case 38:
|
|
//top
|
|
//j = 0不移,其余都移动 j不变
|
|
for(var j = 0; j < 4; j++){
|
|
for(var i = 3; i > 0 ; i--){
|
|
if(bk_table[i-1][j] === 0 || (bk_table[i][j] === bk_table[i-1][j])){
|
|
bk_table[i-1][j] = bk_table[i][j] + bk_table[i-1][j];
|
|
myScore = myScore + bk_table[i-1][j];
|
|
bk_table[i][j] = 0;
|
|
}
|
|
}
|
|
}
|
|
$('#my_score').text(myScore);
|
|
initNumber(bk_table);
|
|
break;
|
|
case 39:
|
|
//right
|
|
//整体向右移 并合并相同的数字,i不变
|
|
for(var i = 0; i < 4; i++){
|
|
for(var j = 0; j < 3; j++){
|
|
if(bk_table[i][j+1] === 0 || (bk_table[i][j] === bk_table[i][j+1])){
|
|
bk_table[i][j+1] = bk_table[i][j] + bk_table[i][j+1];
|
|
myScore = myScore + bk_table[i][j+1];
|
|
bk_table[i][j] = 0;
|
|
}
|
|
}
|
|
}
|
|
//生成新的数字和UI
|
|
$('#my_score').text(myScore);
|
|
initNumber(bk_table);
|
|
break;
|
|
case 40:
|
|
//bottom
|
|
for(var j = 0; j < 4; j++){
|
|
for(var i = 0; i < 3 ; i++){
|
|
if(bk_table[i+1][j] === 0 || (bk_table[i][j] === bk_table[i+1][j])){
|
|
bk_table[i+1][j] = bk_table[i][j] + bk_table[i+1][j];
|
|
myScore = myScore + bk_table[i+1][j];
|
|
bk_table[i][j] = 0;
|
|
}
|
|
}
|
|
}
|
|
$('#my_score').text(myScore);
|
|
initNumber(bk_table);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}else{
|
|
$('#show_game_over').show();
|
|
document.onkeydown = null;
|
|
}
|
|
}
|
|
|
|
document.onkeydown = getKeyDowm;
|
|
|
|
//暴露paly
|
|
return {
|
|
play: function play(){
|
|
myScore = 0;
|
|
$('#my_score').text(0);
|
|
createUI();
|
|
initNumber(bk_table);
|
|
}
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|