Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@4:59175720d8ee, 2019-05-05 (annotated)
- Committer:
- Kern_EL17KJTF
- Date:
- Sun May 05 02:27:37 2019 +0000
- Revision:
- 4:59175720d8ee
- Parent:
- 3:b248dc1f3e8d
- Child:
- 5:5667c4ec3d7e
Menu edited - Repositioned items, added high scores state.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Kern_EL17KJTF | 0:0130fd5738f7 | 1 | /* |
Kern_EL17KJTF | 0:0130fd5738f7 | 2 | ELEC2645 Embedded Systems Project |
Kern_EL17KJTF | 0:0130fd5738f7 | 3 | School of Electronic & Electrical Engineering |
Kern_EL17KJTF | 0:0130fd5738f7 | 4 | University of Leeds |
Kern_EL17KJTF | 0:0130fd5738f7 | 5 | |
Kern_EL17KJTF | 0:0130fd5738f7 | 6 | Name: Kern Fowler |
Kern_EL17KJTF | 0:0130fd5738f7 | 7 | Username: el17kjtf |
Kern_EL17KJTF | 0:0130fd5738f7 | 8 | Student ID Number: 201116686 |
Kern_EL17KJTF | 0:0130fd5738f7 | 9 | Date: 19/02/2019 |
Kern_EL17KJTF | 2:6baf849b0270 | 10 | Version: 1.2 |
Kern_EL17KJTF | 1:7a0917df015a | 11 | |
Kern_EL17KJTF | 1:7a0917df015a | 12 | */ |
Kern_EL17KJTF | 1:7a0917df015a | 13 | #include "main.h" |
Kern_EL17KJTF | 1:7a0917df015a | 14 | |
Kern_EL17KJTF | 1:7a0917df015a | 15 | |
Kern_EL17KJTF | 2:6baf849b0270 | 16 | int fps = 24; |
Kern_EL17KJTF | 2:6baf849b0270 | 17 | int direction; |
Kern_EL17KJTF | 3:b248dc1f3e8d | 18 | int menu_option_pos = 0; |
Kern_EL17KJTF | 2:6baf849b0270 | 19 | int arrow_pos = 0; |
Kern_EL17KJTF | 3:b248dc1f3e8d | 20 | float brightness = 0.5; |
Kern_EL17KJTF | 3:b248dc1f3e8d | 21 | float contrast = 0.430; |
Kern_EL17KJTF | 3:b248dc1f3e8d | 22 | int volume = 1; |
Kern_EL17KJTF | 2:6baf849b0270 | 23 | |
Kern_EL17KJTF | 2:6baf849b0270 | 24 | int main() { |
Kern_EL17KJTF | 1:7a0917df015a | 25 | init(); // initialise peripherals |
Kern_EL17KJTF | 1:7a0917df015a | 26 | welcome(); // display welcome message |
Kern_EL17KJTF | 1:7a0917df015a | 27 | |
Kern_EL17KJTF | 1:7a0917df015a | 28 | while(1) { // infinite loop |
Kern_EL17KJTF | 2:6baf849b0270 | 29 | arrow_location(); |
Kern_EL17KJTF | 2:6baf849b0270 | 30 | print_menu(); // this re-prints the menu at the start of every loop |
Kern_EL17KJTF | 2:6baf849b0270 | 31 | arrow_select(); |
Kern_EL17KJTF | 2:6baf849b0270 | 32 | wait_ms(1.0f/fps); |
Kern_EL17KJTF | 1:7a0917df015a | 33 | } |
Kern_EL17KJTF | 1:7a0917df015a | 34 | } |
Kern_EL17KJTF | 1:7a0917df015a | 35 | |
Kern_EL17KJTF | 2:6baf849b0270 | 36 | void init() { |
Kern_EL17KJTF | 1:7a0917df015a | 37 | // initialise LCD |
Kern_EL17KJTF | 1:7a0917df015a | 38 | lcd.init(); |
Kern_EL17KJTF | 1:7a0917df015a | 39 | // initialise Gamepad |
Kern_EL17KJTF | 1:7a0917df015a | 40 | pad.init(); |
Kern_EL17KJTF | 2:6baf849b0270 | 41 | wait(2.5); |
Kern_EL17KJTF | 2:6baf849b0270 | 42 | } |
Kern_EL17KJTF | 2:6baf849b0270 | 43 | |
Kern_EL17KJTF | 2:6baf849b0270 | 44 | void arrow_location() { |
Kern_EL17KJTF | 2:6baf849b0270 | 45 | direction = pad.get_direction(); |
Kern_EL17KJTF | 2:6baf849b0270 | 46 | if (direction == N) { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 47 | menu_option_pos = menu_option_pos - 1; |
Kern_EL17KJTF | 2:6baf849b0270 | 48 | // printf("North Pressed"); |
Kern_EL17KJTF | 2:6baf849b0270 | 49 | wait_ms(250); |
Kern_EL17KJTF | 2:6baf849b0270 | 50 | } |
Kern_EL17KJTF | 2:6baf849b0270 | 51 | if (direction == S) { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 52 | menu_option_pos = menu_option_pos + 1; |
Kern_EL17KJTF | 2:6baf849b0270 | 53 | // printf("South Pressed"); |
Kern_EL17KJTF | 2:6baf849b0270 | 54 | wait_ms(250); |
Kern_EL17KJTF | 2:6baf849b0270 | 55 | } |
Kern_EL17KJTF | 4:59175720d8ee | 56 | if (menu_option_pos > 4) { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 57 | menu_option_pos = 0; |
Kern_EL17KJTF | 2:6baf849b0270 | 58 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 59 | if (menu_option_pos < 0) { |
Kern_EL17KJTF | 4:59175720d8ee | 60 | menu_option_pos = 4; |
Kern_EL17KJTF | 2:6baf849b0270 | 61 | } |
Kern_EL17KJTF | 4:59175720d8ee | 62 | arrow_pos = 8 + (menu_option_pos * 8); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 63 | // printf("Option Num = %d", menu_option_pos) |
Kern_EL17KJTF | 2:6baf849b0270 | 64 | } |
Kern_EL17KJTF | 2:6baf849b0270 | 65 | |
Kern_EL17KJTF | 2:6baf849b0270 | 66 | void arrow_select() { |
Kern_EL17KJTF | 2:6baf849b0270 | 67 | if (pad.check_event(Gamepad::A_PRESSED) == true) { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 68 | if (menu_option_pos == 0) { |
Kern_EL17KJTF | 2:6baf849b0270 | 69 | // printf("GameEngine"); |
Kern_EL17KJTF | 2:6baf849b0270 | 70 | game_engine_run(); |
Kern_EL17KJTF | 2:6baf849b0270 | 71 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 72 | if (menu_option_pos == 1) { |
Kern_EL17KJTF | 2:6baf849b0270 | 73 | // printf("Controls"); |
Kern_EL17KJTF | 2:6baf849b0270 | 74 | controls_run(); |
Kern_EL17KJTF | 2:6baf849b0270 | 75 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 76 | if (menu_option_pos == 2) { |
Kern_EL17KJTF | 2:6baf849b0270 | 77 | // printf("Instructions"); |
Kern_EL17KJTF | 2:6baf849b0270 | 78 | instructions_run(); |
Kern_EL17KJTF | 2:6baf849b0270 | 79 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 80 | if (menu_option_pos == 3) { |
Kern_EL17KJTF | 2:6baf849b0270 | 81 | // printf("Options"); |
Kern_EL17KJTF | 2:6baf849b0270 | 82 | options_run(); |
Kern_EL17KJTF | 2:6baf849b0270 | 83 | } |
Kern_EL17KJTF | 4:59175720d8ee | 84 | if (menu_option_pos == 4) { |
Kern_EL17KJTF | 4:59175720d8ee | 85 | // printf("High Scores"); |
Kern_EL17KJTF | 4:59175720d8ee | 86 | high_scores_run(); |
Kern_EL17KJTF | 4:59175720d8ee | 87 | } |
Kern_EL17KJTF | 2:6baf849b0270 | 88 | } |
Kern_EL17KJTF | 2:6baf849b0270 | 89 | } |
Kern_EL17KJTF | 1:7a0917df015a | 90 | |
Kern_EL17KJTF | 1:7a0917df015a | 91 | |
Kern_EL17KJTF | 2:6baf849b0270 | 92 | void print_menu() { |
Kern_EL17KJTF | 2:6baf849b0270 | 93 | lcd.clear(); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 94 | lcd.printString("Main Menu",19,0); |
Kern_EL17KJTF | 4:59175720d8ee | 95 | lcd.printString("Start Game",8,1); |
Kern_EL17KJTF | 4:59175720d8ee | 96 | lcd.printString("Controls",8,2); |
Kern_EL17KJTF | 4:59175720d8ee | 97 | lcd.printString("Instructions",8,3); |
Kern_EL17KJTF | 4:59175720d8ee | 98 | lcd.printString("Options",8,4); |
Kern_EL17KJTF | 4:59175720d8ee | 99 | lcd.printString("High Scores",8,5); |
Kern_EL17KJTF | 2:6baf849b0270 | 100 | lcd.drawSprite(0,arrow_pos,7,7,(int *)menu_arrow); |
Kern_EL17KJTF | 2:6baf849b0270 | 101 | lcd.refresh(); |
Kern_EL17KJTF | 1:7a0917df015a | 102 | } |
Kern_EL17KJTF | 1:7a0917df015a | 103 | |
Kern_EL17KJTF | 2:6baf849b0270 | 104 | void welcome() { |
Kern_EL17KJTF | 1:7a0917df015a | 105 | lcd.clear(); |
Kern_EL17KJTF | 2:6baf849b0270 | 106 | lcd.drawSprite(24,0,36,34,(int *)menu_dk_face); |
Kern_EL17KJTF | 1:7a0917df015a | 107 | lcd.printString(" Donkey Kong",0,5); |
Kern_EL17KJTF | 1:7a0917df015a | 108 | lcd.refresh(); |
Kern_EL17KJTF | 2:6baf849b0270 | 109 | wait(1.0); //edit back to longer |
Kern_EL17KJTF | 1:7a0917df015a | 110 | lcd.clear(); |
Kern_EL17KJTF | 2:6baf849b0270 | 111 | lcd.printString(" Created",0,0); |
Kern_EL17KJTF | 2:6baf849b0270 | 112 | lcd.printString(" By",0,1); |
Kern_EL17KJTF | 2:6baf849b0270 | 113 | lcd.printString(" Kern Fowler",0,3); |
Kern_EL17KJTF | 2:6baf849b0270 | 114 | lcd.printString(" 201116686",0,4); |
Kern_EL17KJTF | 1:7a0917df015a | 115 | lcd.refresh(); |
Kern_EL17KJTF | 2:6baf849b0270 | 116 | wait(1.0); |
Kern_EL17KJTF | 1:7a0917df015a | 117 | } |
Kern_EL17KJTF | 4:59175720d8ee | 118 | // Game State-------------------------------------------------------------- |
Kern_EL17KJTF | 2:6baf849b0270 | 119 | void game_engine_run() { |
Kern_EL17KJTF | 2:6baf849b0270 | 120 | wait_ms(250); |
Kern_EL17KJTF | 2:6baf849b0270 | 121 | |
Kern_EL17KJTF | 2:6baf849b0270 | 122 | while (pad.check_event(Gamepad::BACK_PRESSED) == false) { |
Kern_EL17KJTF | 2:6baf849b0270 | 123 | //printf("Game State"); |
Kern_EL17KJTF | 2:6baf849b0270 | 124 | lcd.clear(); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 125 | lcd.printString("Game",0,0); |
Kern_EL17KJTF | 2:6baf849b0270 | 126 | lcd.refresh(); |
Kern_EL17KJTF | 2:6baf849b0270 | 127 | wait_ms(1.0f/fps); |
Kern_EL17KJTF | 2:6baf849b0270 | 128 | } |
Kern_EL17KJTF | 2:6baf849b0270 | 129 | } |
Kern_EL17KJTF | 2:6baf849b0270 | 130 | |
Kern_EL17KJTF | 4:59175720d8ee | 131 | // Controls State---------------------------------------------------------- |
Kern_EL17KJTF | 2:6baf849b0270 | 132 | void controls_run() { |
Kern_EL17KJTF | 2:6baf849b0270 | 133 | wait_ms(250); |
Kern_EL17KJTF | 1:7a0917df015a | 134 | |
Kern_EL17KJTF | 2:6baf849b0270 | 135 | while (pad.check_event(Gamepad::BACK_PRESSED) == false) { |
Kern_EL17KJTF | 2:6baf849b0270 | 136 | //printf("Control State"); |
Kern_EL17KJTF | 2:6baf849b0270 | 137 | lcd.clear(); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 138 | lcd.printString("Controls",19,0); |
Kern_EL17KJTF | 2:6baf849b0270 | 139 | lcd.refresh(); |
Kern_EL17KJTF | 2:6baf849b0270 | 140 | wait_ms(1.0f/fps); |
Kern_EL17KJTF | 2:6baf849b0270 | 141 | } |
Kern_EL17KJTF | 2:6baf849b0270 | 142 | } |
Kern_EL17KJTF | 2:6baf849b0270 | 143 | |
Kern_EL17KJTF | 4:59175720d8ee | 144 | // Instructions State------------------------------------------------------ |
Kern_EL17KJTF | 2:6baf849b0270 | 145 | void instructions_run() { |
Kern_EL17KJTF | 2:6baf849b0270 | 146 | wait_ms(250); |
Kern_EL17KJTF | 2:6baf849b0270 | 147 | |
Kern_EL17KJTF | 2:6baf849b0270 | 148 | while (pad.check_event(Gamepad::BACK_PRESSED) == false) { |
Kern_EL17KJTF | 2:6baf849b0270 | 149 | //printf("Instructions State"); |
Kern_EL17KJTF | 2:6baf849b0270 | 150 | lcd.clear(); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 151 | lcd.printString("Instructions",7,0); |
Kern_EL17KJTF | 2:6baf849b0270 | 152 | lcd.refresh(); |
Kern_EL17KJTF | 2:6baf849b0270 | 153 | wait_ms(1.0f/fps); |
Kern_EL17KJTF | 2:6baf849b0270 | 154 | } |
Kern_EL17KJTF | 2:6baf849b0270 | 155 | } |
Kern_EL17KJTF | 2:6baf849b0270 | 156 | |
Kern_EL17KJTF | 4:59175720d8ee | 157 | // Options State----------------------------------------------------------- |
Kern_EL17KJTF | 2:6baf849b0270 | 158 | void options_run() { |
Kern_EL17KJTF | 2:6baf849b0270 | 159 | wait_ms(250); |
Kern_EL17KJTF | 2:6baf849b0270 | 160 | while (pad.check_event(Gamepad::BACK_PRESSED) == false) { |
Kern_EL17KJTF | 2:6baf849b0270 | 161 | //printf("Options State"); |
Kern_EL17KJTF | 2:6baf849b0270 | 162 | lcd.clear(); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 163 | lcd.printString("Options",21,0); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 164 | options_brightness(); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 165 | options_contrast(); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 166 | options_volume(); |
Kern_EL17KJTF | 2:6baf849b0270 | 167 | lcd.refresh(); |
Kern_EL17KJTF | 2:6baf849b0270 | 168 | wait_ms(1.0f/fps); |
Kern_EL17KJTF | 2:6baf849b0270 | 169 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 170 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 171 | |
Kern_EL17KJTF | 3:b248dc1f3e8d | 172 | void options_brightness() { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 173 | if (pad.check_event(Gamepad::B_PRESSED) == true) { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 174 | brightness = 0; |
Kern_EL17KJTF | 3:b248dc1f3e8d | 175 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 176 | if (pad.check_event(Gamepad::A_PRESSED) == true) { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 177 | brightness = 0.5; |
Kern_EL17KJTF | 3:b248dc1f3e8d | 178 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 179 | lcd.setBrightness(brightness); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 180 | lcd.printString("A/B = BackLite",0,2); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 181 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 182 | |
Kern_EL17KJTF | 3:b248dc1f3e8d | 183 | void options_contrast() { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 184 | contrast = pad.read_pot(); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 185 | lcd.setContrast(contrast); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 186 | lcd.printString("Pot = Contrast",0,3); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 187 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 188 | |
Kern_EL17KJTF | 3:b248dc1f3e8d | 189 | void options_volume() { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 190 | if (pad.check_event(Gamepad::Y_PRESSED) == true) { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 191 | volume = 0; |
Kern_EL17KJTF | 3:b248dc1f3e8d | 192 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 193 | if (pad.check_event(Gamepad::X_PRESSED) == true) { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 194 | volume = 1; |
Kern_EL17KJTF | 3:b248dc1f3e8d | 195 | pad.tone(2400, 0.2); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 196 | wait_ms(200); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 197 | pad.tone(2400, 0.2); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 198 | wait_ms(200); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 199 | pad.tone(2400, 0.2); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 200 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 201 | lcd.printString("X/Y = Volume",0,4); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 202 | if (volume == 0) { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 203 | lcd.printString("Off",36,5); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 204 | } else { |
Kern_EL17KJTF | 3:b248dc1f3e8d | 205 | lcd.printString("On",36,5); |
Kern_EL17KJTF | 3:b248dc1f3e8d | 206 | } |
Kern_EL17KJTF | 3:b248dc1f3e8d | 207 | |
Kern_EL17KJTF | 4:59175720d8ee | 208 | } |
Kern_EL17KJTF | 4:59175720d8ee | 209 | |
Kern_EL17KJTF | 4:59175720d8ee | 210 | // High Score State-------------------------------------------------------- |
Kern_EL17KJTF | 4:59175720d8ee | 211 | void high_scores_run() { |
Kern_EL17KJTF | 4:59175720d8ee | 212 | while (pad.check_event(Gamepad::BACK_PRESSED) == false) { |
Kern_EL17KJTF | 4:59175720d8ee | 213 | //printf("High Score State"); |
Kern_EL17KJTF | 4:59175720d8ee | 214 | lcd.clear(); |
Kern_EL17KJTF | 4:59175720d8ee | 215 | lcd.printString("High Scores",12,0); |
Kern_EL17KJTF | 4:59175720d8ee | 216 | lcd.refresh(); |
Kern_EL17KJTF | 4:59175720d8ee | 217 | wait_ms(1.0f/fps); |
Kern_EL17KJTF | 4:59175720d8ee | 218 | } |
Kern_EL17KJTF | 1:7a0917df015a | 219 | } |