From 26ce59d1175e4be0eca37c2e066e2697dcea3237 Mon Sep 17 00:00:00 2001 From: rishab Date: Fri, 27 Mar 2020 19:56:51 +0530 Subject: [PATCH] Quiz completed Added timer in tile matching --- .../com/example/alzapp/QuickQuizStart.java | 52 ++++++++++- .../java/com/example/alzapp/QuizDbHelper.java | 21 +++-- .../com/example/alzapp/QuizQuestionPage.java | 88 +++++++++++++++++-- .../example/alzapp/TileMatchingActivity.java | 27 ++++-- .../res/layout/activity_quick_quiz_start.xml | 1 + .../res/layout/activity_tile_matching.xml | 9 ++ 6 files changed, 181 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/example/alzapp/QuickQuizStart.java b/app/src/main/java/com/example/alzapp/QuickQuizStart.java index 12fa101..e98ff29 100644 --- a/app/src/main/java/com/example/alzapp/QuickQuizStart.java +++ b/app/src/main/java/com/example/alzapp/QuickQuizStart.java @@ -1,28 +1,78 @@ package com.example.alzapp; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.widget.Button; +import android.widget.TextView; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; public class QuickQuizStart extends AppCompatActivity { + private static final int REQUEST_CODE_QUIZ = 1; + + public static final String SHARED_PREFS = "sharedPrefs"; + public static final String KEY_HIGHSCORE = "keyHighScore"; + + private TextView textViewHighScore; + private int highScore; + private Button quiz_start; + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quick_quiz_start); + textViewHighScore = findViewById(R.id.quiz_highScore); + loadHighScore(); + quiz_start = findViewById(R.id.start_quiz); quiz_start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(QuickQuizStart.this,QuizQuestionPage.class); - startActivity(intent); + startActivityForResult(intent,REQUEST_CODE_QUIZ); } }); } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if(requestCode == REQUEST_CODE_QUIZ){ + if(resultCode == RESULT_OK){ + int score = data.getIntExtra(QuizQuestionPage.EXTRA_SCORE,0); + if(score > highScore){ + updateHighScore(score); + } + } + } + + } + + private void updateHighScore(int highScoreNew){ + highScore = highScoreNew; + textViewHighScore.setText("Highscore: "+ highScore); + + SharedPreferences prefs = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE); + SharedPreferences.Editor editor = prefs.edit(); + editor.putInt(KEY_HIGHSCORE, highScore); + editor.apply(); + } + + + private void loadHighScore(){ + SharedPreferences prefs = getSharedPreferences(SHARED_PREFS,MODE_PRIVATE); + highScore = prefs.getInt(KEY_HIGHSCORE,0); + textViewHighScore.setText("Highscore: "+ highScore); + + } + } diff --git a/app/src/main/java/com/example/alzapp/QuizDbHelper.java b/app/src/main/java/com/example/alzapp/QuizDbHelper.java index 3c35bb6..3bed53d 100644 --- a/app/src/main/java/com/example/alzapp/QuizDbHelper.java +++ b/app/src/main/java/com/example/alzapp/QuizDbHelper.java @@ -48,16 +48,27 @@ public class QuizDbHelper extends SQLiteOpenHelper { } private void fillQuestionsTable() { - Question q1 = new Question("A is correct", "A", "B", "C", 1); + Question q1 = new Question("What is 2+2?", "4", "12", "17", 1); addQuestion(q1); - Question q2 = new Question("B is correct", "A", "B", "C", 2); + Question q2 = new Question("Which letter comes after A,B,C,D in the english alphabet series?", "F", "E", "D", 2); addQuestion(q2); - Question q3 = new Question("C is correct", "A", "B", "C", 3); + Question q3 = new Question("How many letters are present in the english alphabet?", "28", "25", "26", 3); addQuestion(q3); - Question q4 = new Question("A is correct again", "A", "B", "C", 1); + Question q4 = new Question("8,16,24, __ Which number should come in the blank space ?", "34", "32", "48", 2); addQuestion(q4); - Question q5 = new Question("B is correct again", "A", "B", "C", 2); + Question q5 = new Question("In tossing of a fair coin, what is the probability of getting a head? ", "50%", "40%", "55%", 1); addQuestion(q5); + Question q6 = new Question("The total number of states present in India is", "27", "28", "29", 2); + addQuestion(q6); + Question q7 = new Question("The Hindi film industry is better known as ", "Bollywood", "Tollywood", "Sandalwood", 1); + addQuestion(q7); + Question q8 = new Question("Which city is also known as the Silicon Valley of Asia ?", "Mumbai", "Abu Dhabi", "Bangalore", 3); + addQuestion(q8); + Question q9 = new Question("Total number of bones present in the human body is ", "204", "205", "206", 3); + addQuestion(q9); + Question q10 = new Question("Novak Djokovic is a famous player associated with the game of ", "Basketball", "Tennis", "Cricket", 1); + addQuestion(q10); + } private void addQuestion(Question question) { diff --git a/app/src/main/java/com/example/alzapp/QuizQuestionPage.java b/app/src/main/java/com/example/alzapp/QuizQuestionPage.java index bf79c37..7e0157f 100644 --- a/app/src/main/java/com/example/alzapp/QuizQuestionPage.java +++ b/app/src/main/java/com/example/alzapp/QuizQuestionPage.java @@ -1,8 +1,10 @@ package com.example.alzapp; +import android.content.Intent; import android.content.res.ColorStateList; import android.graphics.Color; import android.os.Bundle; +import android.os.CountDownTimer; import android.view.View; import android.widget.Button; import android.widget.RadioButton; @@ -13,8 +15,13 @@ import androidx.appcompat.app.AppCompatActivity; import java.util.Collections; import java.util.List; +import java.util.Locale; public class QuizQuestionPage extends AppCompatActivity { + + public static final String EXTRA_SCORE = "extraScore"; + private static final long COUNT_DOWN_MILLIS = 10000; + private TextView textViewQuestion; private TextView textViewScore; private TextView textViewQuestionCount; @@ -26,6 +33,10 @@ public class QuizQuestionPage extends AppCompatActivity { private Button buttonConfirmNext; private ColorStateList textColorDefaultRb; + private ColorStateList textColorDefaultCd; + + private CountDownTimer countDownTimer; + private long timeLeftInMillis; private List questionList; private int questionCounter; @@ -35,6 +46,8 @@ public class QuizQuestionPage extends AppCompatActivity { private int score; private boolean answered; + private long backPressedTime; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -52,6 +65,7 @@ public class QuizQuestionPage extends AppCompatActivity { textColorDefaultRb = rb1.getTextColors(); + textColorDefaultCd = textViewCountDown.getTextColors(); QuizDbHelper dbHelper = new QuizDbHelper(this); questionList = dbHelper.getAllQuestions(); @@ -94,14 +108,54 @@ public class QuizQuestionPage extends AppCompatActivity { textViewQuestionCount.setText("Question: " + questionCounter + "/" + questionCountTotal); answered = false; buttonConfirmNext.setText("Confirm"); + + timeLeftInMillis = COUNT_DOWN_MILLIS; + startCountdown(); + } else { finishQuiz(); } } + + private void startCountdown(){ + countDownTimer = new CountDownTimer(timeLeftInMillis,1000) { + @Override + public void onTick(long millisUntilFinished) { + timeLeftInMillis = millisUntilFinished; + updateCountDownText(); + } + + @Override + public void onFinish() { + timeLeftInMillis = 0; + updateCountDownText(); + checkAnswer(); + } + }.start(); + } + + private void updateCountDownText(){ + int minutes = (int) (timeLeftInMillis / 1000) /60; + int seconds = (int) (timeLeftInMillis / 1000) %60; + + String timeFormatted = String.format(Locale.getDefault(),"%02d:%02d",minutes,seconds); + textViewCountDown.setText(timeFormatted); + + + if(timeLeftInMillis < 5000){ + textViewCountDown.setTextColor(Color.GREEN); + } + else { + textViewCountDown.setTextColor(textColorDefaultCd); + } + } + private void checkAnswer() { answered = true; + countDownTimer.cancel(); + RadioButton rbSelected = findViewById(rbGroup.getCheckedRadioButtonId()); int answerNr = rbGroup.indexOfChild(rbSelected) + 1; @@ -114,21 +168,21 @@ public class QuizQuestionPage extends AppCompatActivity { } private void showSolution() { - rb1.setTextColor(Color.RED); + /** rb1.setTextColor(Color.RED); rb2.setTextColor(Color.RED); - rb3.setTextColor(Color.RED); + rb3.setTextColor(Color.RED); **/ switch (currentQuestion.getAnswerNr()) { case 1: - rb1.setTextColor(Color.GREEN); + // rb1.setTextColor(Color.GREEN); textViewQuestion.setText("Answer 1 is correct"); break; case 2: - rb2.setTextColor(Color.GREEN); + // rb2.setTextColor(Color.GREEN); textViewQuestion.setText("Answer 2 is correct"); break; case 3: - rb3.setTextColor(Color.GREEN); + // rb3.setTextColor(Color.GREEN); textViewQuestion.setText("Answer 3 is correct"); break; } @@ -141,6 +195,30 @@ public class QuizQuestionPage extends AppCompatActivity { } private void finishQuiz() { + Intent resultIntent = new Intent(); + resultIntent.putExtra(EXTRA_SCORE,score); + setResult(RESULT_OK,resultIntent); finish(); } + + @Override + public void onBackPressed() { + if(backPressedTime + 2000 > System.currentTimeMillis()){ + finishQuiz(); + } + else { + Toast.makeText(this,"Press back again to finish",Toast.LENGTH_SHORT).show(); + } + + backPressedTime = System.currentTimeMillis(); + } + + + @Override + protected void onDestroy() { + super.onDestroy(); + if(countDownTimer != null){ + countDownTimer.cancel(); + } + } } diff --git a/app/src/main/java/com/example/alzapp/TileMatchingActivity.java b/app/src/main/java/com/example/alzapp/TileMatchingActivity.java index 7175ae2..46e3ef9 100644 --- a/app/src/main/java/com/example/alzapp/TileMatchingActivity.java +++ b/app/src/main/java/com/example/alzapp/TileMatchingActivity.java @@ -8,6 +8,7 @@ import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.Button; +import android.widget.Chronometer; import android.widget.ImageView; import android.widget.TextView; @@ -38,7 +39,8 @@ public class TileMatchingActivity extends AppCompatActivity { img201,img202,img203,img204,img205,img206,img207,img208, firstCard,secondCard,clickedFirst,clickedSecond,cardNumber=1,playerMoves=0; - + private Chronometer chronometer; + public boolean running; @Override protected void onCreate(Bundle savedInstanceState) { @@ -46,6 +48,9 @@ public class TileMatchingActivity extends AppCompatActivity { setContentView(R.layout.activity_tile_matching); counter=(TextView) findViewById(R.id.counter1); + chronometer = findViewById(R.id.tileMatching_chronometer); + + i11=(ImageView) findViewById(R.id.i11); i12=(ImageView) findViewById(R.id.i12); i13=(ImageView) findViewById(R.id.i13); @@ -222,8 +227,6 @@ public class TileMatchingActivity extends AppCompatActivity { - - Button back = (Button) findViewById(R.id.back); back.setOnClickListener(new View.OnClickListener() { @@ -233,9 +236,16 @@ public class TileMatchingActivity extends AppCompatActivity { } }); + /** Game timer **/ + if(!running){ + chronometer.start(); + running = true; + } } + + private void doStuff(ImageView img,int card){ if(cardsArray[card]==101){ img.setImageResource(img101); @@ -495,9 +505,14 @@ public class TileMatchingActivity extends AppCompatActivity { i44.getVisibility()==View.INVISIBLE ){ AlertDialog.Builder message= new AlertDialog.Builder(TileMatchingActivity.this); - message.setMessage("GAME OVER!!\nMOVES= "+counter) - .setCancelable(false) - .setPositiveButton("NEXT", new DialogInterface.OnClickListener() { + message.setMessage("GAME OVER!!\nMOVES= "+counter); + /** Timer end **/ + if(running){ + chronometer.stop(); + running = false; + } + message.setCancelable(false); + message.setPositiveButton("NEXT", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); diff --git a/app/src/main/res/layout/activity_quick_quiz_start.xml b/app/src/main/res/layout/activity_quick_quiz_start.xml index 2bb7a13..2f2d77b 100644 --- a/app/src/main/res/layout/activity_quick_quiz_start.xml +++ b/app/src/main/res/layout/activity_quick_quiz_start.xml @@ -15,6 +15,7 @@ android:textColor="@android:color/black" /> + + + \ No newline at end of file