Final Project Doc
Shooting Game
User Part
1. Start Program 2. Display Controls (`w`, `a`, `s`, `d`, `l`, `esc`, etc.) 3. Move `player unit` around the board and destroy your enemies and try not to get hit 4. When you loose all the health gauge display your `final score` and `rank` 5. Display the Greeting Screen and go to 1.
Programmer Part
1. Start Program
2. Use `w`,`a`,`s`,`d` to move the `player unit`
3. Press `l` to shoot the bullet
4. Use 'esc' to open the option menu
5. If the `player unit` is hit by enemy's attack
* Decrease the health gauge
* If there is no health left
- End the game
- Record the score to offline DB
* Reset the location and status of `player unit`
* Apply penalty in score
6. If the enemy is hit by `player unit's` Bullet
* Illuminate the hit enemy
* Make Bullet disappear
* Increase the score
7. If there are no enemy left
* Increase the Level
* Locate new enemies
8. Display the `Real-time` Ranking
* Update the ranking when every hit occurred
Pseudocode part
1. Start Program
* Set the basic settings
* Print the starting screen
-Show how to play the game
* Show the loading screen
* Read the offline DB and load the ranking to the structure array
do {
a) If keyboard is hit
* If the key pressed is one of `w`,`a`,`s`,`d`
- Move the player unit in the area of the boundary
* If the key pressed is `l`
- Shoot the bullet from the location of the `player unit`
* If the key pressed is 'esc'
- Display the option of the game
b) If the `player unit` is hit by enemy's attack
* Decrease the health gauge
* If there is no health left
- End the game
- Record the score to offline DB
* Reset the location and status of `player unit`
* Apply penalty in score
c) If the enemy is hit by `player unit's` Bullet
* Illuminate the hit enemy
* Make Bullet disappear
* Increase the score
* If there are no enemies left
- Increase the Level
- Locate new enemies
d) If it's specific enemy's tern to shoot
* Shoot the bullet
* Set the cool-time timer for specific enemy to shoot bullet again
e) Decrease the cool-time timer by 1
f) Display the `Real-time` Ranking
* Update the ranking when every hit occurred
} while (health gauge is not empty)
Flowchart part
Due Dates
■Fix error of player shooting basic bullets: May 31st■Fix errors of enemy shooting bullets: May 31st■Make enemy to move: June 10th■Display Health gauge: June 5th■ Create the option tab: June 8th ■Create the user manual & tutorials: June 14th■ Fix other errors: June 14th
Done
■ Fix error of player shooting basic bullets ■ Fix errors of enemy shooting bullets ■ Display Health gauge ■ Create the user manual & tutorials ■ Make enemy to move(Partly done) ■ Real-time Ranking ■ File I/O for the offline DB ■ Make enemy bullets to move in angles(Linear function) (partly done)
Nice to have
■Real-time Ranking■ Add player name input Part ■File I/O for the offline DB■Make enemy bullets to move in angles(Linear function)
Testing Chart
| Test Date | Test Name | Input | Expected Output | Actual Output | Remark |
|---|---|---|---|---|---|
| June 13 | Moving Player Up | Keyboard Hit (w) | Move Player up until the height limitation on the array and screen | Move Player up until the height limitation on the array and screen | PASS |
| June 13 | Moving Player Left | Keyboard Hit (a) | Move Player left on the array and screen | Move Player left until the end of the map on the array and screen | PASS |
| June 13 | Moving Player Down | Keyboard Hit (s) | Move Player down on the array and screen | Move Player down until the end of the map on the array and screen | PASS |
| June 13 | Moving Player Right | Keyboard Hit (d) | Move Player right on the array and screen | Move Player right until the end of the map on the array and screen | PASS |
| June 14 | Player Shooting type1 Bullet | Keyboard Hit (L) | Player Shoots bullet and moves on the array and screen | Player Shoots bullet and moves on the array and screen | PASS |
| June 15 | Enemy Type5 Shooting Bullet | Not Required | Type5 Enemy(%) Shoots bullet down on the array and screen | Type5 Enemy(%) Shoots bullet down on the array and screen | PASS |
| June 15 | Enemy Type5 Moving | Not Required | Type5 Enemy(%) moves down randomly on the array and screen | Type5 Enemy(%) moves down randomly on the array and screen | FAIL |
| June 16 | Losing Score when Hit | Not Required | Player loses 25% of the total score when it gets hit by Type5 Bullet(@) has shot | Player loses 25% of the total score when it gets hit by Type5 Bullet(@) has shot | PASS |
| June 16 | Gets Score when Enemy Type5(%) is Hit | Not Required | Player gets 15 point when Enemy Type5(%) gets hit by Player's Bullet(|) | Player gets 15 point when Enemy Type5(%) gets hit by Player's Bullet(|) | PASS |
| June 16 | Gets Score when Enemy Type7(&) is Hit | Not Required | Player gets 25 point when Enemy Type7(&) gets hit by Player's Bullet(|) | Player gets 25 point when Enemy Type7(&) gets hit by Player's Bullet(|) | PASS |
| June 24 | Enemy type7 determine the path of the Bullet | Not Required | Enemy Type7(&) Calculates the linear function of the bullet to hit the player | Enemy Type7(&) Calculates the linear function of the bullet to hit the player | PASS |
| June 24 | File IO for DB | Not Required | Open the correct DB file and loads the ranking data | Open the correct DB file and loads the ranking data | PASS |