Kern Fowler / Mbed 2 deprecated Donkey_Kong_Game

Dependencies:   mbed

Committer:
Kern_EL17KJTF
Date:
Sun May 05 02:16:51 2019 +0000
Revision:
3:b248dc1f3e8d
Parent:
2:6baf849b0270
Child:
4:59175720d8ee
Options state completed - Backlight toggle, Contrast control, Volume toggle.

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 3:b248dc1f3e8d 56 if (menu_option_pos > 3) {
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 3:b248dc1f3e8d 60 menu_option_pos = 3;
Kern_EL17KJTF 2:6baf849b0270 61 }
Kern_EL17KJTF 3:b248dc1f3e8d 62 arrow_pos = 16 + (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 2:6baf849b0270 84 }
Kern_EL17KJTF 2:6baf849b0270 85 }
Kern_EL17KJTF 1:7a0917df015a 86
Kern_EL17KJTF 1:7a0917df015a 87
Kern_EL17KJTF 2:6baf849b0270 88 void print_menu() {
Kern_EL17KJTF 2:6baf849b0270 89 lcd.clear();
Kern_EL17KJTF 3:b248dc1f3e8d 90 lcd.printString("Main Menu",19,0);
Kern_EL17KJTF 2:6baf849b0270 91 lcd.printString("Start Game",8,2);
Kern_EL17KJTF 2:6baf849b0270 92 lcd.printString("Controls",8,3);
Kern_EL17KJTF 2:6baf849b0270 93 lcd.printString("Instructions",8,4);
Kern_EL17KJTF 2:6baf849b0270 94 lcd.printString("Options",8,5);
Kern_EL17KJTF 2:6baf849b0270 95 lcd.drawSprite(0,arrow_pos,7,7,(int *)menu_arrow);
Kern_EL17KJTF 2:6baf849b0270 96 lcd.refresh();
Kern_EL17KJTF 1:7a0917df015a 97 }
Kern_EL17KJTF 1:7a0917df015a 98
Kern_EL17KJTF 2:6baf849b0270 99 void welcome() {
Kern_EL17KJTF 1:7a0917df015a 100 lcd.clear();
Kern_EL17KJTF 2:6baf849b0270 101 lcd.drawSprite(24,0,36,34,(int *)menu_dk_face);
Kern_EL17KJTF 1:7a0917df015a 102 lcd.printString(" Donkey Kong",0,5);
Kern_EL17KJTF 1:7a0917df015a 103 lcd.refresh();
Kern_EL17KJTF 2:6baf849b0270 104 wait(1.0); //edit back to longer
Kern_EL17KJTF 1:7a0917df015a 105 lcd.clear();
Kern_EL17KJTF 2:6baf849b0270 106 lcd.printString(" Created",0,0);
Kern_EL17KJTF 2:6baf849b0270 107 lcd.printString(" By",0,1);
Kern_EL17KJTF 2:6baf849b0270 108 lcd.printString(" Kern Fowler",0,3);
Kern_EL17KJTF 2:6baf849b0270 109 lcd.printString(" 201116686",0,4);
Kern_EL17KJTF 1:7a0917df015a 110 lcd.refresh();
Kern_EL17KJTF 2:6baf849b0270 111 wait(1.0);
Kern_EL17KJTF 1:7a0917df015a 112 }
Kern_EL17KJTF 2:6baf849b0270 113
Kern_EL17KJTF 2:6baf849b0270 114 void game_engine_run() {
Kern_EL17KJTF 2:6baf849b0270 115 wait_ms(250);
Kern_EL17KJTF 2:6baf849b0270 116
Kern_EL17KJTF 2:6baf849b0270 117 while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
Kern_EL17KJTF 2:6baf849b0270 118 //printf("Game State");
Kern_EL17KJTF 2:6baf849b0270 119 lcd.clear();
Kern_EL17KJTF 3:b248dc1f3e8d 120 lcd.printString("Game",0,0);
Kern_EL17KJTF 2:6baf849b0270 121 lcd.refresh();
Kern_EL17KJTF 2:6baf849b0270 122 wait_ms(1.0f/fps);
Kern_EL17KJTF 2:6baf849b0270 123 }
Kern_EL17KJTF 2:6baf849b0270 124 }
Kern_EL17KJTF 2:6baf849b0270 125
Kern_EL17KJTF 2:6baf849b0270 126 void controls_run() {
Kern_EL17KJTF 2:6baf849b0270 127 wait_ms(250);
Kern_EL17KJTF 1:7a0917df015a 128
Kern_EL17KJTF 2:6baf849b0270 129 while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
Kern_EL17KJTF 2:6baf849b0270 130 //printf("Control State");
Kern_EL17KJTF 2:6baf849b0270 131 lcd.clear();
Kern_EL17KJTF 3:b248dc1f3e8d 132 lcd.printString("Controls",19,0);
Kern_EL17KJTF 2:6baf849b0270 133 lcd.refresh();
Kern_EL17KJTF 2:6baf849b0270 134 wait_ms(1.0f/fps);
Kern_EL17KJTF 2:6baf849b0270 135 }
Kern_EL17KJTF 2:6baf849b0270 136 }
Kern_EL17KJTF 2:6baf849b0270 137
Kern_EL17KJTF 2:6baf849b0270 138 void instructions_run() {
Kern_EL17KJTF 2:6baf849b0270 139 wait_ms(250);
Kern_EL17KJTF 2:6baf849b0270 140
Kern_EL17KJTF 2:6baf849b0270 141 while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
Kern_EL17KJTF 2:6baf849b0270 142 //printf("Instructions State");
Kern_EL17KJTF 2:6baf849b0270 143 lcd.clear();
Kern_EL17KJTF 3:b248dc1f3e8d 144 lcd.printString("Instructions",7,0);
Kern_EL17KJTF 2:6baf849b0270 145 lcd.refresh();
Kern_EL17KJTF 2:6baf849b0270 146 wait_ms(1.0f/fps);
Kern_EL17KJTF 2:6baf849b0270 147 }
Kern_EL17KJTF 2:6baf849b0270 148 }
Kern_EL17KJTF 2:6baf849b0270 149
Kern_EL17KJTF 2:6baf849b0270 150 void options_run() {
Kern_EL17KJTF 2:6baf849b0270 151 wait_ms(250);
Kern_EL17KJTF 2:6baf849b0270 152 while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
Kern_EL17KJTF 2:6baf849b0270 153 //printf("Options State");
Kern_EL17KJTF 2:6baf849b0270 154 lcd.clear();
Kern_EL17KJTF 3:b248dc1f3e8d 155 lcd.printString("Options",21,0);
Kern_EL17KJTF 3:b248dc1f3e8d 156 options_brightness();
Kern_EL17KJTF 3:b248dc1f3e8d 157 options_contrast();
Kern_EL17KJTF 3:b248dc1f3e8d 158 options_volume();
Kern_EL17KJTF 2:6baf849b0270 159 lcd.refresh();
Kern_EL17KJTF 2:6baf849b0270 160 wait_ms(1.0f/fps);
Kern_EL17KJTF 2:6baf849b0270 161 }
Kern_EL17KJTF 3:b248dc1f3e8d 162 }
Kern_EL17KJTF 3:b248dc1f3e8d 163
Kern_EL17KJTF 3:b248dc1f3e8d 164 void options_brightness() {
Kern_EL17KJTF 3:b248dc1f3e8d 165 if (pad.check_event(Gamepad::B_PRESSED) == true) {
Kern_EL17KJTF 3:b248dc1f3e8d 166 brightness = 0;
Kern_EL17KJTF 3:b248dc1f3e8d 167 }
Kern_EL17KJTF 3:b248dc1f3e8d 168 if (pad.check_event(Gamepad::A_PRESSED) == true) {
Kern_EL17KJTF 3:b248dc1f3e8d 169 brightness = 0.5;
Kern_EL17KJTF 3:b248dc1f3e8d 170 }
Kern_EL17KJTF 3:b248dc1f3e8d 171 lcd.setBrightness(brightness);
Kern_EL17KJTF 3:b248dc1f3e8d 172 lcd.printString("A/B = BackLite",0,2);
Kern_EL17KJTF 3:b248dc1f3e8d 173 }
Kern_EL17KJTF 3:b248dc1f3e8d 174
Kern_EL17KJTF 3:b248dc1f3e8d 175 void options_contrast() {
Kern_EL17KJTF 3:b248dc1f3e8d 176 contrast = pad.read_pot();
Kern_EL17KJTF 3:b248dc1f3e8d 177 lcd.setContrast(contrast);
Kern_EL17KJTF 3:b248dc1f3e8d 178 lcd.printString("Pot = Contrast",0,3);
Kern_EL17KJTF 3:b248dc1f3e8d 179 }
Kern_EL17KJTF 3:b248dc1f3e8d 180
Kern_EL17KJTF 3:b248dc1f3e8d 181 void options_volume() {
Kern_EL17KJTF 3:b248dc1f3e8d 182 if (pad.check_event(Gamepad::Y_PRESSED) == true) {
Kern_EL17KJTF 3:b248dc1f3e8d 183 volume = 0;
Kern_EL17KJTF 3:b248dc1f3e8d 184 }
Kern_EL17KJTF 3:b248dc1f3e8d 185 if (pad.check_event(Gamepad::X_PRESSED) == true) {
Kern_EL17KJTF 3:b248dc1f3e8d 186 volume = 1;
Kern_EL17KJTF 3:b248dc1f3e8d 187 pad.tone(2400, 0.2);
Kern_EL17KJTF 3:b248dc1f3e8d 188 wait_ms(200);
Kern_EL17KJTF 3:b248dc1f3e8d 189 pad.tone(2400, 0.2);
Kern_EL17KJTF 3:b248dc1f3e8d 190 wait_ms(200);
Kern_EL17KJTF 3:b248dc1f3e8d 191 pad.tone(2400, 0.2);
Kern_EL17KJTF 3:b248dc1f3e8d 192 }
Kern_EL17KJTF 3:b248dc1f3e8d 193 lcd.printString("X/Y = Volume",0,4);
Kern_EL17KJTF 3:b248dc1f3e8d 194 if (volume == 0) {
Kern_EL17KJTF 3:b248dc1f3e8d 195 lcd.printString("Off",36,5);
Kern_EL17KJTF 3:b248dc1f3e8d 196 } else {
Kern_EL17KJTF 3:b248dc1f3e8d 197 lcd.printString("On",36,5);
Kern_EL17KJTF 3:b248dc1f3e8d 198 }
Kern_EL17KJTF 3:b248dc1f3e8d 199
Kern_EL17KJTF 1:7a0917df015a 200 }