用JS怎样编写一个2048小游戏?
Admin 2021-10-22 群英技术资讯 326 次浏览
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,0); } h1{ margin: 36px auto; text-align: center; color: rgba(255,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,255); } #box input{ border: 3px solid rgb(255,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,255); border-radius: 6px; } #random,td{ width: 60px; height: 60px; border: 2px solid rgb(255,255,255); border-radius: 18px; text-align: center; font-weight: bold; color: rgb(255,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)","rgb(255, 121, 46)","rgb(255, 217, 46)", "rgb(46, 200, 255)","rgb(46, 113, 255)","rgb(240, 46, 255)","rgb(46, 255, 175)","rgb(153, 134, 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, 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, 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, 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, 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)){ 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(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; merge(this,this.index); if(this.innerHTML >= 2048){ this.innerHTML = ""; this.style = "background-color: rgba(0, 0, 0, 0);"; } color(this); init(); } updateScore(); gameOver(); } } })(); /* end */ //更新得分 /* start */ function updateScore(){ if(score > 500){ span.style = "color: rgb(255,0,0)"; }else if(score > 100){ span.style = "color: rgb(255,0,255)"; }else if(score > 50){ span.style = "color: rgb(255,255,0)"; }else if(score > 20){ span.style = "color: rgb(0,0,255)"; }else if(score > 10){ span.style = "color: rgb(0,255,0)"; } span.innerHTML = score; } /* end */ //新游戏 /* start */ but.onclick = function(){ location.reload(); } /* end */ </script> </html>
以上就是用JS怎样编写一个2048小游戏的代码了,需要的朋友可以参考。最后,想要了解更多用JS编写小游戏的方法,大家可以继续浏览群英网络其他相关的文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章给大家带来了关于javascript的相关知识,其中主要整理了编译原理的相关问题,Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,下面一起来看一下,希望对大家有帮助。
这篇文章主要介绍了antd form表单数据回显操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
今天给大家分享的是用vue怎样实现表格自定义列的效果,如果是做crm系统的朋友,应该常会遇到这样的需求,也就是用户可以按设置好的字段自定义排序或显示或隐藏表格的列,接下来我们详细了解看看这是怎样实现的吧。
本篇文章带大家聊聊Redux Hooks的使用细节,有不少朋友对此感兴趣,下面小编给大家整理和分享了相关知识和资料,易于大家学习和理解,有需要的朋友可以借鉴参考,下面我们一起来了解一下吧。
状况:本地的前端项目(uni-app)以及后台管理(vue-mongo-node)和本地mongo数据库前台项目端口是8082,后台数据接口是8081.跨域解决,直接上代码:uni-app的mainfest.json下: 红色部分代理(node设置允许跨域之后,不加这部分的代理也可以跨域请求) 可加可不加"app-plus":{/*5+App特有相关*/"splashsc
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008