FIT9131 Semester 2 2018 Assignment 2
Introduction
c
This assignment is due by 9 am Sunday of Week 12 (21st October, 2018). It is worth a total of 25% of the marks for your final assessment in this unit. Heavy penalties will apply for late submission. This is an individual assignment and must be your own work. You must attribute the source of any part of your code which you have not written yourself. Please note the section on plagiarism in this document.
This assignment is structured as a 20% + 5% assessment. The code submitted for this assignment will be assessed for 20% of the marks and a unit test during the tutorial time in Week 12 will be assessed independently for 5% of the marks allocated. Please note that the unit test is a hurdle requirement for the assignment. Failing to complete the unit test will result in no marks being allocated for the entire assignment.
The assignment must be done using the BlueJ environment.
The Java source code for this assignment must be implemented according to the Java Coding Standards for this unit.
Any points needing clarification may be discussed with your tutor in the lab classes.
Specification
For this assignment you will write a program which will allow a person to play a game called Battleship with a Twist. While many variations of this game are present, the one being implemented for this assignment is a specific variation to ensure all beginner programmers can achieve this outcome.
This section specifies the required functionality of the program. Only a text interface is required for this program; however, more marks will be gained for a game that is easy to follow with clear information/error messages to the player.
The aim of Battleship with a Twist is for a player to try and destroy all of the computer opponents ships before the computer destroys all of the players ships placed on the playing grid.
19 September 2018 1
FIT9131 Semester 2 2018 Assignment 2
The game will allow the player to place a number of ships onto the playing grid based on x and y coordinates entered by the user. The computer opponent will also do the same randomly. Each ship will only occupy a single coordinate, as such, two ships cannot be placed at the same set of coordinates. To keep things interesting, each ship when places is given a random number between 1 – 5 which indicates its overall strength. This means that the same ship has to be hit that many times in order for it to be destroyed. Once a ship has been destroyed it is taken out of play on the grid. Each hit on a ship get points for the player or the computer. The game ends when all the ships are destroyed.
Game play
The following section outlines the game play for each of the involved participants.
Round Number
19 September 2018
2
FIT9131
Semester 2 2018
Assignment 2
Player and Computer Score Player Grid
Player Ship
Computer Grid Computer Ships Hidden
19 September 2018
3
FIT9131 Semester 2 2018 Assignment 2
The Playing Grid
The playing grid will be of a fixed size for the duration of the game. On starting the game, the game will load the following preferences from a file called “gamesettings.txt”.
Grid Width and Height: 5 Multiple Hits Allowed: true Computer Ships Visible: false No of Ships : 3
The file will represent this default data as follows: 5,true,false,3
Your program must work based on the parameters specified in this file. (Note: default values not used)
Manoeuvring the Grid:
To move the various elements along the grid, the grid is to be represented as coordinates. Each position on the grid is given a coordinate in the format x,y.
No two ships can occupy the SAME coordinate at any given time.
This is only applicable to each player. For e.g. the player can place a ship at 2,3 and the computer can place its ship at 2,3. But both the player and computer cannot place another ship at the same coordinate.
The Grid
The grid will use the following notation:
~ – to indicate water and an unoccupied grid. The computer ships until hit will also display this symbol.
O – to indicate a player ship to the player if one is placed at those coordiantes
D – a ship which has been hit at least once to indicate a damaged ship.
X – a destroyed ship.
The computer’s ships MUST be made visible or be hidden from the player based on the flag set in the settings file above. When the computer ships are hidden, the D and X status of each ship MUST be shown on screen when hit or destroyed. However undamaged ships are shown as ~ symbol.
19 September 2018 4
FIT9131 Semester 2 2018 Assignment 2
Game Setup:
After loading the game settings from the file, the system will then ask the user to enter the following information for each ship:
- Ship Name – String between 3 and 15 characters long.
- x Coordinate – X coordinate position between 0 and the maximum grid size from the settings file.
- y Coordinate – y coordinate position between 0 and the maximum grid size from the settings file
- If any coordinate is incorrect (e.g. alphabetic or outside range of grid) an error message should be displayed.
Coordinate Validations
The number of ships set is determined from the game settings file.
After the player ships are set, the computer ships are automatically generated.
19 September 2018 5
FIT9131 Semester 2 2018 Assignment 2
Turn Based Game Play:
Note: For demo, default grid size is not used, and enemy ships are shown on the screen.
Turn 1: The player is asked to make a guess, the system will then check if the player hits a computer ships or misses completely. The system will then display the appropriate message to the user.
After the players guess, the computer is asked to make a guess, and the system checks to see if the computer makes a hit or misses the player ships.
19 September 2018 6
FIT9131 Semester 2 2018 Assignment 2
Turn 2:
The player is again asked to continue making a guess at the coordinates. Appropriate validations must be done as before for the entered coordinates.
Coordinate Validations
After the player guess, the computer is asked to make a guess and the system validates the guess to check for a hit or a miss.
19 September 2018 7
FIT9131 Semester 2 2018 Assignment 2
Turn 3:
The player makes a hit.
The system displays the appropriate message on the screen and at the start of the next turn, the grid layout is changed as follows:
Scores are updated Each hit is 10 points
Ship status changed to D
19 September 2018 8
FIT9131 Semester 2 2018
Turn x:
The player finally destroys an enemy ship.
Assignment 2
Score indicates that ship had a strength of 5.
Ship status changed to X
Message to state the ship has been destroyed
Two Ships Destroyed:
19 September 2018
9
FIT9131 Semester 2 2018 Assignment 2
All Ships Destoryed:
Winning Message
On completing the game, the system will write the outcome to a file called “gameoutcome.txt”. The outcome file will have the following output:
Player wins. Final Score Player (110) and Computer (0)
Game Rules
The following game rules MUST be adhered to when playing the game:
- No two ships can occupy the same X coordinate and Y coordinate for each player
- Guesses must be within the specified range
- Each hit gets a score of 10 points
- Each player gets one guess per turn
- The hull strength of each ship is determined randomly between 1 – 5. This indicates
the number of hits required for the ship to be destroyed.
19 September 2018 10
FIT9131 Semester 2 2018 Assignment 2 Program design
The objective of this assignment is for students to understand coding, as well as to get the basics of design. The following class diagram is proposed for this assignment.
Your program MUST consist of the following classes: 1. Game
2. ShipList
3. CoordinateGenerator 4. Ship
The following classes are desirable and will score marks if implemented. But if object interaction is still challenging, these classes can be integrated into the other 4 classes mentioned above.
- FileIO
- Input
- V alidation
You MUST follow good programming practices and use loops where required to ensure good program design.
Design changes to the above must be discussed with your tutor prior to proceeding.
19 September 2018 11
FIT9131 Semester 2 2018 Assignment 2 Game class
The Game class will specify the attributes and behaviours of the game. An object of the Game class will have the following fields only:
- playerShips – (ShipList) an object of the ShipList class.
- computerShips – (ShipList) an object of the ShipList class.
This class is responsible for initiating the game, reading the file, loading the settings, interacting with the other classes, and writing to the file when the game ends. Reading and Writing to the file must only occur ONCE.
ShipList class
The ShipList class will specify the attributes and behaviours of all the ships within the game. An object of the ShipList class will have the following fields only:
• ships – (ArrayList<Ship>) – stores objects of the class Ship within an ArrayList collection.
This class is responsible for creating an arraylist which stores each ship within the player grid for the
respective player or computer.
CoordinateGenerator Class
The CoordinateGenerator class will specify the attributes and behaviours of generating random coordinates which will be used by the Game class. An object of the CoordinateGenerator class will have the following fields only:
- minimumValue – (int) stores the lower limit of the number to be generated.
- maximumValue – (int) stores the upper limit of the number to be generated.
This class is responsible for generating a random number which can be used for deciding the X and Y coordinates for each ship and even for deciding the random hull strength of each ship within the game.
Ship Class
The Ship class will specify the attributes and behaviours of all ships within the game. An object of the Ship class will have the following fields only:
- shipName – (String) stores the name of the ship between 3 – 15 characters.
- xPos – (int) stores the x position of the ship on the grid.
- yPos – (int) stores the y position of the ship on the grid.
19 September 2018 12
FIT9131 Semester 2 2018 Assignment 2
- noOfHitsMade – (int) stores the number of times the ship has been hit.
- noOfHitsNeeded – (int) stores the number of times the ship needs to be hit to be destroyed. This
number if randomly generated by the game for each ship for both the player and the computer.
This class is responsible for recording a new ship added to the grid.
Additional Classes:
FileIO Class
The FileIO class will specify the attributes and behaviours for reading and writing to a file. An object of the FileIO class will have the following fields only:
• filename – (String) the name of the file to be read or written to.
This class is responsible for reading and writing to a file only. The data read should be passed to the
calling class to handle.
Input Class
The Input class will specify the attributes and behaviours for reading input from the user via the keyboard. An object of the Input class will have no fields. However, all methods included can be made class methods.
Validation Class
The Validation class will allow the system to validate all user inputs accepted via the keyboard from the user. An object of the Validation class will have no fields.
Hints and Suggestions
The following hints and suggestions may be useful in designing your program:
- To facilitate a clean layout of your game, consider looking at the tutorial notes in the homework exercises on how to clear the terminal screen in BlueJ (Week 4).
- When reading and writing to a file with multiple values, consider looking up the String class for the split method to understand how it can be used to separate multiple values.
- Your program MUST validate string and numeric inputs for this assignment. Consider using exception handling well in order to ensure your program does not crash.
- YOUR PROGRAM MUST NOT CRASH NOT MATTER WHAT THE USER DOES.
- File input will always be treated as correct and the input file will not be modified directly.
19 September 2018 13
FIT9131 Semester 2 2018 Assignment 2
Test Strategy
For this assignment, you are required to produce and submit a partial Test Strategy for the program.
Your Test Strategy will be only for one class – the Ship class.
There is no need to produce Test Strategy for any other classes you have used in your program.
You must provide a Test Plan, plus detailed sets of Test Data, Expected Results and Actual Results for the ship class.
Assessment
Coding Assessment (10%)
Assessment for this assignment will be done via an interview with your tutor. The marks will be allocated as follows:
- 35% – Object-oriented design quality. This will be assessed on appropriate implementation of classes, fields, constructors, methods and validation of the object’s state. This include marks for the coding standards.
- 10% – Test Strategy.
- 55% – Program functionality in accordance to the requirements.
You must submit your work by the submission deadline on the due date (a late penalty of 20% per day, inclusive of weekends, of the possible marks will apply – up to a maximum of 100%). There will be no extensions – so start working on it early.
Marks will be deducted for untidy/incomplete submissions, and non-conformances to the FIT9131 Java Coding Standards.
Requests for extensions must be directed to the lecturer with proof and supporting work completed.
Unit Test Assessment (5%)
This assessment will be a written assessment and will be held during the tutorial times in the week of submission (Week 12). Due to this being the last week of the semester, do keep in mind the unit test will be held PRIOR to the submission date. Keep in mind that students are expected to have finished ALL their code by the submission deadline, and more importantly have to have done their own work.
The unit test will be a closed book test wherein students will be required to WRITE code to answer a few questions. The questions will cover material from Weeks 1 – 10 of the lectures. Students should bear in mind that BlueJ or any other electronic device will not be permitted, so students need to know HOW to write their own code in order to finish the unit test hurdle.
Unit test for DE / Off-Campus students will be scheduled for Week 12 / SWOT Vac (voluntary), but due to the examination environment of the unit test, an equivalent moodle quiz or a skype assessment may be administered which may be slightly different than the on-campus format of the assessment.
19 September 2018 14
FIT9131 Semester 2 2018 Assignment 2 Interview
You will be asked to demonstrate your program at an “interview” following the submission date. At the interview, you will be asked to explain your code/design, modify your code, and discuss your design decisions and alternatives. Marks will not be awarded for any section of code/design/functionality that you cannot explain satisfactorily (the marker may also delete excessive in-code comments before you are asked to explain that code).
In other words, you will be assessed on your understanding of the code, and not on the actual code itself.
For on-campus students, interview times will be arranged in the tutorial labs in Week 11. It is your responsibility to attend the lab and arrange an interview time with your tutor. Any student who does not attend an interview will receive a mark of 0 for the assignment. The actual interviews will take place during in Week 14 / SWOT Vac (voluntary).
For off-campus learning (OCL) students, the interviews will be organised during week 11 and will take place online via Skype or other video facility during Week 14 / SWOT Vac (voluntary). It is your responsibility to make yourself available for an interview time. Any student who does not attend an interview will receive a mark of 0 for the assignment.
Submission Requirements
The assignment must be uploaded to Moodle by 9 am Sunday of Week 12 (21st October, 2018).
The submission requirements for Assignment 2 are as follows:
A .zip file uploaded to Moodle containing the following components:
- the BlueJ project you created to implement your assignment.
- a completed Assignment Cover Sheet. This will be available for download from the unit’s Moodle site before the submission deadline. You simply complete the editable sections of the document, save it, and include it in your .zip file for submission.
The .zip file should be named with your Student ID Number. For example, if your id is 12345678, then the file should be named 12345678_A1.zip. Do not name your zip file with any other name.
It is your responsibility to check that your ZIP file contains all the correct files, and is not corrupted, before you submit it. If you tutor cannot open your zip file, or if it does not contain the correct files, you will not be assessed.
Marks will be deducted for any of these requirements that are not complied with.
Plagiarism
Cheating and plagiarism are viewed as serious offences. In cases where cheating has been confirmed, students have been severely penalised, from losing all marks for an assignment, to facing disciplinary action at the Faculty level. Monash has several policies in relation to these offences and it is your responsibility to acquaint yourself with these.
Plagiarism (http://www.policy.monash.edu/policy-bank/academic/education/conduct/plagiarism- policy.html)
19 September 2018 15