<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>2048</title> <style> *{margin: 0; padding: 0} #div1024{width: 600px; margin: 50px auto;overflow: hidden} .main{float: left;margin-right: 50px;} li{list-style:none} .main>li{width: 328px;overflow: hidden} .main>li ul li{border: 1px solid #6666ff;width: 80px;height: 80px;border-collapse:collapse; text-align: center;line-height: 80px;font-size: 36px;float: left } </style> </head> <body> <div id="div1024"> <ul class="main"> <li class="line0"><ul> <li></li> <li></li> <li></li> <li></li> </ul></li> <li class="line1"><ul> <li></li> <li></li> <li></li> <li></li> </ul></li> <li class="line2"><ul> <li></li> <li></li> <li></li> <li></li> </ul></li> <li class="line3"><ul> <li></li> <li></li> <li></li> <li></li> </ul></li> </ul> <div style="float: left; margin-top: 120px;"> <div>分数:<span id="score">0</span></div> <div>计数:<span id="step">0</span></div> <div>玩法:<span id="tips">用方向键操作</span></div> <div>提示:<span id="tip"></span></div> </div> </div> <script> window.onload=function(){ var game={ // 随机产生的数字 num:0, //剩余空格 counts:0, score:0, step:0, //横向数组与纵向数组 arr:[], arr1:[], init:function(){ game.style() document.getElementById(‘tip‘).innerHTML=‘游戏开始啦...‘ this.add() this.add() }, add:function(){ var x=false,y=false Math.random() > 0.5 ? this.num=2 :this.num=4 var Lindex=Math.floor(Math.random()*4), Rindex=Math.floor(Math.random()*4), dom=document.getElementsByClassName(‘line‘+Lindex)[0].getElementsByTagName(‘li‘)[Rindex] if(dom.innerHTML==‘‘) { dom.className=‘style‘+this.num dom.innerHTML=this.num } else{ this.count() if(this.counts==0){ //判断横向是否有值相同 outerloop0: for(var i=0;i<4;i++){ for(var j=0;j<this.arr[i].length-1;j++){ if(this.arr[i][j]==this.arr[i][j+1]){ x=true break outerloop0; } } } //判断纵向是否有值相同 outerloop1: for(var i=0;i<4;i++){ for(var j=0;j<this.arr1[i].length-1;j++){ if(this.arr1[i][j]==this.arr1[i][j+1]){ y=true break outerloop1 } } } if(!x && !y ){ alert(‘gameovar,你的分数是‘+this.score) }else if(x){ if(arguments[0].keyCode==37 || arguments[0].keyCode==39){ this.step++ } } else if(y){ if(arguments[0].keyCode==38 || arguments[0].keyCode==40){ this.step++ } } }else{ this.add() } } }, left:function(){ //数组值合并 for(var i=0;i<4;i++){ for(var j=0;j<this.arr[i].length-1;j++){ if(this.arr[i][j]==this.arr[i][j+1]){ this.score+=this.arr[i][j]*2 this.arr[i][j]+=this.arr[i][j] this.arr[i].splice(j+1,1) } } } //赋值给dom for(var i=0;i<4;i++){ len=this.arr[i].length for(var m=0;m<4;m++){ document.getElementsByClassName(‘line‘+i)[0].getElementsByTagName(‘li‘)[m].className=‘‘ document.getElementsByClassName(‘line‘+i)[0].getElementsByTagName(‘li‘)[m].innerHTML=‘‘ } for(var j=0;j<len;j++){ document.getElementsByClassName(‘line‘+i)[0].getElementsByTagName(‘li‘)[j].innerHTML=this.arr[i][j] document.getElementsByClassName(‘line‘+i)[0].getElementsByTagName(‘li‘)[j].className=‘style‘+this.arr[i][j] } } if(this.counts!=0) this.step++ }, right:function(){ //数组值合并 for(var i=0;i<4;i++){ for(var j=this.arr[i].length-1;j>0;j--){ if(this.arr[i][j]==this.arr[i][j-1]){ this.score+=this.arr[i][j-1]*2 this.arr[i][j]+=this.arr[i][j] this.arr[i].splice(j-1,1) } } } //赋值给dom for(var i=0;i<4;i++){ len=this.arr[i].length for(var m=0;m<4;m++){ document.getElementsByClassName(‘line‘+i)[0].getElementsByTagName(‘li‘)[m].className=‘‘ document.getElementsByClassName(‘line‘+i)[0].getElementsByTagName(‘li‘)[m].innerHTML=‘‘ } for(var j=0;j<len;j++){ document.getElementsByClassName(‘line‘+i)[0].getElementsByTagName(‘li‘)[3-j].innerHTML=this.arr[i][len-1-j] document.getElementsByClassName(‘line‘+i)[0].getElementsByTagName(‘li‘)[3-j].className=‘style‘+this.arr[i][len-1-j] } } if(this.counts!=0) this.step++ this.log(this.arr) }, up:function(){ //数组值合并 for(var i=0;i<4;i++){ for(var j=0;j<this.arr1[i].length-1;j++){ if(this.arr1[i][j]==this.arr1[i][j+1]){ this.score+=this.arr1[i][j]*2 this.arr1[i][j]+=this.arr1[i][j] this.arr1[i].splice(j+1,1) } } } //赋值给dom for(var i=0;i<4;i++){ len=this.arr1[i].length for(var m=0;m<4;m++){ document.getElementsByClassName(‘line‘+m)[0].getElementsByTagName(‘li‘)[i].className=‘‘ document.getElementsByClassName(‘line‘+m)[0].getElementsByTagName(‘li‘)[i].innerHTML=‘‘ } for(var j=0;j<len;j++){ document.getElementsByClassName(‘line‘+j)[0].getElementsByTagName(‘li‘)[i].innerHTML=this.arr1[i][j] document.getElementsByClassName(‘line‘+j)[0].getElementsByTagName(‘li‘)[i].className=‘style‘+this.arr1[i][j] } } if(this.counts!=0) this.step++ }, down:function(){ //数组值合并 for(var i=0;i<4;i++){ for(var j=this.arr1[i].length-1;j>0;j--){ if(this.arr1[i][j]==this.arr1[i][j-1]){ this.score+=this.arr1[i][j-1]*2 this.arr1[i][j]+=this.arr1[i][j] this.arr1[i].splice(j-1,1) } } } //赋值给dom for(var i=0;i<4;i++){ len=this.arr1[i].length for(var m=0;m<4;m++){ document.getElementsByClassName(‘line‘+m)[0].getElementsByTagName(‘li‘)[i].className=‘‘ document.getElementsByClassName(‘line‘+m)[0].getElementsByTagName(‘li‘)[i].innerHTML=‘‘ } for(var j=0;j<len;j++){ document.getElementsByClassName(‘line‘+(4-len+j))[0].getElementsByTagName(‘li‘)[i].innerHTML=this.arr1[i][j] document.getElementsByClassName(‘line‘+(4-len+j))[0].getElementsByTagName(‘li‘)[i].className=‘style‘+this.arr1[i][j] } } if(this.counts!=0) this.step++ }, count:function(){ var inner, inner1, m= 0, n=0 this.counts=0 //横向数组,用于左右操作 for(var i=0;i<4;i++){ this.arr[i]=[] m=0 for(var j=0;j<4;j++){ inner=document.getElementsByClassName(‘line‘+i)[0].getElementsByTagName(‘li‘)[j].innerHTML if(inner){ this.arr[i][m]=Number(inner) m++ } else{ this.counts++ } } } this.log(this.arr) //纵向数组用于上下操作 for(var x=0;x<4;x++){ this.arr1[x]=[] } for(var x=0;x<4;x++){ n=0 for(var y=0;y<4;y++){ inner1=document.getElementsByClassName(‘line‘+y)[0].getElementsByTagName(‘li‘)[x].innerHTML if(inner1){ this.arr1[x][n]=Number(inner1) n++ } } } }, log:function(x){ console.log(x) }, update:function(){ document.getElementById(‘score‘).innerHTML=this.score document.getElementById(‘step‘).innerHTML=this.step var tip=document.getElementById(‘tip‘) var max=this.arr.toString().split(‘,‘) function sort(a,b){return a-b} max=max.sort(sort)[max.length-1] if(max==512){tip.innerHTML=‘加油加油...‘} if(max==1024){tip.innerHTML=‘唉哟,不错喔...‘} if(max==2048){tip.innerHTML=‘恭喜你成功了,太厉害了...‘} if(max==4096){tip.innerHTML=‘超神了...‘} if(max==8192){tip.innerHTML=‘XX,出现bug了...‘} }, style:function(){ var values=[2,4,8,16,32,64,128,256,512,1024,2048,4096,8192], add=0.075, styles=‘‘ for(var i=0;i<values.length;i++){ styles+=‘.style‘+values[i]+‘{background-color:hsla(360,50%,50%,‘+add+‘);}\r\n‘ add+=0.075 } document.getElementsByTagName(‘style‘)[0].innerHTML+=styles } } game.init() document.onkeydown=function(e){ game.count() e=e || window.event switch (e.keyCode){ case 37 : game.left() game.add(e) game.update() break case 38 : game.up() game.add(e) game.update() break case 39 : game.right() game.add(e) game.update() break case 40 : game.down() game.add(e) game.update() break default : break } } } </script> </body> </html>
时间: 2024-10-16 23:23:56