1. 程式人生 > 程式設計 >JS原生2048小遊戲原始碼分享(全網最新)

JS原生2048小遊戲原始碼分享(全網最新)

最近在學習演算法方面的知識,看到了一個由演算法主導的小遊戲,這裡給大家分享下程式碼:

效果:

JS原生2048小遊戲原始碼分享(全網最新)

程式碼:

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=360px,user-scalable=no" />
    <title>2048小遊戲</title>
    <style>
        body,h1,div,table,tr,td{
            margin: 0px;
            padding: 0px;
        }
        body{
   
程式設計客棧
background-color: rgb(0,0); } h1{ margin: 36px auto; text-align: center; color: rgba(255,255,0.7); font-family: "楷體"; font-size: 48px; text-shadow: 1px 2px 3px rgb(134,134,134); } div{ margin: 12px auto; line-height: 60px; } #box{ margin-top: -24px; width: 240px; height: 60px; text-align: center; font-weight: bold; color: rgb(255,255); } #box input{ border: 3px solid rgb(255,255); border-radius: 4px; box-shadow: 1px 2px 3px rgb(234,234,234); } #box input:focus{ outline-style: none; } table{ margin: 24px auto; border: 3px solid rgb(255,255); border-radius: 6px; } #random,td{ width: 60px; height: 60px; border: 2px solid rgb(255,255); border-radius: 18px;
程式設計
客棧
text-align: center; font-weight: bold; color: rgb(255,255); } td:hover{ cursor: pointer; } </style> </head> <body> <h1>2 0 4 8</h1> <!-- 顯示得分及新遊戲按鈕 --> <div id="box"> 得分: <span id="span">0</span> <input id="but" type="button" value="新遊戲" /> </div> <!-- 顯示隨機數 --> <div id="random"></div> <!-- 遊戲主要佈局 --> <table border="3px"> <tr> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td></td> </tr> </table> </body> <script type="text/
javascript
"> var span = document.getElementById("span"); var but = document.getElementById("but"); var td = document.getElementsByTagName("td"); //定義得分 var score = 0; //定義隨機數 var random = document.getElementById("random"); var showNums = [2,4,8,16,32,64,128,256,512,1024]; var showNum = 0; //定義背景色陣列 var colors = ["rgb(255,169,182)","rgb(108,251,104)","rgb(255,150,46)",121,217,"rgb(46,200,255)",113,"rgb(240,46,175)","rgb(153,255)"]; //初始化程式,生成隨機數 /* start */ function init(){ var max = maxNum(); var num = 0; for(var i=4;i > 0;i++){ if(max < Math.pow(2,i+1)){ num = parseInt(Math.random()*i); break; }else if(max < 2048){ continue; }else{ num = parseInt(Math.random()*showNums.length); break; } } random.innerHTML = showNums[num]; color(random); showNum = showNums[num]; } init(); /* end */ //獲取棋盤中的最大值 /* start */ function maxNum(){ var max = 0; for(var i=0;i<td.length;i++){ if(td[i].innerHTML == ""){ max = max; }else{ if(parseInt(td[i].innerHTML) > max){ max = parseInt(td[i].innerHTML); }else{ max = max; } } } return max; } /* end */ //根據數字顯示背景顏色 /* start */ function color(obj){ for(var i=0;i < colors.length;i++){ if(obj.innerHTML == Math.pow(2,i+1)){ obj.style = "background-color: "+colors[i]+";"; break; } } } /* end */ //合併演算法 /* start */ function offsetTop(obj,index){//合併上 if(index > 3){ if(td[(index-4)].innerHTML == obj.innerHTML){ td[(index-4)].innerHTML = ""; td[(index-4)].style = "background-color: rgba(0,0);"; return true; } } return false; } function offsetBottom(obj,index){//合併下 if(index < 12){ if(td[(index+4)].innerHTML == obj.innerHTML){ td[(index+4)].innerHTML = ""; td[(index+4)].style = "background-color: rgba(0,0);"; return true; } } return false; } function offsetLeft(obj,index){//合併左 if(index!=0 && index!=4 && index!=8 && index!=12){ if(td[(index-1)].innerHTML == obj.innerHTML){ td[(index-1)].innerHTML = ""; td[(index-1)].style = "background-color: rgba(0,0);"; return true; } } return false; } function offsetRight(obj,index){//合併右 if(index!=3 && index!=7 && index!=11 && index!=15){ if(td[(index+1)].innerHTML == obj.innerHTML){ td[(index+1)].innerHTML = ""; td[(index+1)].style = "background-color: rgba(0,0);"; return true; } } return false; } /* end */ //判斷單元格是否合併 /* start */ function merge(obj,index){ if(offsetTop(obj,index)){ if(offsetBottom(obj,index)){ if(offsetLeft(obj,index)){ if(offsetRight(obj,index)){ obj.innerHTML = parseInt(obj.innerHTML)*2;//合併上、下、左、右 score += 16; merge(obj,index); }else{ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併上、下、左 score += 8; merge(obj,index); } }else if(offsetRight(obj,index)){ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併上、下、右 score += 8; merge(obj,index); }else{ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併上、下 score += 4; merge(obj,index); } }else if(offsetLeft(obj,index)){ if(offsetRight(obj,index)){ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併上、左、右 score += 8; merge(obj,index); }else{ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併上、左 score += 4; merge(obj,index); } }else if(offsetRight(obj,index)){ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併上、右 score += 4; merge(obj,index); }else{ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併上 score += 2; merge(obj,index); } }else if(offsetBottom(obj,index)){ if(offsetLeft(obj,index)){ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併下、左、右 score += 8; merge(obj,index); }else{ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併下、左 score += 4; merge(obj,index)){ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併下、右 score += 4; www.cppcns.com merge(obj,index); }else{ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併下 http://www.cppcns.com score += 2; merge(obj,index); } }else if(offsetLeft(obj,index)){ if(offsetRight(obj,index)){ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併左、右 score += 4; merge(obj,index); }else{ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併左 score += 2; merge(obj,index); } }else if(offsetRight(obj,index)){ obj.innerHTML = parseInt(obj.innerHTML)*2;//僅合併右 score += 2; merge(obj,index); } } /* end */ //main /* start */ function gameOver(){ for(var i=0;i<td.length;i++){ if(td[i].innerHTML == ""){ break; } if(i == 15){ alert("很遺憾!本局遊戲結束。。。"); } } } /* end */ //main /* start */ (function(){ for(var i=0;i<td.length;i++){ var choose = td[i]; choose.index = i; choose.onclick = function(){ if(this.innerHTML == ""){ this.innerHTML = showNum; bhSOfHOI merge(this,this.index); if(this.innerHTML >= 2048){ this.innerHTML = ""; this.style = "background-color: rgba(0,0);"; } color(this); init(); } updateScore(); gameOver(); } } })(); /* end */ //更新得分 /* start */ function updateScore(){ if(score > 500){ span.style = "color: rgb(255,0)"; }else if(score > 100){ span.style = "color: rgb(255,255)"; }else if(score > 50){ span.style = "color: rgb(255,0)"; }else if(score > 20){ span.style = "color: rgb(0,255)"; }else if(score > 10){ span.style = "color: rgb(0,0)"; } span.innerHTML = score; } /* end */ //新遊戲 /* start */ but.onclick = function(){ location.reload(); } /* end */ </script> </html>

到此這篇關於js原生2048小遊戲原始碼分享的文章就介紹到這了,更多相關js 2048小遊戲內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!