标签:style c class blog code java
前段时间,看了一个视频,用javascript实现的2048小游戏,发现不难,都是一些基出的语法和简单逻辑。
整个2048游戏没有很多的数据,所有,实现起来还是很有成就感的。
先上图,简直就和原版游戏一样一样的。
下面分享一下整个2048游戏的代码逻辑:
首先,搭建游戏框架
其次,开始我们的代码编写
index.html
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>网页版2048</title> <link rel="stylesheet" type="text/css" href="index.css" /> <script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.0/jquery.min.js"></script> <script type="text/javascript" src="support2048.js"></script> <script type="text/javascript" src="showanimation2048.js"></script> <script type="text/javascript" src="main2048.js"></script> </head> <body> <header> <h1>2048</h1> <a href="javascript:newgame();" id="newgamebutton">New Game</a> <p> score:<span id="score">0</span> </p> </header> <div id="grid-container"> <div class="grid-cell" id="grid-cell-0-0"></div> <div class="grid-cell" id="grid-cell-0-1"></div> <div class="grid-cell" id="grid-cell-0-2"></div> <div class="grid-cell" id="grid-cell-0-3"></div> <div class="grid-cell" id="grid-cell-1-0"></div> <div class="grid-cell" id="grid-cell-1-1"></div> <div class="grid-cell" id="grid-cell-1-2"></div> <div class="grid-cell" id="grid-cell-1-3"></div> <div class="grid-cell" id="grid-cell-2-0"></div> <div class="grid-cell" id="grid-cell-2-1"></div> <div class="grid-cell" id="grid-cell-2-2"></div> <div class="grid-cell" id="grid-cell-2-3"></div> <div class="grid-cell" id="grid-cell-3-0"></div> <div class="grid-cell" id="grid-cell-3-1"></div> <div class="grid-cell" id="grid-cell-3-2"></div> <div class="grid-cell" id="grid-cell-3-3"></div> </div> </body> </html>
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>网页版2048</title> <link rel="stylesheet" type="text/css" href="index.css" /> <script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.0/jquery.min.js"></script> <script type="text/javascript" src="support2048.js"></script> <script type="text/javascript" src="showanimation2048.js"></script> <script type="text/javascript" src="main2048.js"></script> </head> <body> <header> <h1>2048</h1> <a href="javascript:newgame();" id="newgamebutton">New Game</a> <p> score:<span id="score">0</span> </p> </header> <div id="grid-container"> <div class="grid-cell" id="grid-cell-0-0"></div> <div class="grid-cell" id="grid-cell-0-1"></div> <div class="grid-cell" id="grid-cell-0-2"></div> <div class="grid-cell" id="grid-cell-0-3"></div> <div class="grid-cell" id="grid-cell-1-0"></div> <div class="grid-cell" id="grid-cell-1-1"></div> <div class="grid-cell" id="grid-cell-1-2"></div> <div class="grid-cell" id="grid-cell-1-3"></div> <div class="grid-cell" id="grid-cell-2-0"></div> <div class="grid-cell" id="grid-cell-2-1"></div> <div class="grid-cell" id="grid-cell-2-2"></div> <div class="grid-cell" id="grid-cell-2-3"></div> <div class="grid-cell" id="grid-cell-3-0"></div> <div class="grid-cell" id="grid-cell-3-1"></div> <div class="grid-cell" id="grid-cell-3-2"></div> <div class="grid-cell" id="grid-cell-3-3"></div> </div> </body> </html>
index.css
@CHARSET "UTF-8"; header{ display:block; margin:0 auto; width:500px; text-align:center; } header h1{ font-family:Arial, Helvetica, sans-serif; font-size:60px; font-weight:bold; } header #newgamebutton{ width:100px; padding:10px; background:#8f7a66; font-family:Arial, Helvetica, sans-serif; color:white; border-radius:10px; text-decoration:none; } header #newgamebutton:hover{ background:#9f8b77; } header p{ font-family:Arial, Helvetica, sans-serif; font-size:25px; margin:20px auto; } #grid-container{ width:460px; height:460px; padding:20px; margin:50px auto; background:#bbada0; border-radius:10px; position:relative; } .grid-cell{ width:100px; height:100px; border-radius:6px; background:#ccc0b3; position:absolute; } .number-cell{ width:100px; height:100px; border-radius:6px; line-height:100px; font:Arial, Helvetica, sans-serif; font-size:60px; font-weight:bold; text-align: center; position:absolute; }
main2048.js
var board = new Array(); var score = 0; var top = 240; $(document).ready(function(e){ newgame(); }); function newgame(){ //初始化棋盘格 init(); //在随机两个各自声称的数字 generateOneNumber(); generateOneNumber(); } function init(){ for(var i = 0;i<4;i++){ for(var j = 0;j<4;j++){ var gridCell = $("#grid-cell-"+i+"-"+j); gridCell.css("top",getPosTop(i,j)); gridCell.css("left",getPosLeft(i,j)); } } for(var i = 0; i<4;i++){ board[i] = new Array(); for(var j = 0;j<4;j++){ board[i][j] = 0; } } updateBoardView();//通知前端对board二位数组进行设定。 } function updateBoardView(){ $(".number-cell").remove(); for(var i = 0;i<4;i++){ for ( var j = 0; j < 4; j++) { $("#grid-container").append(‘<div class="number-cell" id="number-cell-‘+i+‘-‘+j+‘"></div>‘); var theNumberCell = $(‘#number-cell-‘+i+‘-‘+j); if(board[i][j] == 0){ theNumberCell.css(‘width‘,‘0px‘); theNumberCell.css(‘height‘,‘0px‘); theNumberCell.css(‘top‘,getPosTop(i,j)); theNumberCell.css(‘left‘,getPosLeft(i,j)); }else{ theNumberCell.css(‘width‘,‘100px‘); theNumberCell.css(‘hegiht‘,‘100px‘); theNumberCell.css(‘top‘,getPosTop(i,j)); theNumberCell.css(‘left‘,getPosLeft(i,j)); //NumberCell覆盖 theNumberCell.css(‘background-color‘,getNumberBackgroundColor(board[i][j]));//返回背景色 theNumberCell.css(‘color‘,getNumberColor(board[i][j]));//返回前景色 theNumberCell.text(board[i][j]); } } } } function generateOneNumber(){ if (nospace(board)) return false; //随机一个位置 var randx = parseInt(Math.floor(Math.random()*4)); var randy = parseInt(Math.floor(Math.random()*4)); while(true){ if (board[randx][randy] == 0) break; randx = parseInt(Math.floor(Math.random()*4)); randy = parseInt(Math.floor(Math.random()*4)); } //随机一个数字 var randNumber = Math.random()<0.5 ?2 : 4; //在随机位置显示随机数字 board[randx][randy] = randNumber; showNumberWithAnimation(randx,randy,randNumber); return true; } //事件响应循环 $(document).keydown(function(event){ switch (event.keyCode) { case 37://left if(moveLeft()){ //setTimeout("generateOneNumber()",210); generateOneNumber();//每次新增一个数字就可能出现游戏结束 isgameover();//300毫秒 } break; case 38://up if(moveUp()){ generateOneNumber();//每次新增一个数字就可能出现游戏结束 isgameover(); } break; case 39://right if(moveRight()){ generateOneNumber();//每次新增一个数字就可能出现游戏结束 isgameover(); } break; case 40://down if(moveDown()){ generateOneNumber();//每次新增一个数字就可能出现游戏结束 isgameover(); } break; } }); function isgameover(){ if(nospace(board)&&nomove(board)) gameover(); } function gameover(){ alert("gameover"); } function moveLeft(){//更多地细节信息 //判断格子是否能够向左移动 if( !canMoveLeft(board)) return false; //真正的moveLeft函数//标准 for(var i = 0;i<4;i++) for(var j = 1;j<4;j++){//第一列的数字不可能向左移动 if(board[i][j] !=0){ //(i,j)左侧的元素 for(var k = 0;k<j;k++){ //落脚位置的是否为空 && 中间没有障碍物 if(board[i][k] == 0 && noBlockHorizontal(i , k, j, board)){ //move showMoveAnimation(i, j,i,k); board[i][k] = board[i][j]; board[i][j] = 0; continue; } //落脚位置的数字和本来的数字相等 && 中间没有障碍物 else if(board[i][k] == board[i][j] && noBlockHorizontal(i , k, j, board)){ //move showMoveAnimation(i, j,i,k); //add board[i][k] += board[i][j]; board[i][j] = 0; continue; } } } } setTimeout("updateBoardView()",200); return true; }
support2048.js
function getPosTop(i, j) { return 20 + i * 120; } function getPosLeft(i, j) { return 20 + j * 120; } function getNumberBackgroundColor(number) { switch (number) { case 2: return "#eee4da"; break; case 4: return "#eee4da"; break; case 8: return "#f26179"; break; case 16: return "#f59563"; break; case 32: return "#f67c5f"; break; case 64: return "#f65e36"; break; case 128: return "#edcf72"; break; case 256: return "#edcc61"; break; case 512: return "#9c0"; break; case 1024: return "#3365a5"; break; case 2048: return "#09c"; break; case 4096: return "#a6bc"; break; case 8192: return "#93c"; break; } return "black"; } function getNumberColor(number) { if (number <= 4){ return "#776e65"; } return "white"; } //在随机生成数字的时候判断16宫格中是否还有空间 function nospace(board) { for ( var i = 0; i < 4; i++) for ( var j = 0; j < 4; j++) if (board[i][j] == 0) return false; return true; } //实现功能判断 function canMoveLeft( board ){ for(var i = 0;i<4;i++) for(var j = 0;j<4;j++) if( board[i][j] !=0 ) if( board[i][j-1] == 0 || board[i][j-1] == board[i][j]) return true; return false; }//判断水平方向是否有障碍物 function noBlockHorizontal(row, col1, col2, board){ for(var i = col1 + 1; i<col2; i++) if(board[row][i]!=0) return false; return true; }//最后收尾 function nomove(board){ if(canMoveLeft(board)|| canMoveRight(board)) return false; return true; }
showanimation2048.js
function showNumberWithAnimation(i, j, randNumber) { var numberCell = $(‘#number-cell-‘ + i + ‘-‘ + j); numberCell.css("background-color", getNumberBackgroundColor(randNumber)); numberCell.css("color", getNumberColor(randNumber)); numberCell.text(randNumber); numberCell.animate({ width : "100px", height : "100px", top : getPosTop(i, j), left : getPosLeft(i, j) }, 50); } function showMoveAnimation(fromx, fromy, tox, toy){ var numberCell = $(‘#number-cell-‘+fromx +‘-‘+fromy); numberCell.animate({top:getPosTop(tox,toy), left:getPosLeft(tox,toy)},200); }
function showNumberWithAnimation(i, j, randNumber) { var numberCell = $(‘#number-cell-‘ + i + ‘-‘ + j); numberCell.css("background-color", getNumberBackgroundColor(randNumber)); numberCell.css("color", getNumberColor(randNumber)); numberCell.text(randNumber); numberCell.animate({ width : "100px", height : "100px", top : getPosTop(i, j), left : getPosLeft(i, j) }, 50); } function showMoveAnimation(fromx, fromy, tox, toy){ var numberCell = $(‘#number-cell-‘+fromx +‘-‘+fromy); numberCell.animate({top:getPosTop(tox,toy), left:getPosLeft(tox,toy)},200); }
在功能代码上只做了向左滑动,向右,向上,向下的功能代码基本一致。读者可以自行编写。
如果有需要在上传完整项目代码。
用javascript实现2048的小游戏,布布扣,bubuko.com
标签:style c class blog code java
原文地址:http://www.cnblogs.com/qiuge227/p/3747009.html