console
var numberArr=new Array();
var score=0;
window.onload=function(){
document.getElementById('score').innerText=0;
newgame();
var newgamebutton = document.getElementById('newgamebutton');
newgamebutton.onclick = function(){
score = 0;
document.getElementById('score').innerText=0;
newgame();
}
}
function newgame(){
score=0;
removeAll();
initGridCell();
initNumberCell();
getRandNumber();
getRandNumber();
}
function initGridCell(){
var grid_container= document.getElementById('grid_container');
console.log(grid_container);
for(var i=0;i<4;i++){
for(var j=0;j<4;j++){
var grid_cell=document.createElement('div');
grid_cell.setAttribute('class','grid_cell');
grid_container.appendChild(grid_cell);
grid_cell.style.left=20+120*j+"px";
grid_cell.style.top=20+120*i+"px";
}
}
for(var i=0;i<4;i++)
{
numberArr[i]=new Array();
for(var j=0;j<4;j++){
numberArr[i][j]=0;
}
}
}
function initNumberCell(){
var grid_container= document.getElementById('grid_container');
console.log(grid_container);
for(var i=0;i<4;i++){
for(var j=0;j<4;j++){
var number_cell=document.createElement('div');
number_cell.setAttribute('class','number_cell');
number_cell.setAttribute('id','number_cell-'+i+'-'+j);
grid_container.appendChild(number_cell);
number_cell.style.left=20+120*j+"px";
number_cell.style.top=20+120*i+"px";
}
}
}
function showNumber(){
for(var i=0;i<4;i++){
for(var j=0;j<4;j++){
var number_cell=document.getElementById('number_cell-'+i+'-'+j);
if(numberArr[i][j]==0){
number_cell.style.display ='none';
}
else{
number_cell.style.display ="block";
number_cell.style.background=setBgColor(numberArr[i][j]);
number_cell.style.color=setColor(numberArr[i][j]);
number_cell.innerText= numberArr[i][j];
if (numberArr[i][j]>=1024) {
number_cell.style.fontSize="45px";
}
else{
number_cell.style.fontSize="60px";
}
}
}
}
}
function getRandNumber(){
if(hasEmptyPosition()==true){
var randx=parseInt(Math.floor(Math.random()*4));
var randy=parseInt(Math.floor(Math.random()*4));
while(true){
if(numberArr[randx][randy]==0){
break;
}
else{
randx=parseInt(Math.floor(Math.random()*4));
randy=parseInt(Math.floor(Math.random()*4));
}
}
var randNumber=Math.random()<0.5 ? 2:4;
numberArr[randx][randy]=randNumber;
showNumber();
}
}
function removeAll(){
var grid_container= document.getElementById('grid_container');
var nodes=grid_container.childNodes;
for(var i=nodes.length-1;i>=0;i--){
grid_container.removeChild(nodes[i]);
}
}
document.onkeydown=function(ev){
console.log(ev.keyCode);
switch(ev.keyCode){
case 37:
moveLeft();
getRandNumber();
isGameOver();
break;
case 38:
moveUp();
getRandNumber();
isGameOver();
break;
case 39:
moveRight();
getRandNumber();
isGameOver();
break;
case 40:
moveDown();
getRandNumber();
isGameOver();
break;
}
}
function moveLeft(){
if(canMoveLeft()==true){
for (var i = 0; i < 4; i++) {
for (var j = 1;j < 4; j++) {
if (numberArr[i][j]!=0) {
for(var k=0;k<j;k++){
if(numberArr[i][k]==0 && hasObstacleRow(i,k,j,numberArr)){
numberArr[i][k]=numberArr[i][j];
numberArr[i][j]=0;
}
else if(numberArr[i][k]==numberArr[i][j] && hasObstacleRow(i,k,j,numberArr)){
numberArr[i][k]+=numberArr[i][j];
score+=numberArr[i][k];
document.getElementById('score').innerText=score;
numberArr[i][j]=0;
}
}
}
}
}
return true;
}
return false;
}
function moveUp(){
if(canMoveUp()==true){
for (var i = 1; i < 4; i++) {
for (var j = 0;j < 4; j++) {
if (numberArr[i][j]!=0) {
for(var k=0;k<i;k++){
if(numberArr[k][j]==0 && hasObstacleCol(j,k,i,numberArr)){
numberArr[k][j]=numberArr[i][j];
numberArr[i][j]=0;
}
else if(numberArr[k][j]==numberArr[i][j] && hasObstacleCol(j,k,i,numberArr)){
numberArr[k][j]+=numberArr[i][j];
score+=numberArr[i][k];
document.getElementById('score').innerText=score;
numberArr[i][j]=0;
}
}
}
}
}
return true;
}
return false;
}
function moveRight(){
if(canMoveRight()==true){
for (var i = 0; i < 4; i++) {
for (var j = 2;j >=0; j--) {
if (numberArr[i][j]!=0) {
for(var k=3;k>j;k--){
if(numberArr[i][k]==0 && hasObstacleRow(i,j,k,numberArr)){
numberArr[i][k]=numberArr[i][j];
numberArr[i][j]=0;
}
else if(numberArr[i][k]==numberArr[i][j] && hasObstacleRow(i,j,k,numberArr)){
numberArr[i][k]+=numberArr[i][j];
score+=numberArr[i][k];
document.getElementById('score').innerText=score;
numberArr[i][j]=0;
}
}
}
}
}
return true;
}
return false;
}
function moveDown(){
if(canMoveDown()==true){
for (var i = 2; i >= 0; i--) {
for (var j=0;j<4;j++) {
if (numberArr[i][j]!=0){
for(var k=3;k>i;k--){
if(numberArr[k][j]==0 && hasObstacleCol(j,i,k,numberArr)){
numberArr[k][j]=numberArr[i][j];
numberArr[i][j]=0;
}
else if(numberArr[k][j]==numberArr[i][j] && hasObstacleCol(j,i,k,numberArr)){
numberArr[k][j]+=numberArr[i][j];
score+=numberArr[i][k];
document.getElementById('score').innerText=score;
numberArr[i][j]=0;
}
}
}
}
}
return true;
}
return false;
}
function isGameOver(){
if(hasEmptyPosition()==false
&& canMoveLeft()==false
&& canMoveRight()==false
&& canMoveUp()==false
&& canMoveDown()==false){
alert("Game Over!");
}
}
function setBgColor(number){
switch(number){
case 2:return "#DEEDED";break;
case 4:return "#C1EBDD";break;
case 8:return "#C3ECC4";break;
case 16:return "#9FE4A1";break;
case 32:return "#7EDA88";break;
case 64:return "#E39DD6";break;
case 128:return "#F6B0A6";break;
case 256:return "#F69463";break;
case 512:return "#F36039";break;
case 1024:return "#E9D174";break;
case 2048:return "#EDC950";break;
case 4096:return "#F2C723";break;
case 8192:return "#F63E32";break;
}
}
function setColor(number){
if(number<=4){
return "#776e65";
}
else{
return "#fff";
}
}
function hasEmptyPosition(){
for (var i = 0; i < 4; i++) {
for(var j=0;j<4;j++){
if(numberArr[i][j]==0){
return true;
}
}
}
return false;
}
function canMoveLeft(){
for (var i = 0; i < 4; i++) {
for(var j=1;j<4;j++){
if (numberArr[i][j-1]==0||numberArr[i][j-1]==numberArr[i][j]) {
return true;
}
}
}
return false;
}
function canMoveRight(){
for (var i = 0; i < 4; i++) {
for(var j=2;j>=0;j--){
if (numberArr[i][j+1]==0||numberArr[i][j+1]==numberArr[i][j]) {
return true;
}
}
}
return false;
}
function canMoveUp(){
for (var i = 1; i < 4; i++) {
for(var j=0;j<4;j++){
if (numberArr[i-1][j]==0 || numberArr[i-1][j]==numberArr[i][j]) {
return true;
}
}
}
return false;
}
function canMoveDown(){
for(var i=2;i>=0;i--){
for (var j = 0; j <4; j++) {
if(numberArr[i+1][j]==0 || numberArr[i+1][j]==numberArr[i][j]){
return true;
}
}
}
return false;
}
function hasObstacleRow(row,col1,col2,numberArr){
for (var i =col1+1; i < col2; i++) {
if(numberArr[row][i]!=0){
return false;
}
}
return true;
}
function hasObstacleCol(col,row1,row2,numberArr){
for (var i =row1+1; i < row2; i++) {
if(numberArr[i][col]!=0){
return false;
}
}
return true;
}
<header>
<h1>网页版2048</h1>
<a id="newgamebutton" href="#">New Game</a>
<p>Score: <span id="score">0</span></p>
</header>
<div id="grid_container">
</div>
<div class="name">
<div class="w">
<hr />
<a><strong>版权所有</strong>:</a>
<a>ljjwy</a>
</div>
</div>
body,h1,a,p,span,div{
margin: 0;
padding: 0;
}
a{
text-decoration: none;
}
body{
background: #DFF9F0;
font-family: Arial;
margin-bottom: 30px;
}
header{
text-align: center;
margin: 20px auto;
color:#238A91;
}
header h1{
font-size: 48px;
font-weight: bold;
}
header #newgamebutton{
width: 100px;
height: 30px;
display: block;
margin: 20px auto;
text-align: center;
line-height: 30px;
background: #54BBBA;
border-radius: 10px;
padding: 5px;
color: #fff;
}
header #newgamebutton:hover{
background: #9f8b77;
}
header p{
font-size: 28px;
font-weight: bold;
}
#grid_container{
width: 460px;
height: 460px;
padding: 20px;
background: #53BAB8;
margin: 0 auto;
border-radius: 6px;
position: relative;
}
.grid_cell{
width: 100px;
height: 100px;
border-radius: 6px;
background: #76D0D0;
position: absolute;
}
.number_cell{
width: 100px;
height: 100px;
border-radius: 6px;
line-height: 100px;
text-align:center;
font-size: 60px;
font-weight: bold;
position: absolute;
}
.name{
height: 10px;
text-align: center;
}