Kern Fowler / Mbed 2 deprecated Donkey_Kong_Game

Dependencies:   mbed

main.cpp

Committer:
Kern_EL17KJTF
Date:
2019-05-05
Revision:
3:b248dc1f3e8d
Parent:
2:6baf849b0270
Child:
4:59175720d8ee

File content as of revision 3:b248dc1f3e8d:

/*
ELEC2645 Embedded Systems Project
School of Electronic & Electrical Engineering
University of Leeds

Name: Kern Fowler
Username: el17kjtf
Student ID Number: 201116686
Date: 19/02/2019
Version: 1.2

*/
#include "main.h"


int fps = 24;
int direction;
int menu_option_pos = 0;
int arrow_pos = 0;
float brightness = 0.5;
float contrast = 0.430;
int volume = 1;

int main() {
    init();  // initialise peripherals
    welcome();  // display welcome message
 
    while(1) {  // infinite loop
    arrow_location();
    print_menu();  // this re-prints the menu at the start of every loop
    arrow_select();
    wait_ms(1.0f/fps);
    }
}
 
void init() {
    // initialise LCD
    lcd.init();
    // initialise Gamepad
    pad.init();
    wait(2.5);
}

void arrow_location() {
    direction  = pad.get_direction();
    if (direction == N) {
        menu_option_pos = menu_option_pos - 1;
        // printf("North Pressed");
        wait_ms(250);
    }
    if (direction == S) {
        menu_option_pos = menu_option_pos + 1;
        // printf("South Pressed");
        wait_ms(250);
    }
    if (menu_option_pos > 3) {
        menu_option_pos = 0;
    }
    if (menu_option_pos < 0) {
        menu_option_pos = 3;
    }
    arrow_pos = 16 + (menu_option_pos * 8);
    // printf("Option Num = %d", menu_option_pos)
}

void arrow_select() {
    if (pad.check_event(Gamepad::A_PRESSED) == true) {
        if (menu_option_pos == 0) {
            // printf("GameEngine");
            game_engine_run();
        }
        if (menu_option_pos == 1) {
            // printf("Controls");
            controls_run();
        }
        if (menu_option_pos == 2) {
            // printf("Instructions");
            instructions_run();
        }
        if (menu_option_pos == 3) {
            // printf("Options");
            options_run();
        }
    }
}


void print_menu() {
    lcd.clear();
    lcd.printString("Main Menu",19,0);
    lcd.printString("Start Game",8,2);
    lcd.printString("Controls",8,3);
    lcd.printString("Instructions",8,4);
    lcd.printString("Options",8,5);
    lcd.drawSprite(0,arrow_pos,7,7,(int *)menu_arrow);
    lcd.refresh();
}
 
void welcome() {
    lcd.clear();
    lcd.drawSprite(24,0,36,34,(int *)menu_dk_face); 
    lcd.printString("  Donkey Kong",0,5);
    lcd.refresh();
    wait(1.0); //edit back to longer
    lcd.clear();
    lcd.printString("  Created",0,0);
    lcd.printString("  By",0,1);
    lcd.printString("  Kern Fowler",0,3);
    lcd.printString("  201116686",0,4);
    lcd.refresh();
    wait(1.0);
}

void game_engine_run() {
    wait_ms(250);

    while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
        //printf("Game State");
        lcd.clear();
        lcd.printString("Game",0,0);
        lcd.refresh();
        wait_ms(1.0f/fps);
    }
}

void controls_run() {
    wait_ms(250);

    while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
        //printf("Control State");
        lcd.clear();
        lcd.printString("Controls",19,0);
        lcd.refresh();
        wait_ms(1.0f/fps);
    }
}

void instructions_run() {
    wait_ms(250);

    while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
        //printf("Instructions State");
        lcd.clear();
        lcd.printString("Instructions",7,0);
        lcd.refresh();
        wait_ms(1.0f/fps);
    }
}

void options_run() {
    wait_ms(250);
    while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
        //printf("Options State");
        lcd.clear();
        lcd.printString("Options",21,0);
        options_brightness();
        options_contrast();
        options_volume();
        lcd.refresh();
        wait_ms(1.0f/fps);
    }
}

void options_brightness() {
    if (pad.check_event(Gamepad::B_PRESSED) == true) {
        brightness = 0;
    }
    if (pad.check_event(Gamepad::A_PRESSED) == true) {
        brightness = 0.5;
    }
    lcd.setBrightness(brightness);
    lcd.printString("A/B = BackLite",0,2);
}

void options_contrast() {
    contrast = pad.read_pot();
    lcd.setContrast(contrast);
    lcd.printString("Pot = Contrast",0,3);
}

void options_volume() {
    if (pad.check_event(Gamepad::Y_PRESSED) == true) {
        volume = 0;
    }
    if (pad.check_event(Gamepad::X_PRESSED) == true) {
        volume = 1;
        pad.tone(2400, 0.2);
        wait_ms(200);
        pad.tone(2400, 0.2);
        wait_ms(200);
        pad.tone(2400, 0.2);
    }
    lcd.printString("X/Y = Volume",0,4);
    if (volume == 0) {
        lcd.printString("Off",36,5);
    } else {
        lcd.printString("On",36,5);
    }
    
}