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. .NET Core和Swagger 生成 Api 文档转

    阅读目录 1.引用 2.打开startup.cs文件 3.设置XML注释 4.运行结果 5.主要问题的解决办法 6.可以自定义UI 前言 最近写了好多Web api, 老大说太乱了,要整理一下,使用S ...

  2. 压测过程中出现ops断崖式下跌原因及排解

    压测机器: 100台docker redis集群:16个分片 在开始压测的半个小时中,一直很稳定,ops稳定在20w左右.但是接下来突然ops断崖式下跌,ops降到了3w以下.然后持续一段时间,直至变 ...

  3. 跟随我在oracle学习php(12)

    DOM 文档对象模型 body:(什么时候)找到标签 操作标签找到标签:(都会返回一个js对象)document.getElementById() 通过iddocument.getElementsBy ...

  4. UVa 11389 - The Bus Driver Problem 难度:0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  5. 无服务器架构(Faas/Serverless)

    摘要无服务器架构(Faas/Serverless),是软件架构领域的热门话题. AWS,Google Cloud和Azure - 在无服务器上投入了大量资金,已经在看到了大量专门针对Faas/Serv ...

  6. 【推荐】HTML5 Word Cloud——中文词云

    在线工具: http://timdream.org/wordcloud/# 源码: https://github.com/timdream/wordcloud

  7. bash快捷方式

    cmd /k "cd /d E:/site/collect/"                                                            ...

  8. 蓝图Blueprint

    ---恢复内容开始--- 蓝图: flask模块化处理操作和URL的方式 作用: 将不同的功能模块化,实现模块化应用 构建大型应用 优化项目结构 使用步骤 创建蓝图对象 对蓝图对象进行操作(注册路由; ...

  9. ubuntu 谷歌浏览器打开时需要输入密码来解锁密码环

    问题: ubuntu14.04, 设置系统自动登陆账户,但每次开机打开 google chromium 浏览器,会要求输入一次密码,来解锁登录密钥环.很麻烦. 解锁登录密钥环:输入密码以解锁您的登录密 ...

  10. 表单传参,在action中的参数得不到

    写上面这个的时候,发现传过去的url路径是这样的 在action后面的pro=login得不到. 只需要将method中的get改成post就可以了