First of all, I won't include the spin game there, cause it's very simple.
I went a bit deeper into object oriented since the last time, I learned array lists, using them with objects, maphashes, and more.
They are pretty useful I must say!
Let's begin:
Mains.java:
public class Mains {
public static void main (String[] args) {
//Start the game
startGame();
}
private static void startGame() {
//Declares
GameHandler handler = new GameHandler();
Scanner console = new Scanner(System.in);
boolean game = true;
String input = "";
//Print program welcome text
handler.printStart();
//While in game...
while (game) {
//Getting input ready for new commands from the player
input = console.nextLine();
//Checking if input was set.
if (input != null) {
//Selecting the game you want to play.
handler.selectGame(input);
//If game was selected.. then.. let's start playing.
while (handler.inGame) {
//Use will say something.
input = console.nextLine();
//If it was "exit", it will go back and select another game.
if (input.equals("exit")) {
handler.exitGame();
} else {
//Play again.
handler.continueGame(input);
}
}
}
}
}
}
GameHandler.java:
public class GameHandler {
private String[] games = {"Spin", "Tof"};
private Spin spin = new Spin();
private Tof tof = new Tof();
private boolean spinGame = false;
public static boolean tofGame = false;
public boolean inGame = false;
public int myPoints = 0;
/**
* Method printStart
*
* Will welcome the player to the program.
*/
public void printStart() {
this.print(0, "Welcome to the program!");
this.print(0, "Please select a game: " + this.availableGames());
}
/**
* Method available games
*
* This will print all the games that are located in the games array in one row.
**/
private String availableGames() {
String names = "";
for (int i = 0; i < games.length; i++) {
names = (names + games[i]);
if (i < games.length -1) {
names = (names + ", ");
}
}
return names;
}
/**
* Method selectGame
*
* This will select the given game.
* @param command The entered command.
**/
public void selectGame(String command) {
if (this.inArray(command))
{
if (command.equalsIgnoreCase("spin")) {
this.startGame("spin");
} else if (command.equalsIgnoreCase("tof")) {
this.startGame("tof");
}
} else {
this.print(0, "Could not find game!");
}
}
/**
* Method inArray
*
* This will check if the entered game name is exisiting in the games array.
* If yes, will return a boolean true, else false.
*
* @param value The entered game name.
* @return boolean true/false.
**/
private boolean inArray(String value) {
boolean exists = false;
for (String s : games) {
if (value.equalsIgnoreCase(s)) {
exists = true;
}
}
return exists;
}
/**
* Method startGame
*
* Will start the game, and print instructions.
* will set the game boolean to true.
**/
private void startGame(String game) {
switch (game) {
case "spin":
this.print(0, "Welcome to spin game!");
this.print(0, "Please click on any key to spin!");
spinGame = true;
break;
case "tof":
this.print(0, "Welcome to the ToF game!");
this.print(0, "Please answer the questions.");
System.out.println("");
System.out.println("===============");
System.out.println("QUESTION");
System.out.println("===============");
System.out.println("");
this.generateQuestion();
tofGame = true;
break;
}
inGame = true;
}
private void generateQuestion() {
System.out.println(tof.selectQuestion());
}
/**
* Method continueGame
*
* Will continue the game, either spin again, or print new question or even answer.
* @param command The entered command.
**/
public void continueGame(String command) {
while (inGame) {
if (spinGame) {
this.spinWheel();
// Break out of the loop.
break;
}
if (tofGame) {
this.checkAnswer(command);
break;
}
}
}
public void checkAnswer(String command) {
if (tof.checkQuestion(command)) {
tof.myPoints++;
System.out.println("<------------->");
System.out.println("Nice job!");
System.out.println("You received 1 point, you now have " + tof.myPoints + " Points");
System.out.println("<------------->");
System.out.println("");
System.out.println("===============");
System.out.println("NEXT QUESTION");
System.out.println("===============");
System.out.println("");
this.generateQuestion();
}
else {
System.out.println("");
System.out.println("Your answer was incorrect.");
System.out.println("");
System.out.println("===============");
System.out.println("NEXT QUESTION");
System.out.println("===============");
System.out.println("");
this.generateQuestion();
}
}
/**
* Method exitGame
*
* Exit the game..
**/
public void exitGame() {
System.out.println("");
System.out.println("");
spinGame = false;
tofGame = false;
inGame = false;
this.printStart();
tof.selectQuestion();
}
/**
* Method spinWheel
*
* This will spin the wheel.
**/
private void spinWheel() {
this.print(0, spin.spinWheel());
}
/**
* Method print
*
* Prints text using System.out
* @param type printing type (Println/print).
* @param message The message
**/
private void print(int type, String message) {
switch (type) {
case 0:
System.out.println(message);
break;
case 1:
System.out.print(message);
break;
}
}
}
Tof.java:
public class Tof {
private Random r = new Random();
private ArrayList<QnA> questionArray = new ArrayList<QnA>();
public int question;
public int myPoints = 0;
public Tof() {
questionArray.add(new QnA("Is daniel big? ", "true"));
questionArray.add(new QnA("Does Daniel sucking at linux?", "false"));
questionArray.add(new QnA("Daniel is pink? ", "true"));
questionArray.add(new QnA("Daniel is funny? ", "false"));
}
public String selectQuestion() {
if (questionArray.size() > 0) {
int index = r.nextInt(questionArray.size());
this.question = index;
return questionArray.get(index).getQuestion();
}
else {
this.noQuestions();
return "Please type exit and re-enter the game.";
}
}
public boolean checkQuestion(String answer) {
boolean returning = false;
if (questionArray.get(this.question).getAnswer().equalsIgnoreCase(answer)) {
returning = true;
}
questionArray.remove(this.question);
return returning;
}
private void noQuestions() {
if (GameHandler.tofGame) {
System.out.println("");
System.out.println("Oh boy! It looks like you've ran out of questions.");
System.out.println("blabla");
System.out.println("");
System.out.println("You could gain total of " + this.myPoints + " Points.");
this.myPoints = 0;
}
GameHandler.tofGame = false;
}
}
and last one, QnA class:
public class QnA {
private String question = "";
private String answer = "";
public QnA(String q, String a) {
this.question = q;
this.answer = a;
}
public String getQuestion() {
return question;
}
public String getAnswer() {
return answer;
}
}
I want to focus on my Object-oriented structures, how I handle the code, etc. Please tell me what's wrong and useless code there (Besides the plant printlns hehe).
Thanks!