I want to write well-thought-out, professional, object-oriented code. I wrote this little game to practice this. My goal was to find out how to dissect a number guessing game object-oriented. In the following I present you my model. I ask you to check this model for thoroughness and quality. I will explain, step by step, how I came to formulate the individual program parts in this way, and not otherwise, and would ask you to point out any errors or imperfections of my object-oriented understanding.
My understanding of Objects
Objects in programming are used to depict facts or objects of the real world on the software level. An object has attributes and can do something with his attributes. On this idea my code will be based.
The Project
Before programming a project I have to clearly define, what I want to create. Keeping a long story short: I wanted to create a Game in which a Player has to Guess Numbers.
Detailed description and implementation
At first, there has to be a matrix respectively a surrounding, in which all of that will happen. I called the matrix Game.
In the game, there is the player and the "guess number game". Also here is stuff that is needed to interact with the game like a Scanner-object and other stuff.
Game.java
import java.util.Scanner;
public class Game {
private Scanner input;
private Player player;
private GuessNumberGame guessNumberGame;
private boolean running;
private String command;
Game() {
this.player = new Player();
this.input = new Scanner(System.in);
this.guessNumberGame = new GuessNumberGame(20);
this.running = true;
}
public void init() {
while (running) {
System.out.println("commands: leave, play");
System.out.print(">> ");
this.command = this.input.next();
if (this.command.equals("leave")) {
this.running = false;
} else if (command.equals("play")) {
this.player.play(this.input, this.guessNumberGame);
this.guessNumberGame.setSecretNumber(20);
} else {
System.out.println("unknown command");
}
}
}
}
The actual game (Not to be confused with my superior matrix, which is also called game, because the overall product is a game) Is the "guess number game". Here you can find the variables and the functions that are needed to play the guess number game.
GuessNumberGame.java
import java.util.Random;
public class GuessNumberGame {
private int secretNumber;
private Random random;
GuessNumberGame(int limit) {
this.random = new Random();
this.setSecretNumber(limit);
}
public void setSecretNumber(int limit) {
this.secretNumber = this.random.nextInt(limit);
}
public int getSecretNumber() {
return this.secretNumber;
}
}
The actual game logic is not implemented here because the player is the one who plays, not the game itself. That's why the game logic is found in the Player class.
Player.java
import java.util.Scanner;
public class Player {
public void play(Scanner input, GuessNumberGame game) {
int tries = 5;
int number = 0;
for (int i = 0; i < tries; i++) {
System.out.print("guess number: ");
number = Integer.parseInt(input.next());
if (number > game.getSecretNumber()) {
System.out.println("secret number is lower");
} else if (number < game.getSecretNumber()) {
System.out.println("secret number is higher");
} else {
break;
}
}
if (number == game.getSecretNumber()) {
System.out.println("WIN");
}
if (tries == 5 && number != game.getSecretNumber()) {
System.out.println("You needed to many attempts!");
}
}
}
Finally, the game only needs to be started and initialized in a starter.
public class Starter {
public static void main(String[] args) {
Game game = new Game();
game.init();
}
}
I want to write a much more complex but textual role playing game in Java. But before I do so, I wanted to check with your help if my object oriented programming skills are good enough for that in this little example. What do you think of my understanding of the object oriented programming? I am interested in your thoughts!