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…..