mardi 8 septembre 2015

My Trivia game got stuck at the third level

I'm working on a Trivia game and i got a problem how not to repeat the questions from the db.. After all i done it in a very primitive way and it worked but at the third level it gets stuck and not working anymore..

package trivia.com.example.kids1.triviatest;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.accessibility.AccessibilityManager;
import android.widget.Button;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Play extends AppCompatActivity implements View.OnClickListener {

    TextView text, tvLevel, tvScore;
    Button answerOne, answerTwo, answerThree, answerFour;

    private final String DB_NAME = "gameDatabase";
    private final String TABLE_NAME = "gameTable";
    SQLiteDatabase db = null;

    int score = 0;
    int position = 1;
    String playerAnswer;
    String correctAnswer;

    List<Integer> usedQuestions = new ArrayList<Integer>();
    String uq;
    int UQ;
    Random r = new Random();
    int nextLv = 4;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play);

        text = (TextView)findViewById(R.id.textView);
        initializeVars();
        setOnClickListener();

        try {
            db = this.openOrCreateDatabase(DB_NAME, MODE_PRIVATE, null);
            String selectQuery = "SELECT Question, AnswerA, AnswerB, AnswerC, AnswerD, Level, CorrectAnswer, ID FROM " +
                    TABLE_NAME + " where ID == 1";
            Cursor c = db.rawQuery(selectQuery, null);

            if (c != null){
                if (c.moveToFirst()) {
                    do {
                        text.setText(c.getString(c.getColumnIndex("Question")));
                        answerOne.setText(c.getString(c.getColumnIndex("AnswerA")));
                        answerTwo.setText(c.getString(c.getColumnIndex("AnswerB")));
                        answerThree.setText(c.getString(c.getColumnIndex("AnswerC")));
                        answerFour.setText(c.getString(c.getColumnIndex("AnswerD")));
                        correctAnswer = c.getString(c.getColumnIndex("CorrectAnswer"));
                        tvLevel.setText("Level 1 - " + position);
                        uq = c.getString(c.getColumnIndex("ID"));
                        UQ = Integer.parseInt(uq);
                        usedQuestions.add(UQ);
                    }while(c.moveToNext());
                }
            } else {
                text.setText("Looking for question...");
            }
            db.close();
        } catch (SQLiteException se){
            Log.e(getClass().getSimpleName(), "Couldn't find the question.");
        }
    }

    public void initializeVars(){
        answerOne = (Button)findViewById(R.id.answerOne);
        answerTwo = (Button)findViewById(R.id.answerTwo);
        answerThree = (Button)findViewById(R.id.answerThree);
        answerFour = (Button)findViewById(R.id.answerFour);
        tvLevel = (TextView)findViewById(R.id.tvLevel);
        tvScore = (TextView)findViewById(R.id.tvScore);
    }
    public void setOnClickListener(){
        answerOne.setOnClickListener(this);
        answerTwo.setOnClickListener(this);
        answerThree.setOnClickListener(this);
        answerFour.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.answerOne:

                playerAnswer = "A";
                answerCheck();

                break;

            case R.id.answerTwo:
                playerAnswer = "B";

                answerCheck();

                break;

            case R.id.answerThree:
                playerAnswer = "C";

                answerCheck();
                break;

            case R.id.answerFour:
                playerAnswer = "D";
                answerCheck();

                break;
        }
    }

    public void answerCheck(){
        if (playerAnswer.equals(correctAnswer)){
            Toast.makeText(this,"Right Answer",Toast.LENGTH_LONG).show();
            position++;
            score += 100;
            nextQuestion();
        } else {
            Toast.makeText(this, "Wrong Answer",Toast.LENGTH_LONG).show();
        }
    }

    public void nextQuestion(){
        do {
            nextLv = (r.nextInt(4)+1);
            if (usedQuestions.size() == 1){
                if (nextLv != usedQuestions.get(0)){
                    break;
                }
            } else if (usedQuestions.size() == 2){
                if (nextLv != usedQuestions.get(0) && nextLv != usedQuestions.get(1)){
                    break;
                }
            } else if (usedQuestions.size() == 3){
                if (nextLv != usedQuestions.get(0) && nextLv != usedQuestions.get(1) && nextLv != usedQuestions.get(2)){
                    break;
                }
            } else if (usedQuestions.size() == 4){
                if (nextLv != usedQuestions.get(0) && nextLv != usedQuestions.get(1) && nextLv != usedQuestions.get(2) && nextLv != usedQuestions.get(3)){
                    break;
                }

            } else if (usedQuestions.size() == 5){
                if (nextLv != usedQuestions.get(0) && nextLv != usedQuestions.get(1) &&
                        nextLv != usedQuestions.get(2) && nextLv != usedQuestions.get(3) && nextLv != usedQuestions.get(4)){
                    break;
                }

            } else if (usedQuestions.size() == 6){
                if (nextLv != usedQuestions.get(0) && nextLv != usedQuestions.get(1) && nextLv != usedQuestions.get(2) &&
                        nextLv != usedQuestions.get(3) && nextLv != usedQuestions.get(4) && nextLv != usedQuestions.get(5)){
                    break;
                }

            }
        } while (true);


        try{



            db = this.openOrCreateDatabase(DB_NAME, MODE_PRIVATE, null);
            String selectQuery = "SELECT Question, AnswerA, AnswerB, AnswerC, AnswerD, Level, CorrectAnswer, ID FROM " +
                    TABLE_NAME + " where ID == " + nextLv;
            Cursor c = db.rawQuery(selectQuery, null);
            if (c != null) {
                if (c.moveToFirst()) {
                    do {
                        text.setText(c.getString(c.getColumnIndex("Question")));
                        answerOne.setText(c.getString(c.getColumnIndex("AnswerA")));
                        answerTwo.setText(c.getString(c.getColumnIndex("AnswerB")));
                        answerThree.setText(c.getString(c.getColumnIndex("AnswerC")));
                        answerFour.setText(c.getString(c.getColumnIndex("AnswerD")));
                        correctAnswer = c.getString(c.getColumnIndex("CorrectAnswer"));
                        tvLevel.setText("Level 1 - " + position);
                        tvScore.setText("Score: " + score);
                        uq = c.getString(c.getColumnIndex("ID"));
                        UQ = Integer.parseInt(uq);
                        usedQuestions.add(UQ);
                    }while (c.moveToNext());
                }
            }
        } catch (SQLiteException se){
            Log.e(getClass().getSimpleName(), "Could not level up :(");
        }

    }
}

Any help please?

Aucun commentaire:

Enregistrer un commentaire