
George Sykes ELEC2645 project
Dependencies: mbed
GHOST HUNTER
In a world of ghostly horrors there is much money to be made in underground ghost fighting rings. You've managed to get hold of a Ghostbuster, a special piece of equipment that allows you to catch, train and fight ghosts.
Instructions
Below you will find the instructions for the game. Please note that due to COVID-19 a large part of the game (fighting ghosts) could not be added as it would have required access to a second gamepad which i could not acquire.
Welcome screen
When first started you will be presented with a welcome screen
- Pot 1 to adjust the contrast on the screen
- Press A to continue.
Main menu
You have three options, catch ghosts (add ghosts to your inventory), inventory (sell ghosts) or settings(adjust the games settings).
- Press X and B to move the selection up and down respectively
- Press A to enter the selected submenu
Catch Ghost
Will now be presented with two challenges. In the first you need to find a ghost, in the second you catch it. Theses stages will start automatically.
Find ghost
Rotate the gamepad on its roll and pitch axis until all the LED's turn on. The ones on the left indicate roll and the right pitch.
- Rotate the gamepad on it roll and pitch to light up the LED's
Catch ghost
Return the gamepad to a comfortable position and use the joystick to move the crosshairs onto the ghost sprite. When ready press the A button to catch the ghost. You will be told what kind of ghost you have captured and it will be added to your inventory.
- Press A to catch the ghost
- Move the joystick to move the crosshairs
Inventory
The inventory allows you to view your ghosts and sell them.
- Use Pot 1 to scroll through the ghosts
- Pot 2 to scroll up and down the details of the individual ghosts
- Press X to prepare to sell a ghost and press again to confirm, if you don't press again the sale screen will disappear after 5 seconds
- Press Start to return to the main menu
Settings
This menu allows you to adjust some of the settings of the game.
- Press X to go up one option
- Press B to go down one option
- Press A to enter the selected submenu
- Press Start to return to the main menu
Contrast
Set the contrast of the LCD screen, the contrast will adjust on this screen so you can see the effect (contrast is bounded between 0.4 and 0.6).
- Pot 1 to increase or decrease the contrast
- Press A to set the contrast
Button Delay
Set the minimum time between button presses; if this is too low the game will detect two button presses when there was only one, too high and the buttons will seem unresponsive. So as to ensure these issues do not occur while changing the setting button X temporarily operates on the new delay but none of the others will until A is pressed.
- Pot 1 to increase or decrease the delay
- Press X to test the new delay, this will toggle the small circle to be filled in or unfilled
- Press A to save the setting
Inventory/Inventory.h
- Committer:
- el18gs
- Date:
- 2020-05-26
- Revision:
- 17:3ebcf7bba112
- Parent:
- 16:3b298bea3a70
File content as of revision 17:3ebcf7bba112:
/** @file Inventory.h * @brief Inventory library containing the tools used to generate and manage * @brief the games inventory */ #ifndef INVEN_H #define INVEN_H #include "SDFileSystem.h" #include "N5110.h" #include "Gamepad.h" #include "Ghost.h" #include "tooling.h" #include <string> #include <vector> #include <iostream> /** @pulic vector of Ghosts used to hold the inventory data */ typedef std::vector<Ghost> ghostvec; /** FSM for inventory struct */ struct inven_state { int uid; /**< UID of the ghost */ int next[2]; /**< next{up, down} */ std::string type; /**< Type of ghost (stored as string not enum)*/ std::string name; /**< Name of ghost */ int attack; /**< Attack value of ghost */ int defense; /**< Defense value of ghost*/ int level; /**< Level of the ghost */ int xp; /**< How much XP the ghost has */ int value; /**< The ghosts value */ int hp_max; /**< maximum HP of the ghost */ int hp; /**< current HP value of the ghost */ }; /** Inventory Class * @brief Library for maintaining an inventory * @author George Sykes [el18gs] * @date 11 May 2020 * @version 1.1 */ class Inventory { public: // Constructor /** Create a Inventory object by importing all the .ghost files in the * @brief /ghosts directory * @param sd Pointer to an SDFileSystem object */ Inventory(SDFileSystem &sd); /** Regenerate the inventory after a change has been made * @param sd Pointer to an SDFileSystem object */ void regen(SDFileSystem &sd); /** List all the UID's of the ghosts in the inventory * @param path The name of the .ghost file to import * @return A vector of integers */ std::vector<int> list_ghost_uids(void); /** returns a copy of a ghost in the inventory defined by its UID * @param uid defines the UID of the ghost to import * @return a Ghost object */ Ghost get_ghost_by_uid(int uid); /** Sell one of the ghosts in the inventory * @param uid defines the UID of the ghost to sell * @param sd Pointer to an SDFileSystem object */ void sell_ghost_by_uid(int uid, SDFileSystem &sd); /** Feed one of the ghosts in the inventory * @param uid defines the UID of the ghost to sell * @param sd Pointer to an SDFileSystem object */ void feed_ghost_by_uid(int uid, SDFileSystem &sd); /** Display GUI of the inventory, allowing the user to; view ghosts in the * inventory and sell them. * @param sd Pointer to an SDFileSystem object * @param lcd pointer to an N5110 object for displaying the GUI onto * @param pad pointer to an Gamepad object for controlling the GUI * @param X_flag pointer to the global variable that the program sets to 1 when the X button is pressed. * @param Start_flag pointer to the global variable that the program sets to 1 when the Start button is pressed. * @param A_flag pointer to the global variable that the program sets to 1 when the A button is pressed. * @note the global flags must be modified by ISR as the function does not check the buttons itself. */ void display_inventory( SDFileSystem &sd, N5110 &lcd, Gamepad &pad, volatile int &g_buttonX_flag, volatile int &g_buttonStart_flag, volatile int &g_buttonA_flag); private: // Functions stringvec list_ghosts(std::string, SDFileSystem &sd); void print_coin(SDFileSystem &sd, N5110 &lcd); std::vector<inven_state> gen_ghost_fsm(); // Variables ghostvec _ghosts; int _gold; int _food_low; int _food_med; int _food_high; static const string _root; }; #endif