java:两个可能的int值:游戏的得分跟踪器

时间:2016-07-07 21:20:58

标签: java

我正在开发一个创建太空入侵者风格游戏的项目:

  • 我需要能够在球员击中目标(+1分)或未命中(-1分)时保持分数。
  • 当玩家向外星人实体射击时,我会调用recordScore()方法,但是,我不确定如何设置它以使我的值(int点)可以是1或-1。

这就是我目前所拥有的:

public void recordScore(int point){ 
if(/*an alien ship is hit*/){
    point = 1;
}
else{
    point = -1;
}

我将这样称呼方法:

    //if there is a hit    
    recordScore(1)
    //if there is no hit
    recordScore(-1)

...我觉得这是一个提示,但我觉得使用循环是不正确的,因为我觉得无法调用该方法,但我目前无法想到任何其他方式来初始化变量两个值(或填充if子句)。

1 个答案:

答案 0 :(得分:3)

这是倒退的想法:

public void recordScore(int point){ 
if(/*an alien ship is hit*/){
    point = 1;
}
else{
    point = -1;
}

您正在尝试为方法参数赋值,这与您应该执行的操作完全相反。请记住,该点将进入此方法,并指定一个值并将其传递给它。

而是使用参数保存的值来分配类字段的值,或者在您的情况下使用增加或减少字段值的值。

类似于:

public void recordScore(int point) {
    score += point; // similar to score = score + point;
}

更接近您的需求。我不知道你是否有分数字段,你可能会将其命名为其他字段。

请注意,您声明:

  

我觉得使用循环不正确

如果您要引用if / else结构,请理解这不是循环,而是程序控制流语句或逻辑块。 循环会使代码重复,示例包括for循环和while循环。

如果您只想将分数递增或递减1,则另一个选项是使用使用布尔参数的方法。例如

public void attemptHit(boolean hitSuccessful) {
    if (hitSuccessful) {
        score++;
    else {
        score--;
    }
}

你可以这样称呼它:

attemptHit(true); // for a successful hit
attemptHit(false); // for a miss

这样可以防止创建无意义但有效的代码,例如

recordScore(-23020);