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 16:34:47 2020 +0000
Revision:
13:3b2a4e14937b
Child:
14:e2b3e645809f
Created game engine class and moved the bulk of processing into it

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el18gs 13:3b2a4e14937b 1 /** Inventory Class
el18gs 13:3b2a4e14937b 2 * @brief Library for maintaining an inventory
el18gs 13:3b2a4e14937b 3 * @author George Sykes [el18gs]
el18gs 13:3b2a4e14937b 4 * @date 11 May 2020
el18gs 13:3b2a4e14937b 5 * @version 1.1
el18gs 13:3b2a4e14937b 6 */
el18gs 13:3b2a4e14937b 7
el18gs 13:3b2a4e14937b 8 #ifndef GAMEENGINE_H
el18gs 13:3b2a4e14937b 9 #define GAMEENGINE_H
el18gs 13:3b2a4e14937b 10
el18gs 13:3b2a4e14937b 11 #include "mbed.h"
el18gs 13:3b2a4e14937b 12 #include "Gamepad.h"
el18gs 13:3b2a4e14937b 13 #include "N5110.h"
el18gs 13:3b2a4e14937b 14 #include "SDFileSystem.h"
el18gs 13:3b2a4e14937b 15 #include "FX0S8700CQ.h"
el18gs 13:3b2a4e14937b 16 #include "Ghost.h"
el18gs 13:3b2a4e14937b 17 #include "Inventory.h"
el18gs 13:3b2a4e14937b 18 #include "tooling.h"
el18gs 13:3b2a4e14937b 19 #include <vector>
el18gs 13:3b2a4e14937b 20 #include <string>
el18gs 13:3b2a4e14937b 21
el18gs 13:3b2a4e14937b 22 // struct for Main Menu FSM
el18gs 13:3b2a4e14937b 23 struct State {
el18gs 13:3b2a4e14937b 24 int output; // output value
el18gs 13:3b2a4e14937b 25 int nextState[2]; // array of next states
el18gs 13:3b2a4e14937b 26 };
el18gs 13:3b2a4e14937b 27
el18gs 13:3b2a4e14937b 28 // Constant FSM's
el18gs 13:3b2a4e14937b 29 // main Menu FSM
el18gs 13:3b2a4e14937b 30 const State mainMenuFsm[4] = {
el18gs 13:3b2a4e14937b 31 // line next{up, down}
el18gs 13:3b2a4e14937b 32 {0,{2,1}}, // State: 0
el18gs 13:3b2a4e14937b 33 {2,{0,2}}, // State: 1
el18gs 13:3b2a4e14937b 34 {4,{1,0}}, // State: 2
el18gs 13:3b2a4e14937b 35 };
el18gs 13:3b2a4e14937b 36
el18gs 13:3b2a4e14937b 37 // Settings menu
el18gs 13:3b2a4e14937b 38 const State settingsFsm[2] = {
el18gs 13:3b2a4e14937b 39 // line next{up, down}
el18gs 13:3b2a4e14937b 40 {2,{1,1}}, // State: 0
el18gs 13:3b2a4e14937b 41 {4,{0,0}}, // State: 1
el18gs 13:3b2a4e14937b 42 };
el18gs 13:3b2a4e14937b 43
el18gs 13:3b2a4e14937b 44 class gameEngine
el18gs 13:3b2a4e14937b 45 {
el18gs 13:3b2a4e14937b 46 public:
el18gs 13:3b2a4e14937b 47 gameEngine(SDFileSystem &sd, Gamepad &pad, N5110 &lcd);
el18gs 13:3b2a4e14937b 48 void welcome(SDFileSystem &sd, N5110 &lcd, Gamepad &pad, volatile int &g_buttonA_flag);
el18gs 13:3b2a4e14937b 49 int game_menu(N5110 &lcd, volatile int &g_buttonA_flag, volatile int &g_buttonB_flag, volatile int &g_buttonX_flag);
el18gs 13:3b2a4e14937b 50 void catch_ghosts(Inventory &inventory, FX0S8700CQ &accel, SDFileSystem &sd, N5110 &lcd, Gamepad &pad, volatile int &g_buttonA_flag, BusOut &left_LED, BusOut &right_LED);
el18gs 13:3b2a4e14937b 51 void settings(N5110 &lcd, Gamepad &pad, volatile int &g_buttonA_flag, volatile int &g_buttonStart_flag, volatile int &g_buttonX_flag, volatile int &g_buttonB_flag,
el18gs 13:3b2a4e14937b 52 volatile bool &g_buttonTesting,
el18gs 13:3b2a4e14937b 53 volatile int &g_buttonSensitivityTest,
el18gs 13:3b2a4e14937b 54 volatile int &g_buttonSensitivity);
el18gs 13:3b2a4e14937b 55
el18gs 13:3b2a4e14937b 56 private:
el18gs 13:3b2a4e14937b 57 void adjustContrast(N5110 &lcd, Gamepad &pad, volatile int &g_buttonA_flag);
el18gs 13:3b2a4e14937b 58 void buttonDelay(N5110 &lcd,
el18gs 13:3b2a4e14937b 59 Gamepad &pad,
el18gs 13:3b2a4e14937b 60 volatile int &g_buttonA_flag,
el18gs 13:3b2a4e14937b 61 volatile int &g_buttonX_flag,
el18gs 13:3b2a4e14937b 62 volatile bool &g_buttonTesting,
el18gs 13:3b2a4e14937b 63 volatile int &g_buttonSensitivityTest,
el18gs 13:3b2a4e14937b 64 volatile int &g_buttonSensitivity);
el18gs 13:3b2a4e14937b 65 void ghostCatchTrial(FX0S8700CQ &accel, N5110 &lcd, SDFileSystem &sd, Gamepad &pad, BusOut &left_LED, BusOut &right_LED, volatile int &g_buttonA_flag);
el18gs 13:3b2a4e14937b 66 void angleDetectionTechnicalSub(FX0S8700CQ &accel, BusOut &left_LED, BusOut &right_LED);
el18gs 13:3b2a4e14937b 67 bool drawCrosshairs(Vector2D ideal, int** ghost, N5110 &lcd, Gamepad &pad, volatile int g_buttonA_flag);
el18gs 13:3b2a4e14937b 68 void randomMove(Vector2D &ideal);
el18gs 13:3b2a4e14937b 69 bool ghostHit( int xGhost, int yGhost, int xJoy, int yJoy);
el18gs 13:3b2a4e14937b 70 };
el18gs 13:3b2a4e14937b 71
el18gs 13:3b2a4e14937b 72 #endif