简体   繁体   中英

Need help creating a looping structure to make my program run

So here is my program. I think I have everything I need but I am really bad at looping and need to ask you guys for some help. It is a monopoly board with just one player needing to go around the board (40 squares, one time) .

package monopoly;
import java.util.*;

public class Monopoly1 {

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

    }
}

What I need the loop to do: Roll the two dice, add those two numbers together and move the player to that location (starting from 0). When a player arrives on a square a message should be displayed with

  1. the name of the player
  2. the name of the player's token
  3. the roll of the dice
  4. the name of the square the player is now on
  5. the rent for the square, if it is not zero
  6. the player's new bank balance

Then the program should say 'press enter to continue' and continues when the player presses enter. The loop should stop once the player has gone around the board one time (so when the dice rolled eventually equal to 40 or more).

I'd start with a while loop, something like:

int die_total = 0;
int die1_value = 0;
int die2_value = 0;
while(die_total <=40) {
//determine random values for die 1 and 2
//add them together and move your player
//do your 1-6
//put your wait for user input here with an Object.wait()
//add the die 1 and 2 values to your die_total
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM