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 26 13:37:32 2020 +0000
Revision:
17:3ebcf7bba112
Parent:
2:eaf245af2aae
Final Submission. I have read and agreed with Statement of Academic Integrity.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el18gs 2:eaf245af2aae 1 /* SD/MMC File System Library
el18gs 2:eaf245af2aae 2 * Copyright (c) 2016 Neil Thiessen
el18gs 2:eaf245af2aae 3 *
el18gs 2:eaf245af2aae 4 * Licensed under the Apache License, Version 2.0 (the "License");
el18gs 2:eaf245af2aae 5 * you may not use this file except in compliance with the License.
el18gs 2:eaf245af2aae 6 * You may obtain a copy of the License at
el18gs 2:eaf245af2aae 7 *
el18gs 2:eaf245af2aae 8 * http://www.apache.org/licenses/LICENSE-2.0
el18gs 2:eaf245af2aae 9 *
el18gs 2:eaf245af2aae 10 * Unless required by applicable law or agreed to in writing, software
el18gs 2:eaf245af2aae 11 * distributed under the License is distributed on an "AS IS" BASIS,
el18gs 2:eaf245af2aae 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
el18gs 2:eaf245af2aae 13 * See the License for the specific language governing permissions and
el18gs 2:eaf245af2aae 14 * limitations under the License.
el18gs 2:eaf245af2aae 15 */
el18gs 2:eaf245af2aae 16
el18gs 2:eaf245af2aae 17 #include "SDCRC.h"
el18gs 2:eaf245af2aae 18
el18gs 2:eaf245af2aae 19 namespace SDCRC
el18gs 2:eaf245af2aae 20 {
el18gs 2:eaf245af2aae 21
el18gs 2:eaf245af2aae 22 namespace
el18gs 2:eaf245af2aae 23 {
el18gs 2:eaf245af2aae 24 const char m_Crc7Table[] = {
el18gs 2:eaf245af2aae 25 0x00, 0x09, 0x12, 0x1B, 0x24, 0x2D, 0x36, 0x3F,
el18gs 2:eaf245af2aae 26 0x48, 0x41, 0x5A, 0x53, 0x6C, 0x65, 0x7E, 0x77,
el18gs 2:eaf245af2aae 27 0x19, 0x10, 0x0B, 0x02, 0x3D, 0x34, 0x2F, 0x26,
el18gs 2:eaf245af2aae 28 0x51, 0x58, 0x43, 0x4A, 0x75, 0x7C, 0x67, 0x6E,
el18gs 2:eaf245af2aae 29 0x32, 0x3B, 0x20, 0x29, 0x16, 0x1F, 0x04, 0x0D,
el18gs 2:eaf245af2aae 30 0x7A, 0x73, 0x68, 0x61, 0x5E, 0x57, 0x4C, 0x45,
el18gs 2:eaf245af2aae 31 0x2B, 0x22, 0x39, 0x30, 0x0F, 0x06, 0x1D, 0x14,
el18gs 2:eaf245af2aae 32 0x63, 0x6A, 0x71, 0x78, 0x47, 0x4E, 0x55, 0x5C,
el18gs 2:eaf245af2aae 33 0x64, 0x6D, 0x76, 0x7F, 0x40, 0x49, 0x52, 0x5B,
el18gs 2:eaf245af2aae 34 0x2C, 0x25, 0x3E, 0x37, 0x08, 0x01, 0x1A, 0x13,
el18gs 2:eaf245af2aae 35 0x7D, 0x74, 0x6F, 0x66, 0x59, 0x50, 0x4B, 0x42,
el18gs 2:eaf245af2aae 36 0x35, 0x3C, 0x27, 0x2E, 0x11, 0x18, 0x03, 0x0A,
el18gs 2:eaf245af2aae 37 0x56, 0x5F, 0x44, 0x4D, 0x72, 0x7B, 0x60, 0x69,
el18gs 2:eaf245af2aae 38 0x1E, 0x17, 0x0C, 0x05, 0x3A, 0x33, 0x28, 0x21,
el18gs 2:eaf245af2aae 39 0x4F, 0x46, 0x5D, 0x54, 0x6B, 0x62, 0x79, 0x70,
el18gs 2:eaf245af2aae 40 0x07, 0x0E, 0x15, 0x1C, 0x23, 0x2A, 0x31, 0x38,
el18gs 2:eaf245af2aae 41 0x41, 0x48, 0x53, 0x5A, 0x65, 0x6C, 0x77, 0x7E,
el18gs 2:eaf245af2aae 42 0x09, 0x00, 0x1B, 0x12, 0x2D, 0x24, 0x3F, 0x36,
el18gs 2:eaf245af2aae 43 0x58, 0x51, 0x4A, 0x43, 0x7C, 0x75, 0x6E, 0x67,
el18gs 2:eaf245af2aae 44 0x10, 0x19, 0x02, 0x0B, 0x34, 0x3D, 0x26, 0x2F,
el18gs 2:eaf245af2aae 45 0x73, 0x7A, 0x61, 0x68, 0x57, 0x5E, 0x45, 0x4C,
el18gs 2:eaf245af2aae 46 0x3B, 0x32, 0x29, 0x20, 0x1F, 0x16, 0x0D, 0x04,
el18gs 2:eaf245af2aae 47 0x6A, 0x63, 0x78, 0x71, 0x4E, 0x47, 0x5C, 0x55,
el18gs 2:eaf245af2aae 48 0x22, 0x2B, 0x30, 0x39, 0x06, 0x0F, 0x14, 0x1D,
el18gs 2:eaf245af2aae 49 0x25, 0x2C, 0x37, 0x3E, 0x01, 0x08, 0x13, 0x1A,
el18gs 2:eaf245af2aae 50 0x6D, 0x64, 0x7F, 0x76, 0x49, 0x40, 0x5B, 0x52,
el18gs 2:eaf245af2aae 51 0x3C, 0x35, 0x2E, 0x27, 0x18, 0x11, 0x0A, 0x03,
el18gs 2:eaf245af2aae 52 0x74, 0x7D, 0x66, 0x6F, 0x50, 0x59, 0x42, 0x4B,
el18gs 2:eaf245af2aae 53 0x17, 0x1E, 0x05, 0x0C, 0x33, 0x3A, 0x21, 0x28,
el18gs 2:eaf245af2aae 54 0x5F, 0x56, 0x4D, 0x44, 0x7B, 0x72, 0x69, 0x60,
el18gs 2:eaf245af2aae 55 0x0E, 0x07, 0x1C, 0x15, 0x2A, 0x23, 0x38, 0x31,
el18gs 2:eaf245af2aae 56 0x46, 0x4F, 0x54, 0x5D, 0x62, 0x6B, 0x70, 0x79
el18gs 2:eaf245af2aae 57 };
el18gs 2:eaf245af2aae 58
el18gs 2:eaf245af2aae 59 const unsigned short m_Crc16Table[256] = {
el18gs 2:eaf245af2aae 60 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
el18gs 2:eaf245af2aae 61 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
el18gs 2:eaf245af2aae 62 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
el18gs 2:eaf245af2aae 63 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
el18gs 2:eaf245af2aae 64 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
el18gs 2:eaf245af2aae 65 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
el18gs 2:eaf245af2aae 66 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
el18gs 2:eaf245af2aae 67 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
el18gs 2:eaf245af2aae 68 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
el18gs 2:eaf245af2aae 69 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
el18gs 2:eaf245af2aae 70 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
el18gs 2:eaf245af2aae 71 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
el18gs 2:eaf245af2aae 72 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
el18gs 2:eaf245af2aae 73 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
el18gs 2:eaf245af2aae 74 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
el18gs 2:eaf245af2aae 75 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
el18gs 2:eaf245af2aae 76 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
el18gs 2:eaf245af2aae 77 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
el18gs 2:eaf245af2aae 78 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
el18gs 2:eaf245af2aae 79 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
el18gs 2:eaf245af2aae 80 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
el18gs 2:eaf245af2aae 81 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
el18gs 2:eaf245af2aae 82 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
el18gs 2:eaf245af2aae 83 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
el18gs 2:eaf245af2aae 84 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
el18gs 2:eaf245af2aae 85 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
el18gs 2:eaf245af2aae 86 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
el18gs 2:eaf245af2aae 87 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
el18gs 2:eaf245af2aae 88 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
el18gs 2:eaf245af2aae 89 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
el18gs 2:eaf245af2aae 90 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
el18gs 2:eaf245af2aae 91 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
el18gs 2:eaf245af2aae 92 };
el18gs 2:eaf245af2aae 93 }
el18gs 2:eaf245af2aae 94
el18gs 2:eaf245af2aae 95 char crc7(const char* data, int length)
el18gs 2:eaf245af2aae 96 {
el18gs 2:eaf245af2aae 97 //Calculate the CRC7 checksum for the specified data block
el18gs 2:eaf245af2aae 98 char crc = 0;
el18gs 2:eaf245af2aae 99 for (int i = 0; i < length; i++) {
el18gs 2:eaf245af2aae 100 crc = m_Crc7Table[(crc << 1) ^ data[i]];
el18gs 2:eaf245af2aae 101 }
el18gs 2:eaf245af2aae 102
el18gs 2:eaf245af2aae 103 //Return the calculated checksum
el18gs 2:eaf245af2aae 104 return crc;
el18gs 2:eaf245af2aae 105 }
el18gs 2:eaf245af2aae 106
el18gs 2:eaf245af2aae 107 unsigned short crc16(const char* data, int length)
el18gs 2:eaf245af2aae 108 {
el18gs 2:eaf245af2aae 109 //Calculate the CRC16 checksum for the specified data block
el18gs 2:eaf245af2aae 110 unsigned short crc = 0;
el18gs 2:eaf245af2aae 111 for (int i = 0; i < length; i++) {
el18gs 2:eaf245af2aae 112 crc = (crc << 8) ^ m_Crc16Table[((crc >> 8) ^ data[i]) & 0x00FF];
el18gs 2:eaf245af2aae 113 }
el18gs 2:eaf245af2aae 114
el18gs 2:eaf245af2aae 115 //Return the calculated checksum
el18gs 2:eaf245af2aae 116 return crc;
el18gs 2:eaf245af2aae 117 }
el18gs 2:eaf245af2aae 118
el18gs 2:eaf245af2aae 119 }