My Girl Friend Chat Game
Hello once more, welcome to the world of mobile
game development. Today, we are going to create a chat application which I
named “My Girl Friend Chat”. The game is
all about inputting some sort of question in the edit text. If the question in
the arrays of questions matches with the question inputted by you, then an
answer which corresponds to the question will be display on the textview
screen. This game is all about manipulating arrays to produce desirable result.
It involves creating a database using array of strings. If the question
inputted by you does not match any of the questions in the array, then the
computer should be able to randomly pick out “I don’t know” answers. Clearly,
the random class in Java will be use.
My girl friend chat game enables you to chat with
a computer as if it was a real person. Therefore, every step is necessary. It
should be able to think like a human and give answers to good questions. It
should be able to answer simple questions like what is your name. Where do you
live? To complicated questions like what do you believe in? And more
complicated naughty question like have you ever cheated on your boy friend?
Etc. To create a successful gaming experience, you will need to have close to
like a thousand or more questions in your database. But first thing first,
let’s check out the procedure
Procedures
1. An edit text for accepting input
2. A textview for displaying related answers.
3. A button for sending chat
4. An array of string for creating a question
database
5. An array of string for creating an answer
database
6. An array of string for creating “I don’t know
answer” database
activity_main.xml
1. Under activity_main.xml, input the following statement
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="unycorperation.mygirlfriendchat.MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="Chat with me" android:inputType="text" android:layout_below="@+id/textView" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="12dp" android:layout_marginStart="12dp" android:layout_marginTop="70dp" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" android:layout_below="@+id/editText" android:layout_centerHorizontal="true" android:layout_marginTop="30dp" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:textSize="45dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="69dp" /> </RelativeLayout> </ScrollView>
MainActivity.java
2. In your MainActivity.java, popularise it with the following statement
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.util.Random; public class MainActivity extends AppCompatActivity { String questions[]; String[] answers; String[] answerIdontKnow; Button button; EditText ed; TextView tv; private Random ran; private int myRan; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); ed = (EditText) findViewById(R.id.editText); tv = (TextView) findViewById(R.id.textView); tv.setText("1. At the end of every questions, use a question mark" + "\n" + "2. do not use comma(,), fullstop(.), exclamation mark(!) etc when asking a question"+ "\n"+ "3. you can choose to use either upercase or lowercase letters"); questions = new String[]{"how are you?", "how was your day?", "where are you?", "hi", "hello", "what is your idea of a perfect day?", "do you like to sing in the shower?", "are you a kind of friend you will want to have as a friend?", "do you like singing in the public?", "what was your first impression of me?", "do you feel like you can tell me anything?", "what do you love about me the most?", "do you rather follow your heart or head?", "what makes you smile?", "who is your favorite superhero?", "if you are having a bad day how can i cheer you up?", "what is the craziest thing you have done?", "have you ever look in the mirror and wink at yourself", "what is your most embarrassing moment?", "do you have any regrets in life?", "what do you believe in?", "have you ever cheated on your boyfriend?", "have you ever been in love", "have you ever been arrested?", "who influence you most in life?", "what is the biggest lie you ever told?", "how many sexual partner have you had?", "what is one thing you will never do again?", "what is one thing you will like to do again?", "where is our relationship going?", "do you want to have kids?", "what is your stance on divorce?", "how will you describe your self in 5 words?", "does size matter to you?", "tell me about your first time?", "why do i like you so much?", "on a scale from 1 t0 5 rate me im i your type?", "if giving the opportunity would you let me kiss you?", "what part of my body do you admire the most?", "what is your name?", "can you tell me your name please?", "please your name?", "no", "yes", "i like you", "nice speaking to you", "i love you", "whats up", "where do you live?", "what is your phone number?" }; answers = new String[]{"fine", "greate", "home", "hello", "hi", "being around people i love", "no", "yes", "yes", "tall and intelligent", "yes", "the way your handled matters", "head", "you", "captain america", "taking me shopping", "sky diving", "yes", "singing in public", "yes", "God", "no", "yes", "yes", "my mom", "The president of USA is my dad", "10 i think", "fall for the fake guys", "fall in love", "to marriage", "yes", "not a do and die affair", "good, beautiful, intelligent, smart, and loving", "yes", "why do you want to know?", "because i'm beautiful", "7, definitely yes", "yes", "do you really want to know?", "my name is Angel", "my name is Angel", "Angel", "i'm i lying?", "that intersting", "i like you too", "same here", "i am your girlfriend i know", "you were flirting with her", "Callifonai, USA", "0123456789" }; answerIdontKnow = new String[]{"i don't understnd", "maybe", "seriously", "can you explain", "oh! really", "is that suppose to be a good thing?", "come again please", "that is intersting", "you are bad", "you are boring", "please can we change the subject?" }; button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String myeditText = ed.getText().toString(); String input = myeditText.toLowerCase(); for (int i = 0; i < questions.length; i++) { if (input.indexOf(questions[i]) != -1) { tv.setText(answers[i]); break; } else { chooseAnswer(); } } } }); } public void chooseAnswer(){ ran = new Random(); myRan = ran.nextInt(11); tv.setText(answerIdontKnow[myRan]); } }
3. Click on shift + f10 to run the program
How it works
We have 50 questions and corresponding 50 answers
in both questions and answer database. We have 11 answers in “I don’t know”
database.
To create a database, we use an array of string.
This automatically acts as a database because more than one variable is in the
string of questions
questions = new String[]{"how are
you?",
"how was your day?",
"where are you?",
"hi",
"hello",
"what is your idea of a perfect day?",
"do you like to sing in the shower?",
"are you a kind of friend you will want to have as a friend?",
"do you like singing in the public?",
"what was your first impression of me?",
:
"how was your day?",
"where are you?",
"hi",
"hello",
"what is your idea of a perfect day?",
"do you like to sing in the shower?",
"are you a kind of friend you will want to have as a friend?",
"do you like singing in the public?",
"what was your first impression of me?",
:
:
:
"please your name?",
"no",
"yes",
"i like you",
"nice speaking to you",
"i love you",
"whats up",
"where do you live?",
"what is your phone number?"
};
Arrays start counting from 0 up to the last index. For instance the “how are you” have an index of 0. “How was your day” have an index of 1, “where are you” have an index of 2 and so on. For every string created, the next string is separated by a comma. Also, note that for the last array in a string there is no comma attach to it.
"no",
"yes",
"i like you",
"nice speaking to you",
"i love you",
"whats up",
"where do you live?",
"what is your phone number?"
};
Arrays start counting from 0 up to the last index. For instance the “how are you” have an index of 0. “How was your day” have an index of 1, “where are you” have an index of 2 and so on. For every string created, the next string is separated by a comma. Also, note that for the last array in a string there is no comma attach to it.
answers = new String[]{"fine",
"great",
"home",
"hello",
"hi",
"being around people i love",
"no",
"yes",
"yes",
"tall and intelligent",
"yes",
"the way your handled matters",
:
"great",
"home",
"hello",
"hi",
"being around people i love",
"no",
"yes",
"yes",
"tall and intelligent",
"yes",
"the way your handled matters",
:
:
:
"i'm i
lying?",
"that interesting",
"i like you too",
"same here",
"i am your girlfriend i know",
"you were flirting with her",
"California, USA",
"0123456789"
};
Now we know how to create a database using array. Therefore, we proceed by creating the answers to those questions. The answers are also an array of string which also has an index number starting from 0. Therefore, “fine” has an index number of 0, “great” and “home” have an index number of 1 and 2 respectively. Here is where the game comes into play. If the question[0] = answer[0] then there is a match. The million dollars question is how do we check this? By using a “for” statement.
"that interesting",
"i like you too",
"same here",
"i am your girlfriend i know",
"you were flirting with her",
"California, USA",
"0123456789"
};
Now we know how to create a database using array. Therefore, we proceed by creating the answers to those questions. The answers are also an array of string which also has an index number starting from 0. Therefore, “fine” has an index number of 0, “great” and “home” have an index number of 1 and 2 respectively. Here is where the game comes into play. If the question[0] = answer[0] then there is a match. The million dollars question is how do we check this? By using a “for” statement.
for (int i = 0; i < questions.length; i++) {
if (input.indexOf(questions[i]) != -1) {
tv.setText(answers[i]);
break;
} else {
chooseAnswer();
}
}
}
});
}
if (input.indexOf(questions[i]) != -1) {
tv.setText(answers[i]);
break;
} else {
chooseAnswer();
}
}
}
});
}
Firstly, we let the “for” loop to run across the
array of question strings for (int i = 0;
i < questions.length; i++) {.
This means that every string in the arrays of question is being check one after
the other.
Recall that the input is what we are inserting in
the edit text. The java function indexOf() checks if a particular string
correspond to a set of strings.
if (input.indexOf(questions[i]) != -1) {
Take this example
String love = “the good times”;
System.out.println(indexOf(“good”));
This actually returns true because the string “good” which we
are searching for is included in the main string of love.
tv.setText(answers[i]);
After which, we let the textview to display text that
correspond to the index number. Therefore, question[o] = answer[0] and
question[1] = answer[1] and so on. For instance we want to loop through this
array of string. If the keyword we are looking for is “fine” and we have two
string value in the array, the indexOf() will return false. Meaning that when
using indexOf() method, it return true if the keyword is unique and return
false otherwise.
answers = new String[]{"fine",
"great and fine"};
Take for instance the string “how was your day” and the string “how are you”. These strings contain two keyword which is “how” therefore, the indexOf() method will return false. The computer will be force to use another statement. This is where the function chooseAnswer() comes into play. Assuming the computer cannot fetch out the correct question inputted by the user, a function chooseAnswer() is called. This function actually picks answer from the array “answerIdontKnow” database.
"great and fine"};
Take for instance the string “how was your day” and the string “how are you”. These strings contain two keyword which is “how” therefore, the indexOf() method will return false. The computer will be force to use another statement. This is where the function chooseAnswer() comes into play. Assuming the computer cannot fetch out the correct question inputted by the user, a function chooseAnswer() is called. This function actually picks answer from the array “answerIdontKnow” database.
answerIdontKnow = new String[]{"i don't understnd",
"maybe",
"seriously",
"can you explain",
"oh! really",
"is that suppose to be a good thing?",
"come again please",
"that is intersting",
"you are bad",
"you are boring",
"please can we change the subject?"
};
"maybe",
"seriously",
"can you explain",
"oh! really",
"is that suppose to be a good thing?",
"come again please",
"that is intersting",
"you are bad",
"you are boring",
"please can we change the subject?"
};
It will be very stupid of the computer will always use a
single respond to question it does not understand. Therefore, we let the
computer to choose random answers to question it does not understand using the
random class from Java.
public void chooseAnswer(){ ran = new Random(); myRan = ran.nextInt(11); tv.setText(answerIdontKnow[myRan]); } }
It should be well noted that this random number generated by
the computer is place under every button click event. Meaning that each time
the button is click, a random number is generated. A user may choose to use
capitalize letters when asking questions. For instance the string “Where are
you?” is different from the string “WHERE ARE YOU” which is also different from
the string “where are you?” in other to avoid this error, we decided to change
all string to lower case letters.
String input = myeditText.toLowerCase();
Therefore, all string is treated as a lower case. The game
gives you a set of tutorial in game play. For instance the game give a
condition of always ending your question with a question mark and when asking
question do not use comma, exclamation mark, full stop, apostrophe, quotation
etc to ask your question. The game also considers different people with the
different way they speak. For instance I can ask you “what is your name” and
others may say “your name please”. It is for the duty of the app to respond to
the two different ways. If creating a string you should consider the different
ways certain people will ask their questions.
"what is your name?",
"can you tell me your name please?",
"please your name?"
You
can improve this game by including close to 5000 questions and 5000 answers.
For now we keep it simple."can you tell me your name please?",
"please your name?"
I have been following this blog for some time. love everything about it and awesome tutorial
ReplyDelete