资讯专栏INFORMATION COLUMN

【Java猫说】ArrayList处理战舰游戏BUG

godruoyi / 1499人阅读

摘要:阅读本文约分钟处理战舰游戏前言你听说过有些程序员上班总是迟到,而下班又很准时吗因为他们使用了。复现上一章我们的程序运行起来了,但是还存在一些低级或者严重的,即当用户击中一个坐标后可以重复击杀来快速接受游戏。

阅读本文约 “6分钟”

ArrayList处理战舰游戏BUG 前言

你听说过有些程序员上班总是迟到,而下班又很准时吗?因为他们使用了Java API。核心Java函数库是由一堆等着被你当做组件使用的类集合而成的。你可以大量运用这些预先创建好的组件来写出你的程序。

Bug复现

上一章我们的程序运行起来了,但是还存在一些低级或者严重的bug,即当用户击中一个坐标后可以重复击杀来快速接受游戏。(如下图)【Java猫说】构建战舰类控制台游戏

为什么呢? 对,这和我们的检查方法有关系,我们看看这个遍历方法

//循环遍历
for (int cell:locationCells){
    if (guess == cell){
        result = "hit";
        numOfHits++;
        break;
    }
}

它只是进行判断是否击中,但是并没有判定之前是否已经被猜中了。
我们需要怎么解决呢?

解决BUG(ArrayList)

如果能够找到一种数组会在删除掉某些元素时自动缩小就好了,这样就不必检查所有的元素,只要查询它是否带有寻找中的值就好。若它还能够让你取出数据而不必管理集合的细节就更好!

这里我们就要介绍这个对象,ArrayList,他不是数组,是Java函数库中的另一个类。

add(Object)
    向list中加入对象参数
   
remove(int index)
    在索引参数中移除对象
    
remove(Object elem)
    移除该对象
    
contains(Object elem)
    如果和对象参数匹配返回“true”
    
isEmpty()
    如果list中没有元素返回“true”
    
indexOf(Object elem)
    返回对象参数的索引或-1
   
size()
    返回list中元素的个数
    
get(int index)
    返回当前索引参数的对象

这里你还要注意一点,在使用ArrayList时,你只是在运用ArrayList类型的对象,因此就跟运用其他的对象一样,你会使用“.”运算符来调用它的方法。

比较ArrayList与一般数组

1、一般数组再创建时就必须确定大小
2、存放对象给一般数组时必须指定位置
3、一般数组使用特殊的语法
4、在Java5.0中ArrayList是参数化的(parameterized)

知道了方式,接下来我们来修复bug吧!

修改代码

我们将做如下修改

public class DotCom {

    private ArrayList locationCells;
    int numOfHits = 0;

    //赋值数组
    public void setLocationCells(ArrayList locs){
        locationCells = locs;
    }

    //检查用户输入与随机数组是否存在相同
    public String checkYourSelf(String userInput){

        String result = "miss";
        //检索对象参数
        int index = locationCells.indexOf(userInput);
        if (index >= 0){
            //击中移除对象
            locationCells.remove(index);
            //判断是否结束或存在其余战舰
            if (locationCells.isEmpty()){
                result = "kill";
            }else{
                result = "hit";
            }
        }
        return result;
    }

}

下一章让我们来完成更完美的游戏吧!

本文已转载个人技术公众号:UncleCatMySelf
欢迎留言讨论与点赞
上一篇推荐:【Java猫说】构建战舰类控制台游戏
下一篇推荐:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76448.html

相关文章

  • Java猫说】构建战舰类控制台游戏

    摘要:阅读本文约分钟我们将用基础来模拟实现大家熟悉的战舰游戏,目标是要猜想对方战舰坐标,然后开炮攻击,命中所有战舰后,游戏结束。本文已转载个人技术公众号欢迎留言讨论与点赞上一篇推荐猫说实例变量与局部变量下一篇推荐猫说处理战舰游戏 阅读本文约 7分钟 我们将用基础Java来模拟实现大家熟悉的战舰游戏,目标是要猜想对方战舰坐标,然后开炮攻击,命中所有战舰后,游戏结束。接下来我们来分析一下具体的...

    ixlei 评论0 收藏0
  • Java猫说】实例变量与局部变量

    摘要:我们来看看实例变量与局部变量之间的差别实例变量是声明在类内而不是方法中。局部变量在使用前必须初始化。局部变量没有默认值,如果在变量被初始化前就要使用的话,编译器会显示错误。 阅读本文约1.8分钟 实例变量永远都会有默认值,如果你没有明确的赋值给实例变量,或者没有调用setter,实例变量还是会有值! integers 0 floating points 0.0 boolean...

    dreamtecher 评论0 收藏0
  • [Java猫说]谈谈编程人生的乐趣与苦恼

    摘要:当我想聊聊的是对于编程系统编程系统产品编程其实其中也有很多好玩的地方与神奇的景象。最重要的一点是,有助于他人,我很开心编程系统产品可能得到用户的认可,且对其有所帮助。这就是编程,一个让许多人痛苦挣扎却又是一种乐趣和苦恼共存的创造性活动。 程序员是一个在你即将30、40随时可能面临高压秃顶的工作,这是一个朋友在听到我的新职业的第一反应。我也习以为常的笑笑敷衍过去。 现在高压已经不是...

    walterrwu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<