js2048怎么添加更多格子

JavaScript016

js2048怎么添加更多格子,第1张

js2048新增格子方法

1. 操作描述:

      每按下方向键后若格子能够发生变动(即有移动或合并操作产生),便在移动或合并操作后剩下的空白处某一随机位置新增一个数值为2的格子。

2. 编程思路:

       我们需要结合其它方法来判断是否执行此方法,因此定义一个全局的布尔类型变量 moveAble,用作新增格子的“开关”。默认状态下让它“关闭”,即在声明时赋值为 false。在进行了移动或合并操作后将它“打开”,即在移动和合并的方法内部将true赋值给 moveAble。并在即将进行新一轮移动或合并操作前再将它“关闭”,即在上篇监听方法中执行向上/下/左/右方法之前将其值设为false。

      了解这个“开关”的作用后开始编写新增格子方法。首先判断 moveAble 是否为 true ,为 true 则继续进行,否则控制台返回“不能增加新格子,请尝试其他方向移动!”。接着遍历整个二维数组,将数值为空的坐标保存进局部定义的数组变量 ableArr 中,对下标进行随机方法,将最终的随机下标值和格子值(2)或随机下标值传入 arrValueUpdate 与 drawCell 方法中来画出新格子。 

JS本就是个先天残废的语言,能把DOM操作好就行了。。。真要搞大一点的项目,你有更好的语言可以学。。。

由于JS的诸多劣根性,不面向对象,弱类型,动态语言。。。其实靠学习JS,很难养成逻辑思维。。我相信录制视频的那个老师,在只学过JS,而没学过其他语言的时期,也是写不出2048的。。。

其实编程语言的特性和设计模式有很多,而JS的语言劣根性,导致其只具备了其中最基础的部分。。。稍微高级一些的东西。。在JS里其实是没有的。。所以JS即便学得再精。。。其实编程思想依然只是小学生水平。。。

比如继承,多态,委托,工厂模式,观察者模式,单例模式,二叉树,行为树,状态机,等等。。。如果只是通过学习JS,而不接触一门强类型,面向对象语言的话,这些特性,永远都无法涉足。。。所谓编程思想,也就止步于小学生水平了。。

这里推荐C#。。。为什么?因为它是未来JS改进方向的参照原形。。。2.0版的JAVASCRIPT,基本就可以看作是C#的山寨版。。。ECMA的JS改进计划,就是让JS越来越像C#。。当你学到这一步,会接触到一个叫unity 3d的东西,到时候你自然就能做出2048了。。。甚至你可以做出一个CS之类的3D游戏来。。。

不过这是以后的事情了。。。学习是一个循序渐进的过程,没有谁是一步登天的。。在学习JS的阶段,能把DOM操作好就足够了。。。这才是JS的本分。。。不需要指望JS再去干那些“与自己无关的事情”。。。那些都是一群学了JAVA,C#或者C++的老东西们,跑回JS的新手圈炫技装逼的产物而已。。。。。。。

这个是我总结的一些,希望对你有帮助

var FormUtils = {

//去前后空格

trimLeftandRight : function (string){

return string.replace(/(^\s*)|(\s*$)/g, "")

},

//非空判断

checkNull : function (string){

var pattern = /^[\s\S]+$/

if(!pattern.test(string)){

return true

}

return false

},

//长度范围限制

checkLengthRange : function (string , minLength , maxLength){

if(string.length <minLength || string.length >maxLength){

return true

}

return false

},

//最小长度

checkMinLength : function (string , minLength){

if(string.length <minLength){

return true

}

return false

},

//最大长度

checkMaxLength : function (string , maxLength){

if(string.length >maxLength){

return true

}

return false

},

//是否为Email

checkEmail : function (string){

var pattern = /^(\w+([-+.]\w+)*)@\w+([-.]\w+)*\.\w+([-.]\w+)*$/

if(!pattern.test(string)){

return true

}

return false

},

//检查中文输入

checkCN : function (string){

var pattern=/^[\u4e00-\u9fa5]*$/

if(!pattern.test(string)){

return true

}

return false

},

//检查英文输入

checkEN : function (string){

var pattern = /^[A-Za-z]*$/

if(!pattern.test(string)){

return true

}

return false

},

//检查数字输入

checkNum : function (string){

var pattern = /^[0-9]*$/

if(!pattern.test(string)){

return true

}

return false

},

//不能为纯下划线

checkLine : function (string){

var str = string.replace(/_/g,"")

if(str == null || str ==""){

return true

}

return false

},

//只能输入字母数字下划线

checkEnNumLine : function (string){

var pattern = /^(?:[\w]*)?$/

if(!pattern.test(string)){

return true

}

return false

},

//只能是字母、数字、下划线、空格、中文字符

checkEnNumLineSpaceCN : function (string){

var pattern = /^(?:[\w\s\u4e00-\u9fa5']*)?$/

if(!pattern.test(string)){

return true

}

return false

},

//检查身份证号

checkIdCard : function (string){

var pattern = /^([0-9]{15}|[0-9]{18})$/

if(!pattern.test(string)){

return true

}

return false

},

//测试

test : function (a){

var str = document.getElementById(a).value

alert(this.checkNull(str))

}

}

String.prototype.len = function(betyLen){

var len = 0

for(var i=0i<this.lengthi++){

if(this.charCodeAt(i)>127){

len +=betyLen

}else{

len ++

}

}

return len

}

var URL = {

//编码

encode : function (string) {

return escape(this.utf8_encode(string))

},

//解码

decode : function (string) {

return this.utf8_decode(unescape(string))

},

//UTF-8 编码

utf8_encode : function (string) {

string = string.replace(/\r\n/g,"\n")

var utftext = ""

for (var n = 0n <string.lengthn++) {

var c = string.charCodeAt(n)

if (c <128) {

utftext += String.fromCharCode(c)

}

else if((c >127) &&(c <2048)) {

utftext += String.fromCharCode((c >>6) | 192)

utftext += String.fromCharCode((c &63) | 128)

}

else {

utftext += String.fromCharCode((c >>12) | 224)

utftext += String.fromCharCode(((c >>6) &63) | 128)

utftext += String.fromCharCode((c &63) | 128)

}

}

return utftext

},

//UTF-8解码

utf8_decode : function (utftext) {

var string = ""

var i = 0

var c = c1 = c2 = 0

while ( i <utftext.length ) {

c = utftext.charCodeAt(i)

if (c <128) {

string += String.fromCharCode(c)

i++

}else if((c >191) &&(c <224)) {

c2 = utftext.charCodeAt(i+1)

string += String.fromCharCode(((c &31) <<6) | (c2 &63))

i += 2

}else {

c2 = utftext.charCodeAt(i+1)

c3 = utftext.charCodeAt(i+2)

string += String.fromCharCode(((c &15) <<12) | ((c2 &63) <<6) | (c3 &63))

i += 3

}

}

return string

},

//测试

test : function (a){

var str = document.getElementById(a).value

}

}

function checkstr(str) {

num=str.length

var arr=str.match(/[^\\\\\\\\\\\\\\\\x00-\\\\\\\\\\\\\\\\x80]/ig)

if(arr!=null){

num+=arr.length

}

}

var Crypt = {

//加密

Encrypt : function (value){

var encryptStr = new Array()var i

for(i=0i<value.lengthi++){

encryptStr+=""+value.charCodeAt(i)+""

}

return encryptStr

},

//解密

Decrypt : function (value){

var decryptStr = new Array()var i

var s=value.split("")

for(i=0i<s.lengthi++){

s[i]=s[i].replace('','')

decryptStr+=String.fromCharCode(s[i])

}

return decryptStr

}

}