JavaScript 2048 遊戲實例程式碼(簡單易懂)_javascript技巧
廢話不多說了,直接給大家貼程式碼了,覺得很滿意直接拿去。
<!DOCTYPE html PUBLIC "-//WC//DTD XHTML . Transitional//EN" "http://www.w.org/TR/xhtml/DTD/xhtml-transitional.dtd"> <html xmlns="http://www.w.org//xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-" /> <title>无标题文档</title> <style> header{display:block; margin: auto; width:%; text-align:center;} header h{font-size:px; font-family:Arial, Helvetica, sans-serif; font-weight:bold;} header #newgamebutton{display:block; margin:px auto; width:px; padding:px px; background-color:#fa; font-family:Arial; color:white; border-radius:px; text-decoration:none;} header #newgamebutton:hover{background-color:#fb;} header p{font-family:Arial; font-size:px; margin:px auto;} #grid-container{width:px; height:px; padding:px; margin:px auto; background-color:#bbada; border-radius:px; position:relative;} .grid-cell{width:px; height:px; border-radius:px; color:white; background-color:#cccb; position:absolute; font-family:Arial; font-weight:bold; font-size:px; line-height:px; text-align:center;} .gameover{display:block; margin: auto; width:px; text-align:center; vertical-align:middle; position:absolute;} .gameover p { font-family: Arial; font-size: px; color: white; margin: px auto; margin-top: px; } .gameover span { font-family: Arial; font-size: px; color: white; margin: px auto; } #restartgamebutton { display: block; margin: px auto; width: px; padding: px px; background-color: #fa; font-family: Arial; font-size: px; color: white; border-radius: px; text-decoration: none; } #restartgamebutton:hover { background-color: #fb; } #showGameover{width:px; padding:px px; background-color:#fa; font-family:Arial; color:white; border-radius:px; text-decoration:none; font-size:px; position:absolute;} </style> <script> window.onload = function (){ //newgame(); var showScore = document.getElementById('score'); score = ; init(); generateOneNumber(); generateOneNumber(); window.onkeydown = function (e){ var e = e || window.event; switch(e.keyCode){ case : if(canMoveLeft(board)){ moveLeft(); generateOneNumber(); isgameover(); } break; case : if(canMoveUp(board)){ moveUp(); generateOneNumber(); isgameover(); } break; case : if(canMoveRight(board)){ moveRight(); generateOneNumber(); isgameover(); } break; case : if(canMoveDown(board)){ moveDown(); generateOneNumber(); isgameover(); } break; default : break; } }; }; function generateOneNumber() { if(!nospace(board)){ var randx = parseInt(Math.floor(Math.random() * )); var randy = parseInt(Math.floor(Math.random() * )); while (true) { if (board[randx][randy] == ) { break; } var randx = parseInt(Math.floor(Math.random() * )); var randy = parseInt(Math.floor(Math.random() * )); } var randNumber = Math.random() < . ? : ; board[randx][randy] = randNumber; var gridCell = document.getElementById('grid-cell-'+randx+'-'+randy); gridCell.innerHTML = randNumber; // } else { gameover(); } } function newgame() { window.location.reload(); } var board = new Array(); function init(){ for(var i=;i<;i++){ board[i] = new Array(); for(var j=;j<;j++){ board[i][j] = ; var gridCell = document.getElementById('grid-cell-'+i+'-'+j); gridCell.style.top = (+i*)+'px'; gridCell.style.left = (+j*)+'px'; } } } function getNumberBackgroundColor(number) { switch (number) { case :return "#eeeda";break; case :return "#edec";break; case :return "#fb";break; case :return "#f";break; case :return "#fcf";break; case :return "#feb";break; case :return "#edcf";break; case :return "#edcc";break; case :return "#c";break; case :return "#be";break; case :return "#c";break; case :return "#ac";break; case :return "#c";break; } } function getNumberColor(number) { if (number <= ) { return "#e" } return "white"; } function nospace(board) { for (var i = ; i < ; i++) { for (var j = ; j < ; j++) { if (board[i][j] == ) { return false; } } } return true; } function canMoveLeft(board) { for (var i = ; i < ; i++) { for (var j = ; j < ; j++) { if (board[i][j] != ) { if (board[i][j - ] == || board[i][j - ] == board[i][j]) {return true; } } } } return false; } function moveLeft() { for (var i = ; i < ; i++) { for (var j = ; j < ; j++) { if (board[i][j] != ) { for (var k = j-; k > -; k--) { if(board[i][k] == || board[i][k] == board[i][j]){ board[i][k] = board[i][k] + board[i][j]; board[i][j] = ; var gridCell = document.getElementById('grid-cell-'+i+'-'+j); gridCell.innerHTML = ''; var gridCellk = document.getElementById('grid-cell-'+i+'-'+k); gridCellk.innerHTML = board[i][k]; gridCellk.style.backgroundColor = getNumberBackgroundColor(board[i][k]); gridCell.style.backgroundColor = '#cccb'; gridCellk.style.color = getNumberColor(board[i][k]); gridCell.style.color = 'white'; score += board[i][k]; var showScore = document.getElementById('score'); showScore.innerHTML = score; j = k; // } else { break; //跳出 var k 的for循环 } } } } } } function canMoveUp(board) { for (var j = ; j < ; j++) { for (var i = ; i < ; i++) { if (board[i][j] != ) { if (board[i - ][j] == || board[i - ][j] == board[i][j]) {return true; } } } } return false; } function moveUp() { for (var j = ; j < ; j++) { for (var i = ; i < ; i++) { if (board[i][j] != ) { for (var k = i-; k > -; k--) { if(board[k][j] == || board[k][j] == board[i][j]){ board[k][j] = board[k][j] + board[i][j]; board[i][j] = ; var gridCell = document.getElementById('grid-cell-'+i+'-'+j); gridCell.innerHTML = ''; var gridCellk = document.getElementById('grid-cell-'+k+'-'+j); gridCellk.innerHTML = board[k][j]; gridCellk.style.backgroundColor = getNumberBackgroundColor(board[k][j]); gridCell.style.backgroundColor = '#cccb'; gridCellk.style.color = getNumberColor(board[i][k]); gridCell.style.color = 'white'; score += board[k][j]; var showScore = document.getElementById('score'); showScore.innerHTML = score; i = k; // } else { break; //跳出 var k 的for循环 } } } } } } function canMoveRight(board) { for (var i = ; i < ; i++) { for (var j = ; j > -; j--) { if (board[i][j] != ) { if (board[i][j + ] == || board[i][j + ] == board[i][j]) {return true; } } } } return false; } function moveRight() { for (var i = ; i < ; i++) { for (var j = ; j > -; j--) { if (board[i][j] != ) { for (var k = j+; k < ; k++) { if(board[i][k] == || board[i][k] == board[i][j]){ board[i][k] = board[i][k] + board[i][j]; board[i][j] = ; var gridCell = document.getElementById('grid-cell-'+i+'-'+j); gridCell.innerHTML = ''; var gridCellk = document.getElementById('grid-cell-'+i+'-'+k); gridCellk.innerHTML = board[i][k]; gridCellk.style.backgroundColor = getNumberBackgroundColor(board[i][k]); gridCell.style.backgroundColor = '#cccb'; gridCellk.style.color = getNumberColor(board[i][k]); gridCell.style.color = 'white'; score += board[i][k]; var showScore = document.getElementById('score'); showScore.innerHTML = score; j = k; // } else { break; //跳出 var k 的for循环 } } } } } } function canMoveDown(board) { for (var j = ; j < ; j++) { for (var i = ; i > -; i--) { if (board[i][j] != ) { if (board[i + ][j] == || board[i + ][j] == board[i][j]) {return true; } } } } return false; } function moveDown() { for (var j = ; j < ; j++) { for (var i = ; i > -; i--) { if (board[i][j] != ) { for (var k = i+; k < ; k++) { if(board[k][j] == || board[k][j] == board[i][j]){ board[k][j] = board[k][j] + board[i][j]; board[i][j] = ; var gridCell = document.getElementById('grid-cell-'+i+'-'+j); gridCell.innerHTML = ''; var gridCellk = document.getElementById('grid-cell-'+k+'-'+j); gridCellk.innerHTML = board[k][j]; gridCellk.style.backgroundColor = getNumberBackgroundColor(board[k][j]); gridCell.style.backgroundColor = '#cccb'; gridCellk.style.color = getNumberColor(board[i][k]); gridCell.style.color = 'white'; score += board[k][j]; var showScore = document.getElementById('score'); showScore.innerHTML = score; i = k; // } else { break; //跳出 var k 的for循环 } } } } } } function isgameover() { if (nospace(board) && nomove(board)) { gameover(); } } function nomove(board) { if (canMoveDown(board) || canMoveLeft(board) || canMoveRight(board) || canMoveUp(board)) { return false; } return true; } function bounce(obj,top){ clearInterval(obj.timer); var nSpeed = ; var acceleration = ; var Flag = ; obj.timer = setInterval(function (){ nSpeed += acceleration; nSpeed *= .; if(obj.offsetTop + nSpeed >= top){ obj.style.top = top + 'px'; nSpeed *= -; }else{ if(Math.abs(nSpeed) < && Math.abs(top-obj.offsetTop)<){ clearInterval(obj.timer); } else{ obj.style.top = obj.offsetTop + nSpeed + 'px'; } } },); } function gameover() { //alert("gameover!"); var gameover = document.createElement('div'); gameover.id = 'showGameover'; gameover.innerHTML = 'GAME OVER'; var gridContainer = document.getElementById('grid-container'); gridContainer.appendChild(gameover); var showGameover = document.getElementById('showGameover'); showGameover.style.left = (gridContainer.offsetWidth - showGameover.offsetWidth ) / + 'px'; bounce(showGameover,); } </script> </head> <body> <header> <!--<h> </h>--> <a href="javascript:newgame();" id="newgamebutton"> New Game </a> <p> score: <span id="score"></span></p> <div id="grid-container"> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> <div class="grid-cell" id="grid-cell--"></div> </div> </header> </body> </html>
以上程式碼還很滿意吧,都是些div+css方面的知識,程式碼有問題歡迎各位親提出寶貴意見,共同學習進步,同時也非常感謝大家對腳本之家網站的支持,謝謝!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。
