0

我的任务:

Stix 的游戏——类似于前段时间在“泰国幸存者”中玩的游戏——在简化版本中看起来像这样:

它由两个玩家玩(在幸存者中超过两个,但这里我们只处理两个)。许多棍子(如火柴)放在桌子上。第一个玩家拿走 1、2 或 3 根棍子,前提是桌子上有那么多棍子。然后第二个玩家拿走 1、2 或 3 根棍子(如果可能的话),依此类推。谁拿了最后一根棍子,谁就输了。

这是我的课:

public class StixBoard
{
  public int number;

  public StixBoard(int number)
  {
    this.number = number;
  }

  public int getNumStix()
  {
    return number;
  }

  public boolean takeStix(int number)
  {
    int take = 0;

    while(take != number && number <= 3 && number > 0)
    {
      number = this.number - take;
      take++;
    }

    if(this.number >= 1 && this.number <= 3)
    {
      number = number - this.number;
      System.out.println("Number of sticks on board:" + number);
      return(true);
    }
    else
      System.out.println("Illegeal Move");
    return(false);
  }

  public boolean isGameOver()
  {
    if(number >=1)
    {
      return(true);
    }
    else
      return false;
  }

  public String toString()
  {
    return(getNumStix() + " Stix Remaining.");
  }
}

这是我的测试仪:

public class StixGame
{

    public static void main(String[] args)
    {

    StixBoard game1 = new StixBoard(6);
    System.out.println(game1.getNumStix());
    System.out.println(game1.takeStix(1));
    System.out.println(game1.getNumStix());
    }

}

我似乎无法回避这个输出:

6
Illegeal Move
false
6
4

1 回答 1

1

您使用变量的number方式太多次,这将使您的代码非常混乱...使用 IDE 将您的类中的变量重命名为totalStix,问题立即变得明显。

  • 您的takeStix方法不需要 while 循环。正在发生的一切都是一名球员正在拿走stix,对吧?所以删除该代码。
  • 然后,很明显(现在变量命名不那么混乱了)您将剩余的棒数视为要带走的数量,因此切换所有这些变量。
  • 另外,将方法的参数重命名为take,因为这就是你要带走的东西。

剩下以下代码(还有一些其他的小调整):

public class StixBoard
{
  public int totalStix;

  public StixBoard(int number)
  {
    this.totalStix = number;
  }

  public int getNumStix()
  {
    return totalStix;
  }

  public boolean takeStix(int take)
  {
    if(take >= 1 && take <= 3)
    {
      totalStix -= take;
      System.out.println("Number of sticks on board:" + totalStix);
      return true;
    }

    System.out.println("Illegeal Move");
    return false ;
  }

  public boolean isGameOver()
  {
    if(totalStix >=1)
    {
      return(true);
    }
    else
      return false;
  }

  public String toString()
  {
    return(getNumStix() + " Stix Remaining.");
  }
}
于 2012-12-07T23:27:07.993 回答