Michael Queue Michael Queue - 2 months ago 13
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;
loadArray(square);

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

infile.close();

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

PMF PMF
Answer

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.

Edit:

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:

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

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:

player.ActionOnSquare(newPosition);

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.

Comments