Starting from:

$25

2110215PROG- Midterm 1 Solved

2. Problem Statement: CPQuest 
 

You are tasked to finish the backbone code for a “Quest” system for a game. The demo for the system (result from running Main in package main) is shown in section 6. But it is not necessary to know the demo to write the backbone code of the program. 

3. Implementation Detail 
  The class package is summarized below. 

Figure 1. Class Diagram
You must write java classes using UML diagram specified above. 

* In the following class description, only details of IMPORTANT fields and methods are given. * 

4.1 Package logic 

4.1.1 Enum Status: This enum contains the value that can be used to describe the status for the quest.   

/*ALREADY PROVIDED*/ Values 

Name 
Description 
AVAILABLE 
This quest is available for everyone to take. 
ACTIVE 
This quest has been taken by someone and is in progress. 
FINISHED 
This quest has been finished. 
4.1.2 Class Quest: This class represents the quest object, which will be used by Player and Region later. It contains the information about single quest. 

/*ALREADY PROVIDED*/ 

Field
Name 
Description 
- Player author 
The author of the quest. 
- Region region 
The region the quest takes place in (can be different than the author’s home region) 
- String name 
The name of the quest. 
- String description 
The description of the quest. 
- Status status 
The current status of the quest. 
- int rank 
The rank of the quest. 
       Constructor   
Name 
Description 
+ Quest(Player author, Region region, String name, String description) 
Create a new Quest with the specified informations. Set the status to Status.AVAILABLE, and the rank to the author’s current rank. 

Method
Name 
Description 
+ getter/setter for each field 

4.1.3 Class Player: This class represents a player. It contains player information and status. 

/*ALREADY PROVIDED*/ 

         Field
Name 
Description 
- String name 
The name of the player. 
- int score 
The score of the player 
- Quest currentQuest 
The player’s current ongoing quest. This can be null if the player does not have ongoing quest. 
       Constructor   
Name 
Description 
+ Player(String name) 
Create a new Player with the specified name. Set the score to 0 and currentQuest to null. 
Method
Name 
Description 
+ void setName(String name) 
Set the name of the Player. 
+ void setScore(int score) 
Set the score. 
+ void addScore(int amount) 
Adds the specified amount to the score. 
+ int getRank() 
Returns the rank of the player depending on their score. 

The rank is 

- 4 (score > 10000) 

- 3 (7500 < score <= 10000) 

- 2 (5000 < score <= 7500) 

- 1 (2500 < score <= 5000) 

- 0 (score <= 2500) 
+ remaining getter/setter for each field 

4.1.4 Class Region: This class represent a single region. It contains all data related to the region, including the quest list within the region. You must create this class from scratch. 

         Field
Name 
Description 
- String name 
The name of the Region. 
- ArrayList<Player> playerList 
An ArrayList containing all Player in this Region. 
- ArrayList<Quest> questList 
An ArrayList containing all Quest in this Region. 
       Constructor   
Name 
Description 
+ Region(String name) 
Create a Region with the specified name. 

Initialized the ArrayList for both playerList and questList  

Method
Name 
Description 
+ void setName(String name) 
Set the name of the Region. 

If the name is blank (Can be checked using name.isBlank()), set it to “Nowhere” 
+ int getPlayerCount() 
Return the size of the playerList 
+ double getRegionRank() 
Return the average rank of all players in the region. (Continued next page) 
 
The average rank can be obtained by summation of the rank of every player in the region, then divide by the total numbers of the player in the region. Please round the number to 2 decimal points 
+ ArrayList<Quest> getAvailableQuests(Player viewer) 
Return an ArrayList of all Quest in the region that have the status AVAILABLE. 

Do note that the viewer must not be able to view the quest that belongs to himself/herself. 
+ void 

addPlayerToRegion(Player p) 
Add Player to the playerList 
+ void 

addQuestToRegion(Quest q) 
Add Quest to the questList 
+ remaining getter/setter for each field 

4.1.5 Class DatabaseUtil: This class represents the utility function that has been partially implemented. It contains useful functions you can use to help implementing the Database. 

/*ALREADY PROVIDED*/ 

Method
Name 
Description 
+ boolean isPlayerExists(ArrayList<Player> playerList, String name) 
Return true if the Player with the given name already exists in the playerList. 
+ boolean isRegionExists(ArrayList<Region> regionList, String name) 
Return true if the Region with the given name already exists in the regionList. 
 

4.1.6 Class Database: This class represents the database. It contains all the frontend-backend communications, as well as the players and region list. 

*For simplicity reasons for the Exam, we have used standard Exception here. In real-life scenario, please create a more specific exception for each scenario. * 

You must create this class from scratch. 

         Field
Name 
Description 
- ArrayList<Player> playerList 
An   ArrayList of Player. 
- ArrayList<Region> regionList 
An ArrayList of   Region. 
Constructor
Name 
Description 
+ Database() 
Create a new Database object. 

Initialize playerList and regionList with empty ArrayList 
+ Database(ArrayList<Player> playerList,ArrayList<Region> regionList) 
Create a new Database object. 

Initialize playerList and regionList with the specified ArrayList 
        Method
Name 
Description 
+ Player addPlayer(String name, 

Region region) throws Exception 
•      If the player with the given name does not exist, create a new Player object with the specified detail, then add it to the playerList. Don’t forget to add the player into the region’s own player list using addPlayerToRegion from Region class. 

•      Otherwise, throw an Exception. 

This method returns the newly created Player object. 
+ boolean addRegion(String name) 
If the region with the given name does not exist before, create a new Region object with specified detail, then add it to the list and return true. 

Otherwise, return false. 
+ Region getRegionByName(String name) 
Return the Region object from the regionList with the specified name. If no region with the specified name exists, then return null. 
+ void addQuest(Player author, Region region, String name, String description) 
Create the Quest object with the specified detail, then add it into the specified region properly. 

Hint: Use addQuestToRegion from Region class. 
+ getter/setter for each field 
 
4.2 Package main 

4.2.1 Class Main: This class is the main application. It contains methods required to run the app, as well as the main method. You can run this class to test the application. /*ALREADY PROVIDED */ 4. Score Criteria    

The maximum score for the problem is 20 and will be rounded down to 5. 

5.1 Class Region (RegionTest): 
 
= 12 points 
          testConstructor      
 
= 1 points 
testConstructorEmpty  
 
= 1 point 
           testSetName          
 
= 1 points 
         testSetNameEmpty          
 
= 1 points 
testAddPlayerToRegion 
 
= 1 points 
testAddQuestToRegion 
 
= 1 points 
         testGetPlayerCount          
 
= 1 points 
        testGetRegionRank                     
= 2 points 
 
       testGetAvailableQuests    
= 3 points 
 
5.2 Class Database (DatabaseTest):  
= 8 points 
 
           testAddPlayer                   
= 1 points 
 
        testAddPlayerRepeat        
= 1 points 
 
          testAddRegion                  
= 1 points 
 
        testAddRegionRepeat       
= 1 points 
 
           testAddQuest                   
= 2 points 
 
          testGetPlayerList              
= 1 points 
 
         testGetRegionList             
= 1 points 
 
5. Program Demonstration  
   Figure 2: The Initial Screen 

First off, as a guest. You can either log in or viewing the statistic. Once you logged in, you will have more options to work with. We will cover the statistics option later. 

Once you picked the log in option, you will be presented with the current user list in the system, or you can choose to make the new one. Do note that the new username cannot be the same as the one in the database. If it happened, the system would alert the user.

Figure 3: Registering new player
Once you logged in, the start menu changed, and you can access more option. 

Figure 4: New Start Menu once logged in
For the first option, you can edit your own username, do note that the same restriction as when registering new player applies.

           Figure 5. Submenu for editing username
The next option is “Take On a Quest”. You can take on a quest using this option. The system will prompt you to pick the region and will display the current available quest in that region. 

Figure 6. Take On a Quest  
Do note that this option will be changed to Manage Quest Status instead when you have taken a quest. With Manage Quest Status menu, you can mark the quest as finished or decline the quest. By marking the quest as finished, you will obtain the score reward from the quest equal to the quest’s rank.  

Figure 7. Manage Quest Status
The third option is for posting your own quest. Everything here should be selfexplanatory. 

Figure 8. Posting Quest Option
Finally, the last option is for viewing the status of the region. It displays the player count and average rank of the players in the region. 


Figure 9. Viewing Region Status

More products