2016-10-15 17 views
-1

このゲームでは、生成された乱数(「LoadG1」という変数)に等しい整数を入力するたびにユーザーがポイントを獲得します。入力== loadG1の場合、 'score'変数にポイントが追加されます。アイデアは、正しく答えるたびに1ポイントずつ増やす必要がありますが、何らかの理由で1ポイント以上のスコアをつけることはできません。 1つの質問が正しい場合、最後に表示されるポイントを取得します。それ以上の正解は無視されます。カウントダウンタイマーでスコアが更新されない

は、ここでは、コードは次のとおり

final int[] score = {0}; 
final Random generateG1 = new Random(); 
final int loadG1 = generateG1.nextInt(1000000)+10000; 
final TextView number = (TextView) findViewById(R.id.number); 
number.setText(" "+loadG1); 


    final CountDownTimer loop = new CountDownTimer(4000, 1000) { 
    @Override 
    public void onTick(long millisUntilFinished) { 
    } 
    @Override 
    public void onFinish() { 
     number.setVisibility(View.GONE); 
     final TextView prompt = (TextView) findViewById(R.id.prompt); 
     prompt.setVisibility(View.VISIBLE); 
     prompt.setText(" Enter the number"); 
     final EditText input = (EditText) findViewById(R.id.enterAnswer); 
     input.setVisibility(View.VISIBLE); 
     input.setOnKeyListener(new View.OnKeyListener() { 
      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if (event.getAction() == KeyEvent.ACTION_DOWN) { 
        switch (keyCode) { 
         case KeyEvent.KEYCODE_ENTER: 
          Editable answer = input.getText(); 
          int finalAnswer = Integer.parseInt(String.valueOf(answer)); 
          int finalLoadG1 = Integer.parseInt(String.valueOf(loadG1)); 
          input.setVisibility(View.GONE); 
          prompt.setVisibility(View.GONE); 
          if (finalAnswer == finalLoadG1) { 
           score[0]++; 
          } 

          number.setVisibility(View.VISIBLE); 
          final int loadG1 = generateG1.nextInt(1000000) + 10000; 
          number.setText(" " + loadG1); 
          input.getText().clear(); 

          start(); 

          return true; 
         default: 
        } 
       } 
       return false; 
      } 
     }); 
    } 
    }.start(); 

    new CountDownTimer(24000, 1000) { 
    @Override 
    public void onTick (long millisUntilFinished) { 
    } 
    @Override 
    public void onFinish() { 
     TextView result = (TextView) findViewById(R.id.outcome); 
     result.setText("Score: "+ score[0]); 
     TextView prompt = (TextView) findViewById(R.id.prompt); 
     prompt.setVisibility(View.GONE); 
     final EditText input = (EditText) findViewById(R.id.enterAnswer); 
     input.setVisibility(View.GONE); 
     loop.cancel(); 
    } 
}.start(); 

スコア変数がいずれかのタイマーが、その後ポイントが短い4秒タイマで添加される前に宣言され、そしてより長いタイマーの終了時に印刷されています。すべてが上のコードに示されています。

誰かが正解を入力するたびにスコアカウンタが更新されるように助けてくださったことを感謝します。ありがとうございます。

+0

yor変数がすべて「最終」であるのはなぜですか? – Kacper

+0

@ Kacper IDEはプログラムを正常にコンパイルするためには多くのことが必要です。 – User44

+0

[このカウントダウンタイマーを特定の方法で繰り返すにはどうすればよいですか?](http://stackoverflow.com/questions/40057754/how-can-i-repeat-this-countdown-timer-in-特定の方法) – Selvin

答えて

0

スコア定義の前にfinal修飾語を削除すると、これが役立つと思います。

+0

私はそれを行うことはできません恐れている。コードを調べると、score変数が2つの異なるカウントダウンタイマーで使用されていることがわかります。それが最終的なものでなければ、私はこのように使うことはできません。 – User44

+0

最終的には、変数を一度だけ変更することができます。これは決して1ではない理由です。 – Kacper

+0

私は知っていますが、最終的なものを削除すると、別の方法(または私の場合はカウントダウンタイマー)で変数を呼び出すことができないという意味で私の状況が複雑になります。 – User44

関連する問題