George Sykes ELEC2645 project

Dependencies:   mbed

https://os.mbed.com/media/uploads/el18gs/pixil-frame-0.png

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
Committer:
el18gs
Date:
Tue May 12 09:21:38 2020 +0000
Revision:
12:8666cd2c6201
Parent:
11:e89dbdb74df5
Child:
13:3b2a4e14937b
Added magnetometer library doccumentation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el18gs 10:b1aa93b9662d 1 /** @file Inventory.h
el18gs 8:4220d116f17c 2 * @brief Inventory library containing the tools used to generate and manage
el18gs 8:4220d116f17c 3 * @brief the games inventory
el18gs 8:4220d116f17c 4 */
el18gs 3:9d811414d35e 5 #ifndef INVEN_H
el18gs 3:9d811414d35e 6 #define INVEN_H
el18gs 3:9d811414d35e 7
el18gs 3:9d811414d35e 8 #include "SDFileSystem.h"
el18gs 3:9d811414d35e 9 #include "N5110.h"
el18gs 11:e89dbdb74df5 10 #include "Gamepad.h"
el18gs 3:9d811414d35e 11 #include "Ghost.h"
el18gs 3:9d811414d35e 12 #include <string>
el18gs 3:9d811414d35e 13 #include <vector>
el18gs 3:9d811414d35e 14 #include <iostream>
el18gs 3:9d811414d35e 15
el18gs 8:4220d116f17c 16 /** @pulic vector of Ghosts used to hold the inventory data
el18gs 8:4220d116f17c 17 */
el18gs 3:9d811414d35e 18 typedef std::vector<Ghost> ghostvec;
el18gs 8:4220d116f17c 19
el18gs 8:4220d116f17c 20 /** @pulic vector of strings used in data processing
el18gs 8:4220d116f17c 21 */
el18gs 3:9d811414d35e 22 typedef std::vector<std::string> stringvec;
el18gs 3:9d811414d35e 23
el18gs 11:e89dbdb74df5 24 /** FSM for inventory struct */
el18gs 11:e89dbdb74df5 25 struct inven_state {
el18gs 12:8666cd2c6201 26 int uid; /**< UID of the ghost */
el18gs 11:e89dbdb74df5 27 int next[2]; /**< next{up, down} */
el18gs 12:8666cd2c6201 28 std::string type; /**< Type of ghost (stored as string not enum)*/
el18gs 12:8666cd2c6201 29 std::string name; /**< Name of ghost */
el18gs 12:8666cd2c6201 30 int attack; /**< Attack value of ghost */
el18gs 12:8666cd2c6201 31 int defense; /**< Defense value of ghost*/
el18gs 12:8666cd2c6201 32 int level; /**< Level of the ghost */
el18gs 12:8666cd2c6201 33 int xp; /**< How much XP the ghost has */
el18gs 12:8666cd2c6201 34 int value; /**< The ghosts value */
el18gs 12:8666cd2c6201 35 int hp_max; /**< maximum HP of the ghost */
el18gs 12:8666cd2c6201 36 int hp; /**< current HP value of the ghost */
el18gs 11:e89dbdb74df5 37 };
el18gs 11:e89dbdb74df5 38
el18gs 8:4220d116f17c 39 /** Inventory Class
el18gs 8:4220d116f17c 40 * @brief Library for maintaining an inventory
el18gs 8:4220d116f17c 41 * @author George Sykes [el18gs]
el18gs 9:16996bd37fc6 42 * @date 11 May 2020
el18gs 12:8666cd2c6201 43 * @version 1.1
el18gs 8:4220d116f17c 44 */
el18gs 3:9d811414d35e 45 class Inventory
el18gs 3:9d811414d35e 46 {
el18gs 3:9d811414d35e 47 public:
el18gs 9:16996bd37fc6 48 // Constructor
el18gs 9:16996bd37fc6 49 /** Create a Inventory object by importing all the .ghost files in the
el18gs 9:16996bd37fc6 50 * @brief /ghosts directory
el18gs 9:16996bd37fc6 51 * @param sd Pointer to an SDFileSystem object
el18gs 9:16996bd37fc6 52 */
el18gs 8:4220d116f17c 53 Inventory(SDFileSystem &sd);
el18gs 9:16996bd37fc6 54
el18gs 9:16996bd37fc6 55 /** Regenerate the inventory after a change has been made
el18gs 9:16996bd37fc6 56 * @param sd Pointer to an SDFileSystem object
el18gs 9:16996bd37fc6 57 */
el18gs 8:4220d116f17c 58 void regen(SDFileSystem &sd);
el18gs 9:16996bd37fc6 59
el18gs 9:16996bd37fc6 60 /** List all the UID's of the ghosts in the inventory
el18gs 9:16996bd37fc6 61 * @param path The name of the .ghost file to import
el18gs 9:16996bd37fc6 62 * @return A vector of integers
el18gs 9:16996bd37fc6 63 */
el18gs 3:9d811414d35e 64 std::vector<int> list_ghost_uids(void);
el18gs 9:16996bd37fc6 65
el18gs 9:16996bd37fc6 66 /** returns a copy of a ghost in the inventory defined by its UID
el18gs 9:16996bd37fc6 67 * @param uid defines the UID of the ghost to import
el18gs 9:16996bd37fc6 68 * @return a Ghost object
el18gs 9:16996bd37fc6 69 */
el18gs 3:9d811414d35e 70 Ghost get_ghost_by_uid(int uid);
el18gs 9:16996bd37fc6 71
el18gs 9:16996bd37fc6 72 /** Sell one of the ghosts in the inventory
el18gs 9:16996bd37fc6 73 * @param uid defines the UID of the ghost to sell
el18gs 9:16996bd37fc6 74 * @param sd Pointer to an SDFileSystem object
el18gs 9:16996bd37fc6 75 */
el18gs 8:4220d116f17c 76 void sell_ghost_by_uid(int uid, SDFileSystem &sd);
el18gs 3:9d811414d35e 77
el18gs 11:e89dbdb74df5 78 /** Display GUI of the inventory, allowing the user to; view ghosts in the
el18gs 11:e89dbdb74df5 79 * inventory and sell them.
el18gs 11:e89dbdb74df5 80 * @param sd Pointer to an SDFileSystem object
el18gs 11:e89dbdb74df5 81 * @param lcd pointer to an N5110 object for displaying the GUI onto
el18gs 11:e89dbdb74df5 82 * @param pad pointer to an Gamepad object for controlling the GUI
el18gs 11:e89dbdb74df5 83 * @param X_flag pointer to the global variable that the program sets to 1 when the X button is pressed.
el18gs 11:e89dbdb74df5 84 * @param Start_flag pointer to the global variable that the program sets to 1 when the Start button is pressed.
el18gs 11:e89dbdb74df5 85 * @note the global flags must be modified by ISR as the function does not check the buttons itself.
el18gs 11:e89dbdb74df5 86 */
el18gs 11:e89dbdb74df5 87 void display_inventory( SDFileSystem &sd,
el18gs 11:e89dbdb74df5 88 N5110 &lcd,
el18gs 11:e89dbdb74df5 89 Gamepad &pad,
el18gs 11:e89dbdb74df5 90 volatile int &g_buttonX_flag,
el18gs 11:e89dbdb74df5 91 volatile int &g_buttonStart_flag);
el18gs 11:e89dbdb74df5 92
el18gs 3:9d811414d35e 93 private:
el18gs 3:9d811414d35e 94 // Functions
el18gs 8:4220d116f17c 95 stringvec list_ghosts(std::string, SDFileSystem &sd);
el18gs 3:9d811414d35e 96 bool hasEnding (std::string const &fullString, std::string const &ending);
el18gs 11:e89dbdb74df5 97 std::vector<inven_state> gen_ghost_fsm();
el18gs 3:9d811414d35e 98
el18gs 3:9d811414d35e 99 // Variables
el18gs 3:9d811414d35e 100 ghostvec _ghosts;
el18gs 3:9d811414d35e 101 int _gold;
el18gs 3:9d811414d35e 102 int _food_low;
el18gs 3:9d811414d35e 103 int _food_med;
el18gs 3:9d811414d35e 104 int _food_high;
el18gs 3:9d811414d35e 105
el18gs 3:9d811414d35e 106 static const string _root;
el18gs 3:9d811414d35e 107 };
el18gs 3:9d811414d35e 108
el18gs 3:9d811414d35e 109 #endif