-1

ゲームに5つの選択肢があるラジオボタンアクティビティがあります。これはクイズゲームなので、ユーザーは1つのエラー、2つのエラー、ツリー、4つおよび5つのエラーが発生するまでプレイすることを選択できます。私の質問は....5つのアクティビティと5つのクラスを作成する方が良いので、ユーザーがそのラジオボタンをチェックしたときに各アクティビティの意図を呼び出すことができます。ユーザーは、1、2、3、4、または5つのエラーまでカウントすることを選択しましたか?最初のオプションの実行方法は知っていますが、2番目のオプションの実行方法がわかりません。ここに私の選択活動:

public class Izbor extends Activity implements OnClickListener, OnCheckedChangeListener{

    MediaPlayer buttonBack;
    RadioButton rbDeset,rbDvadeset,rbNeogranicenoTriGreske,rbNeogranicenoJednaGreska,rbNeogranicenoPetGresaka;
    Button dNazad, dStart;
    RadioGroup rGrupa;
    TextView tv1;

    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.izbor);
        addListenerOnButton();
    }

    private void addListenerOnButton() {

        Typeface dugmad = Typeface.createFromAsset(getAssets(), "Bebas.ttf");
        Typeface pitanjeVrh = Typeface.createFromAsset(getAssets(), "Lobster.ttf");


        rbDeset = (RadioButton) findViewById(R.id.radio1);
        rbDvadeset = (RadioButton) findViewById(R.id.radio2);
        rbNeogranicenoJednaGreska = (RadioButton) findViewById(R.id.radio3);
        rbNeogranicenoTriGreske = (RadioButton) findViewById(R.id.radio4);
        rbNeogranicenoPetGresaka = (RadioButton) findViewById(R.id.radio5);
        dNazad = (Button) findViewById(R.id.bNazad);
        dStart = (Button) findViewById(R.id.bStart);
        rGrupa = (RadioGroup) findViewById(R.id.radioGroup1);
        buttonBack = MediaPlayer.create(Izbor.this, R.raw.back);
        tv1 = (TextView) findViewById(R.id.tv1);

        dNazad.setTypeface(dugmad);
        dStart.setTypeface(dugmad);
        rbDeset.setTypeface(dugmad);
        rbDvadeset.setTypeface(dugmad);
        rbNeogranicenoPetGresaka.setTypeface(dugmad);
        rbNeogranicenoJednaGreska.setTypeface(dugmad);
        rbNeogranicenoTriGreske.setTypeface(dugmad);
        tv1.setTypeface(pitanjeVrh);


        rGrupa.setOnCheckedChangeListener(this);
        rbDeset.setOnClickListener(this);
        rbDvadeset.setOnClickListener(this);
        rbNeogranicenoJednaGreska.setOnClickListener(this);
        rbNeogranicenoTriGreske.setOnClickListener(this);
        rbNeogranicenoPetGresaka.setOnClickListener(this);
        dStart.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                if(rbDeset.isChecked()){
                    startActivity(new Intent("rs.androidaplikacijekvizopstekulture.KVIZ"));
                }else if(rbDvadeset.isChecked()){
                    startActivity(new Intent("rs.androidaplikacijekvizopstekulture.DVADESETPITANJA"));  
                    }else if(rbNeogranicenoJednaGreska.isChecked()){
                        startActivity(new Intent("rs.androidaplikacijekvizopstekulture.TRIDESETPITANJA"));
                    }else if(rbNeogranicenoPetGresaka.isChecked()){
                        startActivity(new Intent("rs.androidaplikacijekvizopstekulture.NEOGRANICENOPETGRESAKA"));

                }

            }
        });


        dNazad.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                buttonBack.start();
                finish();

            }
        });
    }

    public void onCheckedChanged(RadioGroup group, int checkedId) {
        }

    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
}

そして、これがユーザーが5つのミスまでプレイできる1つのアクティビティです。

public class NeogranicenoPetGresaka extends Activity implements OnClickListener{

    Button bIzlazIzKviza, bOdgovor1, bOdgovor2, bOdgovor3, bOdgovor4;
    TextView question, netacniOdg, score;
    int counter = 0;
    int brojacPogresnihOdgovora = 0;
    int brojacTacnihOdgovora = 0;

    Runnable mLaunchTask = new Runnable() {
        public void run() {
            nextQuestion();
        }
     };
    Runnable mLaunchTaskFinish = new Runnable() {
         public void run() {
            finish();
         }
      };


    private class Answer {
        public Answer(String opt, boolean correct) {
            option = opt;
            isCorrect = correct;
        }

        String option;
        boolean isCorrect;
    }
    Handler mHandler = new Handler();

    final OnClickListener clickListener = new OnClickListener() {
        public void onClick(View v) {

            Answer ans = (Answer) v.getTag();
            if (ans.isCorrect) {
                brojacTacnihOdgovora++;
                Intent i = new Intent("rs.androidaplikacijekvizopstekulture.TACANODGOVOR");
                startActivity(i);
                mHandler.postDelayed(mLaunchTask,1200);
            }
        else{
            brojacPogresnihOdgovora++;
            Intent i = new Intent("rs.androidaplikacijekvizopstekulture.POGRESANODGOVOR");
            startActivity(i);
            mHandler.postDelayed(mLaunchTask,2200);
            }
        }
    };


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.neograniceno5gresaka);

        Typeface dugmad = Typeface.createFromAsset(getAssets(), "Bebas.ttf");
        Typeface pitanje = Typeface.createFromAsset(getAssets(), "Lobster.ttf");
        bIzlazIzKviza = (Button) findViewById(R.id.bIzlazIzKvizaN);
        netacniOdg = (TextView) findViewById(R.id.tvBrojPitanjaN);
        question = (TextView) findViewById(R.id.tvPitanjeN);
        bOdgovor1 = (Button) findViewById(R.id.bOdgovorN1);
        bOdgovor2 = (Button) findViewById(R.id.bOdgovorN2);
        bOdgovor3 = (Button) findViewById(R.id.bOdgovorN3);
        bOdgovor4 = (Button) findViewById(R.id.bOdgovorN4);
        score = (TextView) findViewById(R.id.tvSkor2N);
        bOdgovor1.setTypeface(dugmad);
        bOdgovor2.setTypeface(dugmad);
        bOdgovor3.setTypeface(dugmad);
        bOdgovor4.setTypeface(dugmad);
        bIzlazIzKviza.setTypeface(dugmad);
        netacniOdg.setTypeface(dugmad);
        question.setTypeface(pitanje);
        score.setTypeface(dugmad);

        nextQuestion(); //startuje prvo pitanje!

    }

        public void onClick(View v) {
        // TODO Auto-generated method stub


    }

        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();
        }

    public void nextQuestion() {

        TestAdapter mDbHelper = new TestAdapter(this);
        mDbHelper.createDatabase();

        try{    //Pokusava da otvori db

            mDbHelper.open();  //baza otvorena

            Cursor c = mDbHelper.getTestData();

            List<Answer> labels = new ArrayList<Answer>();

            labels.add(new Answer(c.getString(2), true));
            labels.add(new Answer(c.getString(3), false));
            labels.add(new Answer(c.getString(4), false));
            labels.add(new Answer(c.getString(5), false));

            Collections.shuffle(labels);

            if(brojacPogresnihOdgovora < 5){


        question.setText(c.getString(1));

        bOdgovor1.setText(labels.get(0).option);
        bOdgovor1.setTag(labels.get(0));
        bOdgovor1.setOnClickListener(clickListener);

        bOdgovor2.setText(labels.get(1).option);
        bOdgovor2.setTag(labels.get(1));
        bOdgovor2.setOnClickListener(clickListener);

        bOdgovor3.setText(labels.get(2).option);
        bOdgovor3.setTag(labels.get(2));
        bOdgovor3.setOnClickListener(clickListener);

        bOdgovor4.setText(labels.get(3).option);
        bOdgovor4.setTag(labels.get(3));
        bOdgovor4.setOnClickListener(clickListener);
        //reset your next question and all four options here
        netacniOdg.setText("" + brojacPogresnihOdgovora);
        score.setText("Score: " + brojacTacnihOdgovora);
            }
            else{
                Intent i = new Intent("rs.androidaplikacijekvizopstekulture.REZULTAT");
                startActivity(i);
                mHandler.postDelayed(mLaunchTaskFinish,4000);
            }
        }
        finally{    // kada zavrsi sa koriscenjem baze podataka, zatvara db
            mDbHelper.close();
        }

    bIzlazIzKviza.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            finish();   
        }
    });
    }
}
4

2 に答える 2

1

選択が同じゲームのほんの小さな設定であることを考えると、選択ごとに 1 つのクラス/アクティビティを作成する理由はまったくないと思います。それはまったくの狂気です。

設定部分については、「エラー」をいくらでも受け入れる数値のみの入力フィールドを作成するだけです(なぜですか?)。OnClick はこのフィールドから入力を取得し、値をインテント エクストラに保存して、インテントでゲームを開始します。ゲームの onCreate でインテント エクストラを読み取り、「試行」/「エラー」の数を取得します。

于 2013-03-02T23:19:12.703 に答える
0

OK、onNewIntent を試してみましたが、1 つのメソッドしか呼び出せず、少なくとも 3 つのメソッドが必要です。ラジオ ボタン (グループ) を使用した選択アクティビティのコードは次のとおりです。

public void onClick(View v) {
                if(rbDeset.isChecked()){
                    Intent intent = new Intent(Izbor.this, Kviz.class);
                    intent.putExtra("myMethod", "nextQuestion");
                    startActivity(intent);

そして、これが私のクイズ活動です:

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if(intent.getStringExtra("methodName").equals("nextQuestion")){
              nextQuestion();
        }

              }

ELSE IF で試してみましたが、うまくいきませんでした。私のメソッドの名前は、nextQuestion()、nextQuestion2()、および nextQuestion3() です。これらは、カウンターが異なるだけでほとんど同じ方法です (10 問用、20 問用、30 問用)。これを行うには3つの方法は必要ないかもしれませんが、正直なところ、それを行う他の方法はわかりません。

于 2013-03-03T16:39:29.340 に答える