2017-11-27 10 views
0

私は、プログラムが一度に1つの数字のシーケンスを表示する推測ゲームを作ろうとしています。リストからランダムに生成されたシーケンスがありますが、リストの値を1つずつ表示することができませんでした。バインドを使ってラベルを変更したいのですが、動作させることができません。ラベルの値をリストから変更します。

public class Tutorial extends Application { 

    Stage window; 
    Scene scene1, scene2; 
    Label label; 
    public static void main(String[] args) { 
     launch(args); 

    } 

    public void start(Stage primaryStage) throws Exception { 
     window = primaryStage; 

     //Scene 1 
     Label welcome = new Label("Welcome to the Guessing Game. Press Start to Enter"); 
     Button start = new Button("Start"); 
     VBox firstlayout = new VBox(10); 
     firstlayout.getChildren().addAll(welcome, start); 
     firstlayout.setAlignment(Pos.CENTER); 

     start.setOnAction(e -> window.setScene(scene2)); 

     scene1 = new Scene(firstlayout, 450, 300); 
     window.setScene(scene1); 


      ArrayList<Integer> guessList = numbergen(); 




     Label label = new Label(Integer.toString(getValues(guessList))); 


      label.setStyle("-fx-text-fill: red; -fx-padding: 10px; -fx-font-size: 50px"); 

      FadeTransition fader = createFader(label); 

      SequentialTransition Fader = new SequentialTransition(
        label, 
        fader 
      ); 


      StackPane layout = new StackPane(); 
      layout.getChildren().addAll(label); 


      scene2 = new Scene(layout, 250, 300); 

      Fader.play(); 



    window.setTitle("Program Close"); 
    window.setScene(scene1); 

    window.show(); 

    } 

private FadeTransition createFader(Node node) { 
    FadeTransition fade = new FadeTransition(Duration.seconds(5), node); 
    fade.setFromValue(1); 
    fade.setToValue(0); 

    return fade; 
} 

    public ArrayList<Integer> numbergen(){ 
      ArrayList<Integer> numb = new ArrayList<Integer>(); 
      Random rand = new Random(); 

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

      int n = rand.nextInt(5) + 1; 
       numb.add(n); 
      } 
      return numb; 
     } 

     public boolean result(ArrayList<Integer> solnList, ArrayList<Integer> guessList){ 

      if(solnList.size() != guessList.size()){ 
       return false; 
      }else{ 
       for(int i = 0; i<solnList.size(); i++){ 
        if(solnList.get(i) != guessList.get(i)){ 
         return false; 
        } 
       } 
       return true; 
      } 



     } 

     public int getValues(ArrayList<Integer> list){ 
      for(int i = 0; i<list.size(); i++){ 

       return list.get(i); 
      } 
      return 0; 
     } 





} 
+0

なぜシーケンスリストを作成するのはなぜですか?必要なときに新しい乱数を生成して使用するのはなぜですか? – jewelsea

+0

必要なときに乱数をどのように生成すればよいですか?私はJavaでかなり新しいので、これは私をたくさん混乱させています。 –

+0

現在乱数を生成しているのと同じ方法です。 'rand.nextInt(5)+ 1'を呼び出しますが、必要なときにだけ行います。私はそれがいつあるかわからない、あなたはそれを決定しなければならないだろう。 Javaの初心者である私のアドバイスは、UIの作成やバインディングの使用から始めるのではなく、最初にJavaを学び、基本的なJavaに習熟した後で初めてUIを作成しようとします。あなたの数を推測するゲームでは、コアエンジンとオブジェクトをjunitテストコードを使ってプレーンJavaに書き込んで検証します。エンジンが動作しているときは、コマンドラインコンソールベースのインターフェイスを追加します。 – jewelsea

答えて

2

あなたが整数のリスト要素に結合したい場合は、使用することができます。たとえば

Bindings.integerValueAt(observableList, observableIndex)

を:

IntegerPropertyでobservableIndexが参照
label.textProperty().bind(
    Bindings.integerValueAt(observableList, observableIndex).asString() 
); 

値をバインドするリスト内の要素の現在のインデックス。

observableIndex.add(1)を呼び出すと、バインディング値が適切に変更されます。

+0

どこでこれを実装しますか? –

+0

バインドを変更することなく、開始メソッドにバインドすることができます。観察可能な索引の変更は、おそらくユーザー相互作用によって起こります。ユーザが最後の正しい数字を推測した後、ユーザが次の数字を推測できるようにインデックスが増分される。 – jewelsea

+0

私はそれをしました。ループを作成して使用しました。 label.textProperty()。bind( Bindings.integerValueAt(observableList、observableIndex).asString() ); しかし、それは私に最後の値を与えるだけです。 –

関連する問題