Android Game Tutorial – Part 2 (Using Radio Buttons)

  • by

Android Game Tutorial

A very very simple android game using SQLite database.

What the application will be doing is :

  • A timer of 1 minute
  • 20 Questions
  • A questions bank class
  • Three buttons for showing options
  • And a good looking UI. Hope you like.

So make a new android application in android studio and name it whatever you want to name it. I named it A simple game.

DESIGNING PART :

Open your activity_main.xml file [res > layout > activity_main.xml ] and edit it as :

activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/relatively"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#d15400"
android:orientation="vertical"
android:weightSum="1" >

<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.90"
android:orientation="vertical"
android:weightSum="1" >

<LinearLayout
android:id="@+id/linearLayout11"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.20"
android:orientation="vertical"
android:weightSum="1" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal" >

<TextView
android:id="@+id/score"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:gravity="center"
android:text="Score : 1"
android:textColor="#ffffff"
android:textSize="25.0sp"
android:textStyle="bold" />

<TextView
android:id="@+id/timers"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:gravity="center"
android:text="00:00:49"
android:textColor="#ffffff"
android:textSize="25.0sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>

<LinearLayout
android:id="@+id/linearLayout12"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.60"
android:orientation="vertical"
android:weightSum="1" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.40" >

<TextView
android:id="@+id/txtQuestion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:gravity="center"
android:text="15*2*1-1"
android:textColor="#ffffff"
android:textSize="35.0sp"
android:textStyle="bold" />
</LinearLayout>

<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="fill_parent"
android:layout_height="90dp"
android:layout_weight="0.20"
android:orientation="vertical"
android:weightSum="3" >

<RadioButton
android:id="@+id/option1"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:checked="false"
android:text="Option 1"
android:textSize="25dp" />

<RadioButton
android:id="@+id/option2"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:checked="false"
android:text="Option 2"
android:textSize="25dp" />

<RadioButton
android:id="@+id/option3"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:checked="false"
android:text="Option 3"
android:textSize="25dp" />
</RadioGroup>
</LinearLayout>
</LinearLayout>

</LinearLayout>

 

Make another xml file with name activity_result.xml and edit it as following :

activity_result.xml

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#2a3f4c"
        android:orientation="vertical"
        android:layout_centerInParent="true"
        >
        <TextView
            android:id="@+id/textResult"
            android:layout_width="match_parent"
            android:layout_gravity="center"
            android:layout_marginTop="50dp"
            android:layout_height="wrap_content"
            android:text="Large Text"
            android:textColor="#ffffff"
            android:textSize="20sp"
            padding:"10dp";
            android:textStyle="bold" />
        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#000000"
            android:layout_marginTop="50dp"
            android:padding="20dp"
            android:layout_gravity="center"
            android:onClick="playagain"
            android:text="PLAY AGAIN"
            android:textColor="#ffffff"
            android:textSize="20sp"/>
    </LinearLayout>

OK design part is  done (as simple as that).

CODING PART :

There are four class files :

    • Question.java
    • QuestionActivity.java
    • QuizHelper.java
    • ResultActivity.java

Make it and edit all of them as below.

Question.java

package hitesh.asimplegame;
import android.app.Activity;
public class Question extends Activity {
	private int ID;
	private String QUESTION;
	private String OPTA;
	private String OPTB;
	private String OPTC;
	private String ANSWER;
	public Question() {
		ID = 0;
		QUESTION = "";
		OPTA = "";
		OPTB = "";
		OPTC = "";
		ANSWER = "";
	}
	public Question(String qUESTION, String oPTA, String oPTB, String oPTC,
			String aNSWER) {
		QUESTION = qUESTION;
		OPTA = oPTA;
		OPTB = oPTB;
		OPTC = oPTC;
		ANSWER = aNSWER;
	}
	public int getID() {
		return ID;
	}
	public String getQUESTION() {
		return QUESTION;
	}
	public String getOPTA() {
		return OPTA;
	}
	public String getOPTB() {
		return OPTB;
	}
	public String getOPTC() {
		return OPTC;
	}
	public String getANSWER() {
		return ANSWER;
	}
	public void setID(int id) {
		ID = id;
	}
	public void setQUESTION(String qUESTION) {
		QUESTION = qUESTION;
	}
	public void setOPTA(String oPTA) {
		OPTA = oPTA;
	}
	public void setOPTB(String oPTB) {
		OPTB = oPTB;
	}
	public void setOPTC(String oPTC) {
		OPTC = oPTC;
	}
	public void setANSWER(String aNSWER) {
		ANSWER = aNSWER;
	}
}

QuestionActivity.java

package parallel.codes.androidgame;

import java.util.List;
import java.util.Timer;
import java.util.concurrent.TimeUnit;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

public class QuestionActivity extends Activity {
 List<Question> quesList;
 int score = 0;
 int qid = 0;
 Question currentQ;
 TextView txtQuestion, times, scored;
 RadioGroup radioGroup;
 RadioButton r1, r2, r3;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.secondactivity);
 QuizHelper db = new QuizHelper(this); // my question bank class
 quesList = db.getAllQuestions(); // this will fetch all quetonall
 // questions
 currentQ = quesList.get(qid); // the current question
 txtQuestion = (TextView) findViewById(R.id.txtQuestion);

 radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
 
 r1 = (RadioButton) findViewById(R.id.option1);
 r2 = (RadioButton) findViewById(R.id.option2);
 r3 = (RadioButton) findViewById(R.id.option3);
 scored = (TextView) findViewById(R.id.score);
 // the timer
 times = (TextView) findViewById(R.id.timers);
 // method which will set the things up for our game
 setQuestionView();
 times.setText("00:02:00");
 // A timer of 60 seconds to play for, with an interval of 1 second (1000
 // milliseconds)
 CounterClass timer = new CounterClass(60000, 1000);
 timer.start();
 // button click listeners
 
 r1.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 // passing the button text to other method
 // to check whether the anser is correct or not
 // same for all three buttons
 getAnswer(r1.getText().toString());
 }
 });
 r2.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 getAnswer(r2.getText().toString());
 }
 });
 r3.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 getAnswer(r3.getText().toString());
 }
 });
 }

 public void getAnswer(String AnswerString) {
 if (currentQ.getANSWER().equals(AnswerString)) {
 // if conditions matches increase the int (score) by 1
 // and set the text of the score view
 score++;
 scored.setText("Score : " + score);
 } else {
 // if unlucky start activity and finish the game
 Intent intent = new Intent(QuestionActivity.this,
 ResultActivity.class);
 // passing the int value
 Bundle b = new Bundle();
 b.putInt("score", score); // Your score
 intent.putExtras(b); // Put your score to your next
 startActivity(intent);
 finish();
 }
 if (qid < 20) {
 // if questions are not over then do this
 currentQ = quesList.get(qid);
 setQuestionView();
 } else {
 // if over do this
 Intent intent = new Intent(QuestionActivity.this,
 ResultActivity.class);
 Bundle b = new Bundle();
 b.putInt("score", score); // Your score
 intent.putExtras(b); // Put your score to your next
 startActivity(intent);
 finish();
 }
 }

 @TargetApi(Build.VERSION_CODES.GINGERBREAD)
 @SuppressLint("NewApi")
 public class CounterClass extends CountDownTimer {
 public CounterClass(long millisInFuture, long countDownInterval) {
 super(millisInFuture, countDownInterval);
 // TODO Auto-generated constructor stub
 }

 @Override
 public void onFinish() {
 times.setText("Time is up");
 }

 @Override
 public void onTick(long millisUntilFinished) {
 // TODO Auto-generated method stub
 long millis = millisUntilFinished;
 String hms = String.format(
 "%02d:%02d:%02d",
 TimeUnit.MILLISECONDS.toHours(millis),
 TimeUnit.MILLISECONDS.toMinutes(millis)
 - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS
 .toHours(millis)),
 TimeUnit.MILLISECONDS.toSeconds(millis)
 - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS
 .toMinutes(millis)));
 System.out.println(hms);
 times.setText(hms);
 }
 }

 private void setQuestionView() {
 // the method which will put all things together
 txtQuestion.setText(currentQ.getQUESTION());
 r1.setText(currentQ.getOPTA());
 r2.setText(currentQ.getOPTB());
 r3.setText(currentQ.getOPTC());
 
 r1.setSelected(false);
 r2.setSelected(false);
 r3.setSelected(false);
 qid++;
 }
}

QuizHelper.java

package hitesh.asimplegame;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class QuizHelper extends SQLiteOpenHelper {
	private static final int DATABASE_VERSION = 1;
	// Database Name
	private static final String DATABASE_NAME = "mathsone";
	// tasks table name
	private static final String TABLE_QUEST = "quest";
	// tasks Table Columns names
	private static final String KEY_ID = "qid";
	private static final String KEY_QUES = "question";
	private static final String KEY_ANSWER = "answer"; // correct option
	private static final String KEY_OPTA = "opta"; // option a
	private static final String KEY_OPTB = "optb"; // option b
	private static final String KEY_OPTC = "optc"; // option c
	private SQLiteDatabase dbase;
	public QuizHelper(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}
	@Override
	public void onCreate(SQLiteDatabase db) {
		dbase = db;
		String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_QUEST + " ( "
				+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_QUES
				+ " TEXT, " + KEY_ANSWER + " TEXT, " + KEY_OPTA + " TEXT, "
				+ KEY_OPTB + " TEXT, " + KEY_OPTC + " TEXT)";
		db.execSQL(sql);
		addQuestion();
		// db.close();
	}
	private void addQuestion() {
		Question q1 = new Question("5+2 = ?", "7", "8", "6", "7");
		this.addQuestion(q1);
		Question q2 = new Question("2+18 = ?", "18", "19", "20", "20");
		this.addQuestion(q2);
		Question q3 = new Question("10-3 = ?", "6", "7", "8", "7");
		this.addQuestion(q3);
		Question q4 = new Question("5+7 = ?", "12", "13", "14", "12");
		this.addQuestion(q4);
		Question q5 = new Question("3-1 = ?", "1", "3", "2", "2");
		this.addQuestion(q5);
		Question q6 = new Question("0+1 = ?", "1", "0", "10", "1");
		this.addQuestion(q6);
		Question q7 = new Question("9-9 = ?", "0", "9", "1", "0");
		this.addQuestion(q7);
		Question q8 = new Question("3+6 = ?", "8", "7", "9", "9");
		this.addQuestion(q8);
		Question q9 = new Question("1+5 = ?", "6", "7", "5", "6");
		this.addQuestion(q9);
		Question q10 = new Question("7-5 = ?", "3", "2", "6", "2");
		this.addQuestion(q10);
		Question q11 = new Question("7-2 = ?", "7", "6", "5", "5");
		this.addQuestion(q11);
		Question q12 = new Question("3+5 = ?", "8", "7", "5", "8");
		this.addQuestion(q12);
		Question q13 = new Question("0+6 = ?", "7", "6", "5", "6");
		this.addQuestion(q13);
		Question q14 = new Question("12-10 = ?", "1", "2", "3", "2");
		this.addQuestion(q14);
		Question q15 = new Question("12+2 = ?", "14", "15", "16", "14");
		this.addQuestion(q15);
		Question q16 = new Question("2-1 = ?", "2", "1", "0", "1");
		this.addQuestion(q16);
		Question q17 = new Question("6-6 = ?", "6", "12", "0", "0");
		this.addQuestion(q17);
		Question q18 = new Question("5-1 = ?", "4", "3", "2", "4");
		this.addQuestion(q18);
		Question q19 = new Question("4+2 = ?", "6", "7", "5", "6");
		this.addQuestion(q19);
		Question q20 = new Question("5+1 = ?", "6", "7", "5", "6");
		this.addQuestion(q20);
		Question q21 = new Question("5-4 = ?", "5", "4", "1", "1");
		this.addQuestion(q21);
		// END
	}
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldV, int newV) {
		// Drop older table if existed
		db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUEST);
		// Create tables again
		onCreate(db);
	}
	// Adding new question
	public void addQuestion(Question quest) {
		// SQLiteDatabase db = this.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put(KEY_QUES, quest.getQUESTION());
		values.put(KEY_ANSWER, quest.getANSWER());
		values.put(KEY_OPTA, quest.getOPTA());
		values.put(KEY_OPTB, quest.getOPTB());
		values.put(KEY_OPTC, quest.getOPTC());
		// Inserting Row
		dbase.insert(TABLE_QUEST, null, values);
	}
	public List<Question> getAllQuestions() {
		List<Question> quesList = new ArrayList<Question>();
		// Select All Query
		String selectQuery = "SELECT  * FROM " + TABLE_QUEST;
		dbase = this.getReadableDatabase();
		Cursor cursor = dbase.rawQuery(selectQuery, null);
		// looping through all rows and adding to list
		if (cursor.moveToFirst()) {
			do {
				Question quest = new Question();
				quest.setID(cursor.getInt(0));
				quest.setQUESTION(cursor.getString(1));
				quest.setANSWER(cursor.getString(2));
				quest.setOPTA(cursor.getString(3));
				quest.setOPTB(cursor.getString(4));
				quest.setOPTC(cursor.getString(5));
				quesList.add(quest);
			} while (cursor.moveToNext());
		}
		// return quest list
		return quesList;
	}
}

ResultActivity.java

package hitesh.asimplegame;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class ResultActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_result);
		TextView textResult = (TextView) findViewById(R.id.textResult);
		Bundle b = getIntent().getExtras();
		int score = b.getInt("score");
        textResult.setText("Your score is " + " " + score + ". Thanks for playing my game.");
	}
	public void playagain(View o) {
			Intent intent = new Intent(this, QuestionActivity.class);
			startActivity(intent);
	}
}

And last but not the least AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="hitesh.asimplegame" >
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".QuestionActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ResultActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"/>
    </application>
</manifest>

You can download the source using this link : A simple game

I think there’s no need of explaination what a particular class is doing, as if you are reading this, you are probably not a android beginner. And its simple to understand anyway all class. Then also you can question below to me.

Hey please comment below about what do you think about this post and my work. I do appreciate your time you spend reading my post…..

 


Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.