Michael Queue Michael Queue - 1 year ago 87
Java Question

Syntax and logic for moving player around game board array using do while loop java programming

I am trying to make a player move around a 2d board array in java while utilizing accessor and mutator methods to update the attributes of my object so I am going to try and make this question as in depth as possible. I do not understand the logic or the syntax that I must use to properly move the player and return the required information. I am working from code that was developed. My job is to move the player around the board and return information from a monopoly text file including the player position and new bank balance. Additionally, I have to ask if the player wants to continue and stop the game if the bank balance is zero. I really need help with the do while loop in the main method. I cannot get the syntax correct and do not have a great understanding of how the logic works. I am posting all of my code thus far.

package monopoly;

import java.util.*;

public class Monopoly {

* @param args the command line arguments

public static void main(String[] args) throws Exception {

BoardSquare[] square = new BoardSquare[40]; // array of 40 monopoly squares

Player thePlayer = new Player();//new object thePlayer from Player class
thePlayer.getLocation();//call method getLocation which should be instantiated from player class to zero
int i;

Dice diceOne = new Dice();//new dice object
Dice diceTwo = new Dice();//new dice object
int rollOne; //variable to hold rollOne
int rollTwo; //variable to hold rollTwo
int rollTotal; //variable to hold rollTotal

do {

rollOne = diceOne.roll();
rollTwo = diceTwo.roll();
rollTotal = rollOne+rollTwo;

BoardSquare newPosition = square[thePlayer.getLocation() + rollTotal];

while (thePlayer.getBalance() > 0);

// test the code by printing the data for each square

System.out.println("Data from the array of Monopoly board squares. Each line has:\n");

System.out.println("name of the square, type, rent, price, color\n");

for(i = 0; i < 40; i++)

System.out.println( square[i].toString() );


// method to load the BoardSquare array from a data file
public static void loadArray(BoardSquare[] square) throws Exception {

int i; // a loop counter

// declare temporary variables to hold BoardSquare properties read from a file
String inName;
String inType;
int inPrice;
int inRent;
String inColor;

// Create a File class object linked to the name of the file to be read
java.io.File squareFile = new java.io.File("squares.txt");

// Create a Scanner named infile to read the input stream from the file
Scanner infile = new Scanner(squareFile);

* This loop reads data into the square array.
* Each item of data is a separate line in the file.
* There are 40 sets of data for the 40 squares.

for(i = 0; i < 40; i++) {

// read data from the file into temporary variables
// read Strings directly; parse integers
inName = infile.nextLine();
inType = infile.nextLine();
inPrice = Integer.parseInt( infile.nextLine() );
inRent = Integer.parseInt( infile.nextLine() );;
inColor = infile.nextLine();

// intialze each square with the BoardSquare constructor
square[i] = new BoardSquare(inName, inType, inPrice, inRent, inColor);
} // end for


} // endLoadArray

} // end class Monopoly


class BoardSquare {

private String name; // the name of the square
private String type; // property, railroad, utility, plain, tax, or toJail
private int price; // cost to buy the square; zero means not for sale
private int rent; // rent paid by a player who lands on the square
private String color; // many are null; this is not the Java Color class

// constructors
public BoardSquare() {
name = "";
type = "";
price = 0;
rent = 0;
color = "";
} // end Square()

public BoardSquare(String name, String type, int price, int rent, String color) {
this.name = name;
this.type = type;
this.price = price;
this.rent = rent;
this.color = color;
} // end Square((String name, String type, int price, int rent, String color)

// accesors for each property
public String getName() {
return name;
} //end getName()

public String getType() {
return type;
} //end getType()

public int getPrice() {
return price;
} //end getPrice()

public int getRent() {
return rent;
} //end getRent()

public String getColor() {
return color;
} //end getColor()

// a method to return the BoardSquare's data as a String
public String toString() {
String info;
info = (name +", "+type+", "+price + ", "+ rent+ ", "+color);
return info;
} //end toString()

} // end class BoardSquare


class Player {
private String name;
private String token;
private int location;
private int balance;
private String player;

public Player() {
name = "";
token = "";
location = 0;
balance = 1500;
} // end Square()

public Player(String name, String token, int location, int balance) {
this.name = name;
this.token = token;
this.location = location;
this.balance = balance;

* @return the name

public String getName() {
return name;

* @param name the name to set

public void setName(String name) {
this.name = name;

* @return the token

public String getToken() {
return token;

* @param token the token to set

public void setToken(String token) {
this.token = token;

* @return the location

public int getLocation() {
return location;

* @param location the location to set

public void setLocation(int location) {
this.location = location;

* @return the balance

public int getBalance() {
return balance;

* @param balance the balance to set

public void setBalance(int balance) {
this.balance = balance;

* @return the player

public String getPlayer() {
return player;

* @param player the player to set

public void setPlayer(String player) {
this.player = player;

void setLocation() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.

} //end class player


class Dice {

public static int roll() {
int total;
total = 1 + (int)(Math.random() * 6);

return total;

Answer Source

Start with writting down what should happen in the loop. I suggest some of the follwing:

  • print state of the board
  • throw dices and move player
  • perform action on new square (i.e ask player whether he wants to buy it or take the money if thesquare belongs to somebody else)
  • go too top, but now with the next player

You best write functions for all these steps. And as said, you'll probably want more than one player instance.


Syntactically, you've almost got everything there already.

This prints the current state of the board, just copy it where you need it:

for( i=0; i<40; i++)
System.out.println( square[i].toString() );

The code in the loop moves the player:


BoardSquare newPosition=square[thePlayer.getLocation()+rollTotal];

Then the only step remaining is actually to perform the operation on the target square. This should probably best be a function of the player, so that would be:


That requires a method in the player class:

public void OperationOnSquare(BoardSquare newSquare)
     // Perform some operation, like reduce balance

Finally, you can ask the player whether he wants to continue. The mentioned steps 5 and 6 (you meant to write 6 and 7) are redundant, as that's already at the beginning of the next loop.