冒泡排序法所遇错误,运用两层for循环时思路不清,错误代码如下:
var a = [];
for(var i=1;i<a.length;i++){
for(var j=1;i<a.length;i++){
if(a[j]>a[j-1]){
a[j] = a[j] + a[j-1]
a[j-1] = a[j] - a[j-1]
a[j] = a[j] - a[j-1]
}
}
}
错误在于i应该从0开始(或者<=a.length),因为外层for循环是要将每一个数字都取到,即遍历数组所有的元素,所以循环的次数应该是等于数组的长度。而第二层循环是要将每一个位置的数与它后面的每一个数对比,一旦发现比它大或者小的就通过交换变量值的方式交换位置,比较的对象的总数就是数组长度减1,因为不需要跟自己比。明白?明白?明白?不可以再错。
今天基本完成了拼图游戏,截止目前位置,还剩一个吸附功能没有实现,需要捉虫。关于碎片生成,点击,移动,提起,吸附等动作功能实现的原理,还需要再梳理清晰一点。
目前大致理解到的是:
生成碎片需要用到矩形模型,矩形的基本属性是(width,height,x,y)这四个属性确定后可以在平面生成一个矩形,坐标x,y的位置可以通过两层for循环来确定,生成指定个数的基准点,这个由关卡显示的数字来决定。
点击选中的原理,就是将鼠标在大图层上的坐标((点击)事件坐标)转化为碎片图层内的坐标,当这个坐标在矩形范围内时则判定选中,此时碎片可以跟随鼠标移动。
移动的原理,就是使图片的基准点坐标始终加上鼠标的偏移量,实现跟随移动。
吸附功能,首先需要确定碎片的归宿,也就是正确情况下它应该到达的目的地坐标。这个归宿在碎片生成的时候其实就已经确定,当碎片偏移动时就拿当前的坐标跟目的地坐标对比,设置一个偏移量来作为吸附功能启动的条件,即一旦碎当前坐标,与目的地坐标的距离小于等于偏移量时,则判定到达目的地,此时鼠标松开则启动吸附功能,一旦吸附成功则碎片不能再被移动。
当所有碎片全部移到正确位置,提示玩家胜利。
感觉上差不多,哈哈哈。
不过明天还是要将代码一句一句的搞清楚。