Kern Fowler / Mbed 2 deprecated Donkey_Kong_Game

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }