Hi guys, so I have a project due next week, and I can't figure out what I'm doing wrong/how to make it run.
The assignment:
For this assignment, your job is to create a version of a carnival game in which mechanical dogs race along a track. The racing game is called DogTrack. DogTrack is also the name of the java source file you must submit to complete the assignment. The DogTrack class should be written so that the driver class below, DogDriver, works as intended.
A dog track has N discrete positions, 0 through N-1. The value of N is determined interactively in the application driver (below) once your program begins running.
There are three dogs, named Fido, Spot, and Rover. Each starts at position 0. A spinner selects (returns) a random value from among the values 1-2-3-4-5; these values are equally likely. Each dog advances by a separate spin of the spinner. In general a dog advances 1 space when the spinner spins a 1, 2 spaces when the spinner spins a 2, and so forth. The game is over when (at least) one of the dog crosses the finish line, that is, when at least one dog reaches a board value that is greater than or equal to (N-1).
A special condition: if a dog lands exactly at position number N/3 or position number 2N/3, where N is the size of the track, then that dog returns to its position before the move was made, and then moves back one more square, if possible. Because there are no negative positions, a dog at 0 that advances to N/3 on the first move does NOT go to (negative) position -1; after the move it should simply remain at position 0. See sample run below for an example.
At each round, the track should be drawn, using the symbol o, and the letters F, S, and R (for Fido, Spot, and Rover).
You should draw the state of the race as three "lines", one for each dog, using an 'o' to represent unoccupied positions, and F,R, and S to represent dog positions. These 3 line groups should be separated by a row of dashes, as shown in the sample run below. If the track size is 10, then this drawing
ooooooSooo
means that the dog Spot is at location 6 on the track, with earlier positions 0-5 unoccupied (dog tracks always begin with position 0).
Here is the driver class for the racing game:
import java.util.Scanner; public class DogDriver{ public static void main(String[] args){ System.out.println("Enter an int > 3: size of the track"); Scanner s = new Scanner(System.in); int trackSize = s.nextInt(); System.out.println("track Size: " + trackSize); DogTrack d = new DogTrack(trackSize); d.playGame(); } }
Here is a sample run:
> run DogDriver Enter an int > 3: size of the track 8 track Size: 8 // so positions are 0,1,...,7; position N/3 = 8/3 = 2 is a go-back square, as is position (2*8)/3 = 5. Fooooooo // all dogs start a position 0 Sooooooo Rooooooo -------- ooooFooo // at position 4 oooSoooo // at position 3 Rooooooo // Rover spins 2, but 8/3 = 2, so Rover goes back to 0, but NOT to position -1 -------- oooFoooo // Fido, at position 4, spins a 1, to location 5 = (2*8)/3, so: back to original position 4, then back 1, to pos 3 ooooSooo ooooRooo -------- ooooFooo oooooooS // S & R have reached position 7 = tracksize - 1, terminating the game oooooooR -------- Spot Wins! Rover Wins!
A requirement: your DogTrack class must include and MAKE ESSENTIAL USE OF the following methods, in addition to the DogTrack constructor and principal method playGame(). These are:
* spin - generates an integer value from 1 to 5 at random
* move - advances the pieces (alternative: instead of a move method write 3 separate methods, moveRover, moveSpot, moveFido)
* isOver - checks if race termination condition has been met
* showTrack - draws the three tracks using 'o' and a dog letter to indicate dog position. Should insert a row of dashes after the three tracks are displayed.
* showWinners - reports the winning dog or dogs when the race ends (see example above.)
Suggestions on how to proceed (only suggestions though):
* idea #1: get your code running but ignore the N/3 + 2N/3 stuff. You can add that in later. Also, don't worry at first about drawing the board correctly. Just print out the values of the dog positions.
* idea#2: Before you write any of the required methods explicitly, write the playGame method using the named methods above as if they already existed. Be sure to think about and account for any parameters each method might have.
Paste your DogTrack class code in the box below:
NOTE: you may NOT include any import statements in the class you submit. Use the Math class random method to generate your random numbers. Do NOT import the java.util library. Do NOT implement your solution using arrays.
Here is my code:
public class DogTrack{ int s = 0; int r = 0; int f = 0; public void playGame(){ while (isOver()==false){ d.spin(); d.moveRover(); d.spin(); d.moveSpot(); d.spin(); d.moveFido(); d.showTrack(); } if (isOver()==true){ d.showTrack(); d.showWinners(); } } public DogTrack(int size){ trackSize = size; } public void moveRover(){ r = r + n; } public void moveSpot(){ s = s + n; } public void moveFido(){ f = f + n; } public void spin (int n){ n = ((int)5*Math.random()+1); } public boolean isOver(){ if (r >= (TrackSize - 1) || s >= (trackSize - 1) || f >= (trackSize -1)) return true; else return false; } public String showTrack(){ String rover = ""; for (int x = 0; x < trackSize; x++){ if (r >= x) rover = rover + "R"; else rover = rover + "o"; } String spot = ""; for (int x = 0; x < trackSize; x++){ if (s >= x) spot = spot + "S"; else spot = spot + "o"; } String fido = ""; for (int x = 0; x < trackSize; x++){ if (f >= x) fido = fido + "F"; else fido = fido + "o"; } return rover; return spot; return fido; } public String showWinners(){ if (r>=(trackSize-1)) return "Rover Wins!"; if (s>=(trackSize-1)) return "Spot Wins!"; if (f>=(trackSize-1)) return "Fido Wins!"; } }
Thanks in advance!