4
\$\begingroup\$

Did I improve since then?

I have been writing this program today, and tried my best to improve my object-oriented understanding.

Mains.java:

import games.GameHandler;
import java.util.Scanner;
import java.io.*;

    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:

package games;
import java.io.*;

    public class GameHandler {

        private String[] games = {"Spin", "Tof"};
        private String[] navigation = {"Back", "Start"};
        private Spin spin = new Spin();
        private boolean spinGame = false;
        private boolean tofGame = false;
        public boolean inGame = false;

        /**
        * 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) {
            int returning = 0;
            for (String s : games) {
                if (value.equalsIgnoreCase(s)) {
                    returning = 1;
                }
            }
            if (returning == 1) {
                return true;
            } else {
                return false;
            }
        }

        /**
        * 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":
                break;
            }

            inGame = true;
        }

        /**
        * 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;
                }
            }
        }

        /**
        * Method exitGame
        *
        * Exit the game..
        **/

        public void exitGame() {
            spinGame = false;
            tofGame = false;
            this.printStart();
        }

        /**
        * 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;              
            }
        }
    }

spin.java:

package games;
import java.util.Random;

    public class Spin {

        /**
        * The base auth we are going to work with..
        **/

        private int auth = this.rand(1000) / 5; 

        /**
        * Creating new Random object.
        **/

        private Random r = new Random();

        /**
        * Method spinWheel
        *
        * Spins the damn wheel..
        * @return spinned value + if you won or not.
        **/

        public String spinWheel() {
            return this.spinWheel(this.rand(100));
        }

        /**
        * spinWheel
        *
        * Returning results.
        **/

        private String spinWheel(int number) {

            int result = this.Calculate(this.rand(number));

            if (result < 101) {
                return "You have won the game!" + result;
            } else {
                return "You've lost the game!" + result;
            }
        }

        /**
        * Method calculate
        *
        * Calculates the spin.
        * @return the spinned number.
        **/


        private int Calculate(int Number) {

            int var = this.rand(101);

            int holder = (var * Number) / 2;

            return holder + this.auth;
        }

        /**
        * Shortcut for nextInt of Random
        **/

        public int rand(int x) {
            return r.nextInt(x);
        }

    }

What's wrong with it? did I improve since last time? Any suggestions?

\$\endgroup\$
1
  • \$\begingroup\$ Please use a meaningful title and tell us what your code does and what it is supposed to do (and if you have any doubts about it). \$\endgroup\$
    – Bobby
    Commented Jul 9, 2013 at 8:11

2 Answers 2

4
\$\begingroup\$

i would suggest to change

  private boolean inArray(String value) {
        int returning = 0;
        for (String s : games) {
            if (value.equalsIgnoreCase(s)) {
                returning = 1;
            }
        }
        if (returning == 1) {
            return true;
        } else {
            return false;
        }
    }

to

  private boolean inArray(String value) {
        boolean doesExist = false;
        for (String s : games) {
            if (value.equalsIgnoreCase(s)) {
                doesExist = true;
                break;
            }
        }
        return doesExist;
    }

To OP : Pretty impressive improvement since then.

Put this

public class GameHandler {

    private String[] games = {"Spin", "Tof"};
    private String[] navigation = {"Back", "Start"};
    private Spin spin = new Spin();
    private boolean spinGame = false;
    private boolean tofGame = false;
    public boolean inGame = false;

into the GameHandler constructor, it is a convention to define non-static variable in the class constructor.


You have a massive error in your Spin class. you have declared private int auth = this.rand(1000) / 5;. So do you know how this keyword works? i don't think so, after running your new code and judge it by the previous i think that you only try break your huge code into smaller part without thinking the logic how it will be executed. I will recommend you to at first do some basic Java programming with small classes and methods and you should start with the official tutorial. Good Luck.

\$\endgroup\$
4
  • 3
    \$\begingroup\$ Once doesExist is true why not just exist immediately rather than continue the loop? \$\endgroup\$
    – dreza
    Commented Jul 9, 2013 at 3:55
  • \$\begingroup\$ Instead of returning doesExist, you can just do for (String s : games) { if (value.equalsIgnoreCase(s)) { return true; } } return false; There's no need for the variable. \$\endgroup\$
    – Corbin
    Commented Jul 9, 2013 at 8:19
  • \$\begingroup\$ @Corbin i was trying to change the code as close as OP's code. \$\endgroup\$ Commented Jul 9, 2013 at 8:22
  • 1
    \$\begingroup\$ @tintinmj Sometimes code should be drastically different than the OPs :). \$\endgroup\$
    – Corbin
    Commented Jul 9, 2013 at 8:37
2
\$\begingroup\$

Building on tintinmj’s answer, I would change his suggestion of

private boolean inArray(String value) {
    boolean doesExist = false;
    for (String s : games) {
        if (value.equalsIgnoreCase(s)) {
            doesExist = true;
            break;
        }
    }
    return doesExist;
}

into

private boolean inArray(String value) {
    for (String s : games)
        if (value.equalsIgnoreCase(s))
            return true;
    return false;
}

– Another reduction by half.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.