0

3 つの質問 / レベルのクイズを作成しています。私の問題は、何を実装するか、正しい答えを数える方法をコーディングするかわからないことです。たとえば、ユーザーが正しい答え(ボタン)をクリックすると、レベル3に達するまでカウントされ、追加されます。彼がゲームを終了すると、私の complete.class がポップアップし、ユーザーが highscore(button) をクリックするとテキストが自動的に my highscore.class に設定されるボタンがあります。

levelone.class

public class EasyOne extends Activity {

ImageButton a, b, c;
Intent intent ;
CountDownTimer cdt;
TextView timer;
MediaPlayer player;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.easyone);
    a = (ImageButton) findViewById(R.id.ib_a);
    b = (ImageButton) findViewById(R.id.ib_b);
    c = (ImageButton) findViewById(R.id.ib_c);
    timer = (TextView) findViewById(R.id.tv_timer);
    cdt = new CountDownTimer(5000,1000) {

        @Override
        public void onTick(long millisUntilFinished) {
               timer.setText("seconds remaining: " + millisUntilFinished / 1000);

        }

        @Override
        public void onFinish() {
              timer.setText("TIMES UP!");
            intent = new Intent(getApplicationContext(),TimesUp.class);
            startActivity(intent);

        }
    };

    intent = new Intent(getApplicationContext(),ChoiceTwo.class);
    a.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(intent);


            cdt.cancel();
            Intent intent = new Intent(getApplicationContext(),ChoiceTwo.class);
            startActivity(intent);


        }
    });


    cdt.start();
}
}

complete.class
public class complete extends Activity {

Button highscore;
String highestScore;
int score;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
    // TODO Auto-generated method stub
highscore = (Button) findViewById(R.id.save);
highscore.setOnClickListener(new View.OnClickListener() {

    @Override   
       public void onClick(View v) {

       SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
       if (score > preferences.getInt("score", 0)) {
            preferences.edit().putInt("score", score).commit();
       }
       Intent showHighScore = new Intent(MainActivity.this, highscore.class);
       showHighScore.putExtra("current_score", score);
       startActivity(showHighScore);
    }
});
}
}

ハイスコ​​ア.クラス

public class highscore extends Activity {
Button back;
TextView highScore;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.highscore);
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    int currentScore = getIntent().getIntExtra("current_score", 0);
    highScore = (TextView) findViewById(R.id.tv_highscore);
    highScore.setText(currentScore + " / " + preferences.getInt("score", 0));
    int highestScore = -1;
//Now use this score variable to set anywhere.
    Bundle extras = getIntent().getExtras();

    if (extras != null) {
         highestScore = extras.getInt("score");
        }


    back = (Button) findViewById(R.id.btn_back);
    back.setOnClickListener(new View.OnClickListener() {
        @Override   
       public void onClick(View v) {
            Toast.makeText(getApplicationContext(),"Back",
                    Toast.LENGTH_SHORT).show();

    }
 });    
    // TODO Auto-generated method stub
}
}
4

4 に答える 4

0

静的変数を使用するだけでは、アプリケーションが終了するとハイスコア値が保持されません。また、値を SharePreference に保存する必要があります。

于 2013-08-07T07:20:19.277 に答える
0

次のコードを使用できます。

公開クラス HudScore {

    private int score;

    public HudScore(){
        score = 0;
    }

    public int getScore() {
        return score;
    }

    public void addPoints() {
        this.score +=50 ;
    }

}

MainActivity で:

public static final HudScore スコア = new HudScore(); スコア.addPoints();

最後に、設定したハイスコアと比較するだけです。上記の場合は、sharedPrefernce に保存します。

于 2013-08-07T08:00:01.323 に答える
0

high_score の静的変数を作成しpublic static int HIGH_SCORE、ユーザーが正解するたびに値を増やします。ゲーム終了時に表示します。

于 2013-08-07T07:07:00.067 に答える
0

次のように、スコアを追跡するためのクラスを作成できます。

    public class HudScore {

        private int score;

        public HudScore(){
            score = 0;
        }

        public void reset(){
            score = 0;
        }

        public int getScore() {
            return score;
        }

        public void addPoints() {
            this.score +=50 ;
        }

    }

次に、アクティビティでこのクラスのインスタンスを作成します。

public static final HudScore score = new HudScore();

レイアウトでスコアを表示するための textView を作成することもできます。

Tectview scoreView;

あなたが呼び出すことができるすべての正しい答えのために:

score.addPoints();

そして、スコアビューの textView を更新する refreshscore() 関数を記述します。

    public void refreshScore(){
        runOnUiThread(new Runnable() {  
        @Override
        public void run() {
            YourActivity.scoreView.setText("SCORE: "+score.getScore());
        }
        });
    }

Highscore の場合、次のように別のクラスを作成します。

    public class Highscore {

        private SharedPreferences preferences;
        private String names[];
        private long score[];

        public Highscore(Context context) {
            preferences = context.getSharedPreferences("Highscore", 0);
            names = new String[10];
            score = new long[10];
            for (int x = 0; x < 10; x++) {
                names[x] = preferences.getString("name" + x, "-");
                score[x] = preferences.getLong("score" + x, 0);
            }
        }

        public String getName(int x) {
            // get the name of the x-th position in the Highscore-List
            return names[x];
        }

        public long getScore(int x) {
            // get the score of the x-th position in the Highscore-List
            return score[x];
        }

        public boolean inHighscore(long score) {
            // test, if the score is in the Highscore-List
            int position;
            for (position = 0; position < 10 && this.score[position] >= score; position++)
                ;
            if (position == 10)
                return false;
            return true;
        }

        public boolean addScore(String name, long score) {
            // add the score with the name to the Highscore-List
            int position;
            for (position = 0; position < 10 && this.score[position] > score; position++);

            if (position == 10)
                return false;
            for (int x = 9; x > position; x--) {
                names[x] = names[x - 1];
                this.score[x] = this.score[x - 1];
            }

            this.names[position] = new String(name);
            this.score[position] = score;
            SharedPreferences.Editor editor = preferences.edit();
            for (int x = 0; x < 10; x++) {
                editor.putString("name" + x, this.names[x]);
                editor.putLong("score" + x, this.score[x]);
            }
            editor.commit();
            return true;
        }
    }

メイン アクティビティで HighScore クラスのインスタンスを作成し、ユーザーが次のようにハイスコアを超えたときにアラート ダイアログをトリガーします。

final Highscore highscore = new Highscore(getApplicationContext());

if(highscore.inHighscore(score.getScore()))
{
runOnUiThread(new Runnable() {

    @Override
    public void run() {
        AlertDialog.Builder alert = new AlertDialog.Builder(GameActivity.this);

        alert.setTitle("HIGHSCORE");
        alert.setIcon(R.drawable.trophy);
        alert.setMessage("Score : "+score.getScore()+"\nEnter your name:");

        final LinearLayout layout = new LinearLayout(GameActivity.this);
        final EditText input = new EditText(GameActivity.this);
        layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
        input.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
        layout.setPadding(20, 0, 20, 0);
        layout.addView(input);

        alert.setView(layout);

        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
          String value = input.getText().toString();

            highscore.addScore(value,score.getScore());
          finish();
          }
        });

        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int whichButton) {
              finish();
          }
        });

        alert.show();
    }
});


Hope this answers your question.
于 2013-08-07T07:16:19.277 に答える