2017-01-02 5 views
1

コンピュータからどのプレーヤーが先に進むかを決定し、乱数を選択して配列から削除するJavaプログラムがあります。プレイヤーが数字を削除すると、配列が減少します。これらのすべてはランダムを使用して行われます。しかし、自分のコードを実行すると、それは私が期待しているものではありません。どこが間違っていたのか分かりますか?乱数を使用したJavaゲーム

これは私のコードです:

[クラス]

public class StickBag { 

    private int numOfSticks; 

    public StickBag(int numOfSticks) 
    { 
     this.numOfSticks = numOfSticks; 
    } 

    public int getNumOfSticks() { 
     return numOfSticks; 
    } 

    public void setNumOfSticks(int numOfSticks) { 
     this.numOfSticks = numOfSticks; 
    } 

    public int remove(int n) 
    { 
     numOfSticks = numOfSticks - n; 
     return numOfSticks; 
    } 
} 

[メイン]

public class StickGameApp { 

    public static void main(String[] args) { 

     StickBag s1 = new StickBag(25); 

     System.out.println("Welcome to the game of sticks!"); 
     System.out.println("There are initially " + s1.getNumOfSticks() + " sticks on the board."); 

     int minP = 1; 
     int maxP = 2; 
     int randP; 

     int minN = 1; 
     int maxN = 10; 
     int randNum; 

     randP = minP + (int)(Math.random()*(maxP)); 
     randNum = minN + (int)(Math.random()*(maxN)); 

     for (int i=0; i<10; i++) 
     { 
      if(s1.getNumOfSticks() > randNum) 
      { 
      System.out.println("Computer player " + randP + " choose " + randNum + " sticks "); 
      s1.remove(randNum); 
      } 
      else 
      { 
       System.out.println("Computer player " + randP + " wants to choose " + randNum + " sticks but is unable to."); 
       System.out.println("Computer player " + randP + " loses "); 
      } 
     } 

    } 
} 

私は、コードを実行すると、以下のように、それが表示されます


stのゲームへようこそick!

最初にボードに25個のスティックがあります。

コンピュータプレイヤー2は6スティック

コンピュータプレイヤー2を選択した6スティック

コンピュータプレイヤー2を選択した6スティック

コンピュータプレイヤー2を選択し

コンピュータプレイヤー2は、選択したい6本のスティックを選びます6スティックはできません。 コンピュータプレーヤー2が敗北

コンピュータプレーヤー2は6つのスティックを選択したいができません。 コンピュータプレーヤー2が敗北

コンピュータプレーヤー2は6つのスティックを選択したいができません。 コンピュータプレーヤー2が敗北

コンピュータプレーヤー2は6つのスティックを選択したいができません。 コンピュータプレーヤー2が敗北

コンピュータプレーヤー2は6つのスティックを選択したいができません。 コンピュータプレーヤー2が敗北

コンピュータプレーヤー2は6つのスティックを選択したいができません。 コンピュータプレイヤー2は


を失うしかし、私はそれがこのように表示したい:


は、スティックのゲームへようこそ!

最初にボードに25個のスティックがあります。

コンピュータプレーヤー1は5つのスティックを選択します。

コンピュータプレーヤー2は7つのスティックを選択します。

コンピュータプレーヤー1は7個のスティックを選択します。

コンピュータプレーヤー2は7つのスティックを選択したいができません。

コンピュータプレーヤー2、あなたは負けます。


どこが間違っていたのですか?一つには

+0

1.プレイヤーがforループの外側で選択されています。したがって、一度選択されたプレイヤーは決して変更されません。 2.ゲームが終わったかどうかに関係なく、10の反復を定義します。ループの終わりは、私が推測するスティックの数で判断する必要があります。 3.あなたがランダムを使用する場合、結果(あなたが表示したいもの)を決定することはできません。 – kism3t

+0

私の間違いを指摘していただきありがとうございます。私はかなりJavaに新しいですが、今私は理由を理解しています。それを感謝します –

答えて

1

あなたの間違いは、単に乱数の選択が1回だけ実行されるように、ゲームを実行するforループの前に、プレーヤーとコンピュータの乱数ジェネレータを入れてください。randPrandNumです。

あなたのコードは次のようになります。これはあなたのゲームへの正しいアプローチであれば

for (int i=0; i<10; i++) 
    { 
    randP = minP + (int)(Math.random()*(maxP)); 
    randNum = minN + (int)(Math.random()*(maxN)); 
     if(s1.getNumOfSticks() > randNum) 
     { 
     System.out.println("Computer player " + randP + " choose " + randNum + " sticks "); 
     s1.remove(randNum); 
     } 
     else 
     { 
      System.out.println("Computer player " + randP + " wants to choose " + randNum + " sticks but is unable to."); 
      System.out.println("Computer player " + randP + " loses "); 
     } 
    } 

} 
+0

あなたは大歓迎です。 – Oghli

0

、あなたはthe.player.outside the.loopを選択しているので、何でも、常にすべてのラウンド

を実行します選択されている
+0

私の間違いを指摘してくれてありがとうございました。私は実際にJavaには全く新しいです。 –

0

あなたは以下の2行のコードを移動する必要があります。

randP = minP + (int)(Math.random()*(maxP)); 
randNum = minN + (int)(Math.random()*(maxN)); 

forループの冒頭にあります。これにより、各繰り返しで、新しいプレーヤーと新しい配列の場所を選択できるようになります。

+0

ありがとうございます。感謝します。 –

0

私は確かではないが、私はあなたがそれが役に立つことを願って。

import java.util.*; 

public class Main { 

public static void main(String[] args) { 

    Random rand = new Random(); 
    StickBag s1 = new StickBag(25); 
    int total= s1.getNumOfSticks(); 

    System.out.println("Welcome to the game of sticks!"); 
    System.out.println("There are initially " + s1.getNumOfSticks() + " sticks on the board."); 

    int randP = 0; 
    int randNum; 
    int P1=0,P2=0; 


    for (int i=0; i<10; i++) 
    { 

      randP = rand.nextInt(2)+1; 
     randNum = rand.nextInt(10)+1; 


     if (s1.getNumOfSticks() - randNum > 0) 
     { 
     System.out.println("\n Computer player #" + randP + " chooses " + randNum + " sticks and takes them. "); 
     s1.remove(randNum); 

     System.out.println(" Computer player #" + (!(randP == 2) ? 2 : 1) + " wants to choose " + randNum + " sticks but is unable to."); 

     // Evaluate the score 
     if (randP == 1) 
      randP = (P1 = P1 + randNum); 
     else 
      randP = (P2 = P2 + randNum); 
     } 
    } 

    System.out.println("\n\n---------------------------------------------------------------------------"); 
    System.out.println("\t Player #1 has " + P1 + " sticks and Player #2 has " + P2 + " sticks. \n" + ((P1 > P2) ? "Player 1 wins" : "Player 2 wins")); 
    System.out.println("The sticks remaining in the bag are: " + s1.getNumOfSticks());}} 
+0

うわー!これは私にとって本当に便利です。ありがとうございました! –

関連する問題