bug记录

bug描述:

        在潜艇大战小游戏中,水雷与战舰碰撞无反应

//判断是否碰撞水雷
    private void isHitMine() {
//        System.out.println("1");//运行有输出,说明程序进入到该方法了
        for (int i = 0; i < mines.length; i++) {
            Mine m = mines[i];//获取每一个水雷
            //System.out.println(m.width);
//            System.out.println(m.isHit(ship));
            if(m.isLive() && ship.isLive() && m.isHit(ship)){ //若都活着,并且还撞上了
                m.goDead(); //水雷去死
                ship.minusLife(); //战舰减命
            }
        }
    }

排错过程:

        1)运行程序发现水雷与战舰相撞无反应,定位至水雷与战舰的碰撞方法
        2)打桩运行程序判断程序运行时是否调用到该方法,有输出说明方法调用了

        3)起初最先在for循环打桩有数据输出说明for循环也执行了

        4)最后定位到if判断,在判断中打桩测试发现战舰与水雷调用isLive()方法是正常的

              测试 m.isHit(ship)方法无输出

        5)检查该方法发现该碰撞方法无问题,并且该碰撞方法写在父类中,潜艇与炸弹也调用了

              该方法,碰撞后无异常

        6)思考:在该项目中,一个isHit方法,潜艇与炸弹调用无异常,可以初步排除该方法无误

        7)此时需要换个角度:

                假定该方法无问题,水雷与战舰调用的该方法,就需要检查水雷与战舰的类,确认无误

                后,检查他们的父类

/炸弹、水雷、战舰超类
    public SeaObject(int width, int height, int x, int y, int speed) {
        //this.width = -width;
        this.width = width;
        this.height = height;
        this.x = x;
        this.y = y;
        this.speed = speed;
    }

        最后发现超类中水雷的构造方法给它的宽赋值为负(-)

bug快速定位:

目前可以想到的方法一:利用git对比两个版本的代码,可以更高效率的解决这类问题

方法二:在碰撞方法哪里打桩输出战舰与水雷相关的属性值,查看他们的属性值是否无误
 

初次分享,欢迎大家发现不足的地方给予指正!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值