bug现象:    图一

图一 ,代码分析

 Snake.prototype.move=function (food,map) {

          // 头先移动,
      switch (this.direction)
        {
             case "right":
                this.body[0].x +=1;
                  break;
             case "left":
                   this.body[0].x -=1;
                break;
             case "top":
                   this.body[0].y -=1;
                 break;
            case "bottom":
                   this.body[0].y +=1;
                  break;
           }

        var i=this.body.length-1;
        for(i;i>0;i--){
            this.body[i].x=this.body[i-1].x;//第二节X坐标==第一节X坐标
            this.body[i].y=this.body[i-1].y;
        }
       //  运行的结果
    /*      this.body=[
              {x:4,y:2,color:"red"},
              {x:2,y:2,color:"orange"},
              {x:1,y:2,color:"orange"}
          ];
           this.body=[
             0 {x:4,y:2,color:"red"},
             1 {x:4,y:2,color:"orange"},
             2 {x:2,y:2,color:"orange"}
          ];

          */
 

图二正确

图二代码分析

   Snake.prototype.move=function (food,map) {
var i=this.body.length-1;
        for(i;i>0;i--){
            this.body[i].x=this.body[i-1].x;//第二节X坐标==第一节X坐标
            this.body[i].y=this.body[i-1].y;
        }
          // 头后移动
          switch (this.direction)
          {
              case "right":
                  this.body[0].x +=1;
                  break;
              case "left":
                  this.body[0].x -=1;
                  break;
              case "top":
                  this.body[0].y -=1;
                  break;
              case "bottom":
                  this.body[0].y +=1;
                  break;
          } 

 /*      运行结果
     this.body=[
              {x:3,y:2,color:"red"},
              {x:2,y:2,color:"orange"},
              {x:1,y:2,color:"orange"}
          ];
       this.body=[
            0  {x:4,y:2,color:"red"},
            1  {x:3,y:2,color:"orange"},
            2 {x:2,y:2,color:"orange"}
          ];
          */

结论:

1,bug逻辑错误导致,提醒了自己特别是在学习东西,清楚逻辑实现原理,数据哪里产生,哪里有在用。

2,调试能力得到极大锻炼,这次从发现现象,到不断尝试背后的原因,最后开始在文件中写测试代码,最后准确找到出错的地方,前后经历了1个小时左右。

3,错误并不可怕,可怕的是不犯错误,一点问题都没有。经验,这次不会,犯错了,把它攻克了那你就会了。

Javascript仿贪吃蛇出现Bug的反思的更多相关文章

  1. javascript实现贪吃蛇

    <html> <head> <style> body { background:#444; } .rect { border:1px solid #94F; wid ...

  2. JavaScript版—贪吃蛇小组件

    最近在学习JavaScript,利用2周的时间看完了<JavaScript高级编程>,了解了Js是一门面向原型编程的语言,没有像C#语言中的class,也没有私有.公有.保护等访问限制的级 ...

  3. JS仿贪吃蛇:一串跟着鼠标的Div

    贪吃蛇是一款80后.90后比较熟悉的经典游戏,下面通过简单的JS代码来实现低仿版贪吃蛇效果:随着鼠标的移动,在页面中呈现所有Div块跟随鼠标依次移动,效果如下图所示. <!DOCTYPE htm ...

  4. JavaScript—面向对象贪吃蛇_1

    前面说了.面向对象的思考方式和面向过程的思考方式有着本质的区别. 贪吃蛇.作为各大培训机构.面向对象的练手项目,的确好.我昨天看完视频,有一种领悟面向对象的感觉,当然可能只针对贪吃蛇..要想在实际开发 ...

  5. 使用javascript实现贪吃蛇游戏

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. JavaScript—面向对象 贪吃蛇最终

    效果 代码 //食物对象 ;(function () { function Food(element) { this.width = 20 this.height = 20 this.backgrou ...

  7. JavaScript—面向对象 贪吃蛇_3 蛇对象

    蛇对象 function Snake(element) { this.width = 20 this.height = 20 //蛇身 位置 颜色 this.body = [ {x: 6, y: 4, ...

  8. javascript写贪吃蛇游戏(20行代码!)

    <!doctype html> <html> <body> <canvas id="can" width="400" ...

  9. JavaScript—面向对象 贪吃蛇_2 游戏对象

    游戏对象 function Game(map) { this.map = map; this.food = new Food(this.map) this.snake = new Snake(this ...

随机推荐

  1. scatter参数

    列出scatter常用的一些参数: plt.scatter(x,y,c= '颜色可选',marker= '点的样式', cmap= '颜色变化',alpha=“透明度”, linewidths=“线宽 ...

  2. FastReport导出PDF乱码的问题

    1.电脑查看乱码,替换文本控件,使用RichObject,而不使用TextObject 2.电脑查看正常,手机查看乱码,导出的时候选择包含字体: Enbeded Fonts勾选框

  3. AnnotationTransactionAttributeSource is only available on Java 1.5 and higher

    前言: 在eclipse中用到spring2.0的web项目,启动elipse自带的tomcat7,tomcat7报错如下: AnnotationTransactionAttributeSource ...

  4. Linux VPS自动定时备份网站文件和MYSQL数据库到FTP空间(LNMP)

    如果我们网站更新不是很频繁,我们可以定期手动进行备份网站文件和MYSQL数据库导出.如果我们网站数据更新频繁,且数据尤为重要,建议要采用定期自动 备份,至少需要多备份数据,无论我们选择何种优秀的VPS ...

  5. Object.prototype.toString.call() 、 instanceof 以及 Array.isArray()判断数组的方法的优缺点

    1. Object.prototype.toString.call() 每一个继承 Object 的对象都有 toString 方法,如果 toString 方法没有重写的话,会返回 [Object ...

  6. Java String 常量池理解

    String:字符串常量池 作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串常量池: 字 ...

  7. Swift学习之道

    Swift是苹果公司2014年推出的,用来撰写OSX和iOS应用程序的 2014年在Apple WWDC发布 可以与OC互相调用. Swift的特点:让应用开发简单,更加稳定,但是和OC的语法不是一般 ...

  8. GridView(多选功能)

    多选功能  将optionSelection下的MultiSelect修改为true开启多选,MultiSelectMode有三种模式可选,单元格选择,行选择,与checkBox选择,第三种选择方式会 ...

  9. Maven中添加镜像

    Maven库在天朝的下载速度实在是感人,所以添加镜像之后速度会提升很多. 在maven的settings.xml 文件里配置mirrors的子节点,添加如下mirror <mirror> ...

  10. unity UI如何开启(显示)或者关闭(隐藏)Panel界面最好?

    https://segmentfault.com/a/1190000012357091 unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢? 可能大家 ...