Welcome to the Java Programming Forums


The professional, friendly Java community. 21,500 members and growing!


The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.


>> REGISTER NOW TO START POSTING


Members have full access to the forums. Advertisements are removed for registered users.

Results 1 to 5 of 5

Thread: Having trouble figuring out this method. Involves while-loops!

  1. #1
    Junior Member
    Join Date
    Sep 2011
    Posts
    8
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Arrow Having trouble figuring out this method. Involves while-loops!

    Programming Assignment: Opoly

    For this assignment, your job is to create a kind of lobotomized version of a board game (such as Monopoly) called Opoly.

    Opoly works this way: The board is a straight linear track of variable length (you determine the length when you start up the game). There is only one playing piece, which begins the game just off the board, at position 0. Thus, if the board length is 20, then the board positions start at position 1 and end at position 20. To finish the game, the piece must land exactly on the last cell of the board (e.g., cell 20 in the example above).

    The object of the game is to acquire reward. The reward amount is initialized to 12. If your board piece lands on a board cell that is divisible evenly by 5, your reward doubles. However, if your piece lands one cell shy of the final board cell, your reward is reduced to 1/5 of its current value (via integer division), and your piece must go back to the start position - position 0. Note, though, that if the position of the last cell is divisible evenly by 5, then reward is doubled just before the game ends.

    In Opoly the game piece advances via a spinner - a device that takes on the values 1-2-3-4-5 at random, with each advance value equally likely.

    Two additional rules:

    1) if a spin would move the piece beyond the end of the board, the piece should not advance at all (thus, if the piece is at location 18 of a 20 cell board, and if the spinner spins a 5, this is counted as a move but the piece remains at location 18.) If a piece doesn't move at all, its current reward amount should remain unchanged, even if the piece sits at a location that is divisible evenly by 5.

    2) if the next to last board location is divisible by 5, and if the piece lands on this location, the reward is reduced to 1/5 of its current value only - the reward is NOT also doubled. Example: the board size is 26, and the piece is at location 23, with reward 30. Suppose the spinner spins a 2. This puts the piece on the next to the last location on the board (25). This resets the reward to 6 = 30 * 1/5, and places the piece at location 0. Even though location 25 is divisible by 5, no doubling happens.

    Here is the driver class for the game:

    import java.util.*;

    public class OpolyDriver{

    public static void main(String[] args){
    System.out.println("Enter an int - the size of the board");
    Scanner s = new Scanner(System.in);
    int boardSize = s.nextInt();
    System.out.println("Board Size: " + boardSize);
    Opoly g = new Opoly(boardSize);
    g.playGame();
    }
    }


    Here is a sample run:

    > java OpolyDriver
    Enter an int - the size of the board
    Board Size: 20
    *O****************** 12 // current position is 2, current reward is 12
    ****O*************** 24 // current position is 5, reward is 24
    *******O************ 24
    **************O***** 48
    ********************O 96 // board size is 20, so reward doubles before game ends
    game over
    rounds of play 5
    final reward 96

    A requirement: your Opoly class must include and make use of the following methods, in addition to the Opoly constructor and principal method playGame(). These are:

    * spin - generates a integer value from 1 to 5 at random
    * move - advances the piece
    * spinAndMove - spins the spinner and then advances the piece according to the rules of the game (uses spin, move methods)
    * isGameOver - checks if game termination condition has been met
    * drawBoard - draws the board using *'s and an O to mark the current board position. Feel free to improve on the display we've shown above.
    * displayReport - reports the end of the game, and gives the number of rounds of play, and the final reward




    How to proceed:

    * First, decide on the attributes for the Opoly class. At any instant, what is the "state" of the board? What do you need to keep track of to give the final report? The answers to these questions will tell you what the attributes to Opoly can be.

    * Second, write the Opoly constructor.

    * Third, try to write the playGame method using the methods outlined above. A good way to proceed is to write a "dummy" drawBoard method first - instead of having it draw anything, merely have it print out the current position. Once you're satisfied with the general running of the game in this format, then work on the drawing part.

    * My board rendering is particularly klunky. If you like, you may devise a better way to draw the board. Of course make sure that you get the numbers right.

    Paste in your Opoly class in the box below:

    NOTE: you may NOT use any import statements in your class. Use the Math class methods to generate your random numbers. Do NOT import the java.util library.
    Okay, I just included the assignment in case anyone was confused by what I'm asking here. This is my code so far:

    public class Opoly{
      private int boardSize;
      int[] gameArray;
      private int position;
      private int spins;
      private int moves;
      private int reward;
      private int round=0;
     
      public Opoly(int boardSize){
        this.boardSize = boardSize;
        this.gameArray = new int[boardSize];
        this.position = 0;
        this.reward = 12;
      }
      public void spin(){//generates random integer for spinner
        this.spins = (int)(Math.random()*5+1);
      }
      public void move(){//advances the piece
        this.moves = position + spins;
      }
      public void spinAndMove(){//spins spinner and advances piece according to rules of game
          if (((position%5)==0)&&(position!=gameArray.length-1)){
            reward=reward*2;
            position+=spins;
          }
          else if (position==gameArray.length-1){
            reward=reward/5;
            position=0;
          }
          else if(this.moves > gameArray.length){
            position = position;
            reward=reward;
            round++;
          }
          else if(this.moves < gameArray.length){
            position += spins;
            round++;
          }
          else if(position==gameArray.length){
     
      }
     
      public void isGameOver(){//checks if condition for ending game is met
        System.out.println("game over");
      }
      public void drawBoard(){//prints board with *'s and O's to show current position
        for(int k=1; k<=gameArray.length+1; k++){
          if(position==k){
            System.out.print("O");
          }
          else{
            System.out.print("*");
          }
        }
        System.out.print(reward);
        System.out.println("");
      }
      public void displayReport(){//reports game over, rounds, and final reward
        isGameOver();
        System.out.println("rounds of play: "+round);
        System.out.println("final reward: "+reward);  
      }  
      public void playGame(){//initiates game play
        while(moves!=gameArray.length){
          spinAndMove();
          drawBoard();
        }
        if(moves==gameArray.length){
          displayReport();
        } 
      }
    }

    I'm pretty sure everything except the spinAndMove() method is correct, which is where I thought I was supposed to include the reward rules. But I keep getting stuck in an infinite loop with the method I have right now:
    public void spinAndMove(){//spins spinner and advances piece according to rules of game
          if (((position%5)==0)&&(position!=gameArray.length-1)){
            reward=reward*2;
            position+=spins;
          }
          else if (position==gameArray.length-1){
            reward=reward/5;
            position=0;
          }
          else if(this.moves > gameArray.length){
            position = position;
            reward=reward;
            round++;
          }
          else if(this.moves < gameArray.length){
            position += spins;
            round++;
          }
          else if(position==gameArray.length){
            //don't know what to put here.... how do I tell the program to end the game at this point?
      }

    Any advice would be completely appreciated!


  2. #2
    Junior Member
    Join Date
    Sep 2011
    Posts
    8
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Having trouble figuring out this method. Involves while-loops!

    Anyone? It's due in two days. I've been working on it for two weeks.

  3. #3
    Crazy Cat Lady KevinWorkman's Avatar
    Join Date
    Oct 2010
    Location
    Washington, DC
    Posts
    5,400
    My Mood
    Hungover
    Thanks
    144
    Thanked 628 Times in 538 Posts

    Default Re: Having trouble figuring out this method. Involves while-loops!

    Quote Originally Posted by ayelleeeecks View Post
    Anyone? It's due in two days. I've been working on it for two weeks.
    Please see the link in my signature on asking questions the smart way. More specifically, posting not-very-specific homework questions like this usually take a little bit to get a response (compared to the specific, technical questions most people post). Secondly, bumping your thread actually decreases your chances of getting help- it makes it look like you've received a response, so people are less likely to click through to your post. And finally, mentioning your deadline also decreases your chances of getting help, as it makes you look a little selfish- there are hundreds of posts here, each with its own urgent user waiting on a response, so mentioning your deadline makes it look like you think your time is more valuable than theirs, or ours.

    Anyway, where is the infinite loop? I see a while loop where you check against the moves variable, but where in that while loop do you update that?
    Useful links: How to Ask Questions the Smart Way | Use Code Tags | Java Tutorials
    Static Void Games - Play indie games, learn from game tutorials and source code, upload your own games!

  4. #4
    Crazy Cat Lady KevinWorkman's Avatar
    Join Date
    Oct 2010
    Location
    Washington, DC
    Posts
    5,400
    My Mood
    Hungover
    Thanks
    144
    Thanked 628 Times in 538 Posts

    Default Re: Having trouble figuring out this method. Involves while-loops!

    It seems you have a fellow classmate here: help with board game assignment
    Useful links: How to Ask Questions the Smart Way | Use Code Tags | Java Tutorials
    Static Void Games - Play indie games, learn from game tutorials and source code, upload your own games!

  5. #5
    Grand Poobah
    Join Date
    Mar 2011
    Posts
    1,545
    My Mood
    Grumpy
    Thanks
    0
    Thanked 167 Times in 158 Posts

    Default Re: Having trouble figuring out this method. Involves while-loops!

    While-loop help please!

    Duplicate post.
    Improving the world one idiot at a time!

  6. The Following User Says Thank You to Junky For This Useful Post:

    copeg (October 19th, 2011)

Similar Threads

  1. Ok, I have an assignment that involves lists, it's in C+, and also polynomials
    By javapenguin in forum Other Programming Languages
    Replies: 18
    Last Post: October 9th, 2011, 11:40 AM
  2. [SOLVED] Help figuring out why my method isn't executing as expected.
    By Herah in forum What's Wrong With My Code?
    Replies: 2
    Last Post: October 8th, 2011, 05:27 PM
  3. Need help figuring out the problem (GUI)
    By Prescott in forum What's Wrong With My Code?
    Replies: 10
    Last Post: August 8th, 2011, 12:01 AM
  4. Figuring Out Object Arrays
    By bengregg in forum Collections and Generics
    Replies: 2
    Last Post: April 5th, 2011, 05:55 AM
  5. Trouble with Binary Search on Insert Method
    By EricSt in forum Algorithms & Recursion
    Replies: 1
    Last Post: February 17th, 2010, 09:34 PM

Tags for this Thread