0

私の課題:

Stix のゲームは、少し前に "Survivor, Thailand" でプレイされたゲームに似ていますが、単純化されたバージョンでは、どういうわけか次のようになります。

それは 2 人のプレイヤーによってプレイされます (Survivor では 2 人以上でしたが、ここでは 2 人だけを扱います)。多数のスティック (マッチなど) がテーブルの上に置かれます。最初のプレーヤーは、テーブルに多くのスティックがある場合、1、2、または 3 つのスティックを取り除きます。次に、2 番目のプレーヤーが (可能であれば) 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 ループは必要ありません。起こっていることは、1 人のプレーヤーが 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 に答える