Description
Prerequisite Learning
Assignment One has several elements that might be new to you. You will need to spend time learning how to use those elements before you can be successful in writing the code for the assignment.
In particular, you will need to:
Set up your java environment. We don’t care what you develop in, but your submission must adhere to the specifications given here. You need to know your environment well enough to make it do what you want.
Learn to use git and gitlab. You have an account at git.socs.uoguelph.ca
Make a branch called “A1” in your project repository and switch to that branch
Learn to use Gradle. Gradle is a build system, similar to make.
Learn about json. We will be using the json.simple library for parsing json files this semester.
Spend some time playing Rogue 3.6 or Nethack so that you understand the game mechanics. All three assignments will be based on independently creating a similar game.
Nethack is installed for you on linux.socs.uoguelph.ca. Log in to linux.socs.uoguelph.ca and type adventure at the command line.
This will not work on portkey. You need to be logged in to linux.socs.uoguelph.ca
You need to be connected to the CISCO vpn prior to connecting to linux.socs.uoguelph.ca via ssh. (https://www.uoguelph.ca/ccs/anyconnect-vpn-user-guide)
You can install Rogue on your own computer (https://britzl.github.io/roguearchive/#rogue3.6.x)
Learning Objectives
Independently learn about a domain to create a program that is true to the domain requirements.
create a java program that demonstrates proper message passing, object creation and adherence to interface specifications.
use methods from a library (json)
use file system paths to locate and open and read a file.
explore the use of version control software through use of git as the assignment submission mechanism
broaden experience with build tools by using gradle
Your Task
Create a prototype roguelike game modeled after Rogue/Nethack[1] Your version of this game will be refined over all three assignment submissions. You are not intended to have a polished game for Assignment One.
The A1 version of the game will load an adventure description from file, identify and print each room to screen.
The following user stories must be realized for Assignment One:
As a player I want to:
· specify the location of the adventure file and the symbols map in a configuration file
· see an ascii text representation of the rooms in the adventure file that uses the symbols from my map
rooms will be printed to the terminal screen one after the other in the order found in the adventure file
at least two blank lines will be printed between rooms
· see the location of items in the rooms
· see the starting location of the adventurer
An example using the json file in the skeleton_3.zip folder is shown below:
An example of how the room printing should look
Resources
we will use the org.json.simple parser for parsing json files. It is already set up for use if you use the provided build.gradle file.
There are required classes, each with a specific set of public methods that must be provided.
You must not change the names of the classes or the methods. Java is case-sensitive so you must not even change a letter from one case to another.
You may not change the method signatures in any way.
You may add other methods (private or public) to any class
The attached zip file contains skeleton classes that you should use to start your assignment
An example json adventure file is provided with the skeleton classes. This will not be the file that is used for grading your work.
Example symbols-map and configuration files are also provided with the skeleton classes.
If you use the build.gradle file provided with the skeleton you will be able to run your program by typing java -jar build/libs/A1.jar
Git
You must use git.socs.uoguelph.ca as your repository for this assignment. Navigate to the git repository with a browser and follow the instructions there for initializing your repository.
Put the files for this assignment in an A1 branch of your 2430/project repository. You will have to make the branch and the branch must be called A1.
You will lose marks if your git repo contains project files or folders from any IDE or hidden files from your operating system (i.e. .DS_Store files on os/x). You will also lose marks if you commit compiled files (the .class files) to your git repository. Use a .gitignore file to ensure that only the source code and required files are committed to your repository.
Submission Requirements
Your assignment will be downloaded from your project git repo on the due date. We will clone your repo and then check out your assignment submission with this command: git checkout `git rev-list -n 1 –before=”2020-10-05 09:01″ A1`. Ensure that the version you want us to grade is the last thing committed before 9 am on the assignment due date.
Your code must adhere to google style guide coding conventions. Marks will be deducted if you do not follow the style guide. Your repository must be organized using maven standard layout. The skeleton code is organized in the correct fashion.
You must also have a README.md file in your root directory that provides your name, email address, student ID number and a statement attesting that you did the work for this assignment on your own and without copying work from any other sources, and instructions for operating your program. You may include other information in your readme if you wish.
Your Assignment will be graded out of 100 points using deduction-based grading
With deduction-based grading we assume your assignment has 100 points and we simply deduct points for things that are incorrect or missing.
Deductions
100 point deductions
-project not done in java
-project does not compile without errors
-project does not run
5 point deductions
-git repository not organized in maven standard layout
-unecessary folders or files included in git repository
-public or protected member variables (1 deduction per public variable)
-use of static variables (1 deduction per static variable: note you may use static constants)
-use of static methods other than the main method in A1Solution.java (1 deduction per static method used)
-incomplete or missing required methods(1 deduction per incomplete method)
-inability to use configuration file
-failure to use specified character map
-failure to parse provided adventure file (1 deduction per file failed, we will test multiple files)
-missing or unusable gradle.build file
-missing or incomplete README
-incorrectly named methods or classes (1 deduction per error)
2 point deductions
– inconsistent indentation (1 deduction per file with inconsistent indentation)
– fewer than 5 days of incremental effort as measured by git commit logs (1 deduction per 5-n days)
– incorrect room layout (1 deduction per incorrect room)
1 point deductions
– poor naming of variables and methods (1 deduction per misnamed variable or method)
– failure to pass automated test cases (1 deduction per test case failed)
Updates
The example rooms json file in the zip file has one of the items placed in the wall. The updated one below (rooms-updated.json) has that error fixed. You do not have to error check for misplaced items for this assignment.
The skeleton files had some errors that have been fixed.
Player should have public void setXyLocation(Point newXyLocation){} and
getDoor() from Room.java should return int, not Door, where the return value is the location on the wall that the door is found.
skeleton_3.zip
gradle.build file corrected so that jar file runs
dummy return values added to everything so that it will compile
multi-parameter constructor removed from Room.java. No longer a required method
void return type added to setPlayer method in Rogue.java. was missing.
Instantiation of parser object added to A1Solution.java before attempting to open files. JSONParser parser = new JSONParser();
[1] https://en.wikipedia.org/wiki/NetHack