This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
Rationale This assignment has been designed to give students the opportunity to demonstrate their skill in:
�using a user defined class �passing arguments to methods of a user defined class �writing methods which enable objects of a user defined class to show appropriate behaviours �designing an application requiring user interaction. �using good programming style. To better understand this, you should study the worked examples provided in the notes and text book. �at HD level, extending the program using methods of their own devising. �your program must not crash for any legal user action. That is, it must be robust!
It is important to understand that as part of the assessment process, the marker will compile and run your submitted programs and view output on screen however, it is not enough to merely recreate the results on screen. To get full marks your program must be free of poor programming style and you must use the file given below. Question 1 � Mobile Phone Plan Problem Statement (30 marks)
In a particular mobile plan, local calls between 700hrs and 1900hrs are charged at $0.60 per minute. Long distance calls (to places over 100 km away) during these hours are charged at $1.10 per minute. At other times calls are charged at half the normal rate.
A program is required which calculates the total cost of an arbitrary number of calls. For each call, the user enters a time value (in 24hr mode), a distance (in kilometres), and a call length (in minutes). The program then displays the cost of that call and also adds the cost onto a cumulative total.
When the user has no more calls to process, they enter a time value of -999 instead of a legal time. When the program reads this sentinel value it displays the total cost of all the processed calls and ends
Design Your solution program should be implemented in a single Java source code file which contains a main method and one other separate static method.
The separate method should encapsulate the actual calculation of each call cost. It should accept three arguments: a time value (int), a distance (int) and a call length (double). It should calculate the cost of the �phone call� using these arguments and return it.
The main method should contain the overall logic of the solution. It should prompt the user for each piece of data, read the data from the keyboard and then invoke the method described above to do the calculations. When the cost is returned, its value should be captured into a variable, displayed on the screen and accumulated into the grand total.
It is recommended that you use a �sentinel-controlled, while loop� in Main to manage the processing of phone calls. Make sure that when the -999 is read, it is not processed as a time value.
The snippet below shows what a typical program might look like to a user�
Enter a time in 24hr mode (use -999 to quite): 800 Enter a distance in kilometres: 70 Enter the length of the call in minutes: 1.5 That call will cost 0.9 dollars
Enter a time in 24hr mode(use -999 to quite): 2100 Enter a distance in kilometres: 275 Enter the length of the call in minutes: 6 That call will cost 3.3 dollars
Enter a time in 24hr mode (use -999 to quite): -999 The total cost of these calls is 4.2 dollars
Question 2 � Tank Battle Problem statement
You are to construct a game where tanks battle to the death. The tanks have an X coordinate, a Y coordinate, a value for armour and a value for firepower. The tanks will move randomly around the grid. There are special squares where they may upgrade their armour or their firepower. When they land on the same grid coordinate they will fire on each other, so each tank will have its armour value decreased by the others fire power. When one tank has negative armour, the other tank is the victor and the game ends.
This game requires three class classes as well as a Client which provides the user interface. The first class is Direction, a method of which will return: up, down, left or right. The second is the Die class given on the concordance web page at:
The third, which you will write is called Tank, which defines Tank a class of objects that will move around a grid which goes from (10, 10) to (-10, -10).
A tank starts at (0, 0) then gets instructions to go a number of units (from the Die class) in a certain direction (from the Direction class). Part A � Complete this programming to achieve a Pass grade Value (5 + 10 +10) marks
(i)Create the Direction class. It�s easiest to start with the Die.java and modify its method so that is only picks numbers from 1 to 4. Also change the roll() method so that once you have a value for laseFace, to include code so that if the number selected is 1, set your direction variable as �up� � then 2 = �down�, 3 = �left� and 4 = �right�. Make sure you have a Direction() constructor and save as Direction.java.
Create a client program (containing main) in which both a die and a direction object are instantiated. Then use a while loop to print out 50 lines of random number and direction. Eg. 6 up 3 left ect..
(ii)Create a class called �Tank�. A tank has attributes x pos, y pos, armour and firepower. You will need to write setter and getter methods for all these attributes. The initial values are (0, 0, 10, 1).
(iii)Modify your client class so that a Tank (that starts at x=0, y=0), moves about by responding to the Die and Direction rolls. Then print out inside your loop to show:
NumberDirectionxValueyValueArmourfirepower 5Up35101 Part B � Complete this programming to achieve a Credit grade Value (2.5 +2.5 +5 +5) marks
(i)Your tank must move in a grid which goes between -10 and 10 in both x and y coordinates. Declare a static constant called gridSize with a value of 10. Use gridSize throughout your program, as we might change the size. Keep your tank inside this grid. If the tank is at x=8 and y=0 then the next roll sends it 6 right, your tank should move 2 to the right then bounce back 4 in the opposite direction. Thus finishing at x = 6.
Hints: If the x-value is more than 10 � then x-value = 2 X gridSize � x-value. If the x-value is less than � 10, then x-value = -2 gridSize � x-value.
Print out BOUNCE on the right side of the screen when you apply these equations.
Again print out the 50 lines of values.
(ii)Have 2 special squares. One square at (3, 3) adds 10 to the armour value. The square at (-3, -3) adds 1 to the firepower. If a tank hits the armour square print out �Yipee � more armour.� If a tank hits the fire power square print out �yippee � more fire power.�
Continue to print out the 50 lines of values
(iii)If you have not already done so, now is the time to make sure you use methods. This is to allow the introduction of a second tank. I suggest the following for a method which responds to the Die and Direction rolls, and makes sure that tank stays in the grid. Note that we send off the die and direction roll plus the tank. We receive back the integer �bounce� which gives us information about whether a tank bounced against the grid
Write a second method that is to allow for the special armour and fire power squares.
Specials tell us information for printing out yippee messages. Hint: you should only be printing out from within the main.
(iv)Introduce a second tank moving around the grid. Also print out its values. When the tanks are on the same square, they fire on each other. So each tank will have its armour value decreased by the others firepower. This is the only affect. Print out �BATTLE� on a separate line. Print out values until one tank is destroyed.
Once the battle finishes a statement should be printed which says something like: �After 6,756 moves and 27 battles, Tank One was the victor. Hail Tank One! Coordinates (-5, 1) will be sacred forever!�
Part C � Going for Distinction Value 30 Marks
Use your own creativity to enhance the game.
This is your chance to show the marker what you can really do. The enhancement needs to be significant before a Distinction grade will be considered. You would need to do something pretty extraordinary to be considered for a HD.
Write a page which explains: oyour enhancements; ohow you accomplished the above; oany difficulties you encountered.
Notes about marking No marks are given for almost meeting the requirements of a particular level. In order to obtain the marks for a given level, you must demonstrate that your program produces the correct results on screen with no errors in the code. Your mark may then vary in a range determined by the presentation of your assignment, quality of the code you have written etc.
What if your program won�t run? Submit it anyway. It is important to stay in the game. You may improve over the course of the semester and finally pass provided you don�t give up too soon.