Custom Game Controllers assembled in lab sessions and mounted with Nokia N5110 LCD display and a FRDM-K64F mbed plus various buttons, a joystick, potentiometer and piezo. Designed a game called 'Fruit Basket' to be played on the game controller where the player controls a basket and moves it catch objects that fall from random points along the top of the display to collect score.

Dependencies:   Basket Catch_Model Fruit Gamepad N5110 Objects mbed

Project_Submission.cpp

Committer:
Nathanj94
Date:
2017-04-28
Revision:
16:d70fd9ff28b9
Parent:
15:03868ddf5bf3
Child:
17:d0853ac51e38

File content as of revision 16:d70fd9ff28b9:

#include "mbed.h"
#include "Gamepad.h"
#include "N5110.h"
#include "Catch_Model.h"

#define BASKET_Y 41
#define BASKET_WIDTH 12
#define LIVES 5

//OBJECTS//
N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);

Gamepad pad;
Catch_Model catchm;
Objects objects;
Basket basket;

int objects_speed;
int lives;

//FUNCTION PROTOTYPES//
void init();
void render();
void welcome();
void instructions_general();
void instructions_buttons();
void set_brightness();
int set_speed();

//MAIN//
int main()
{
    int fps = 8;

    init();
    welcome();
    instructions_general();
    instructions_buttons();
    set_brightness();

    while(1) {

        set_speed();
        catchm.init(BASKET_Y,BASKET_WIDTH,set_speed(),LIVES);

        render();
        wait(1.0f/fps);

        do {
            catchm.input(pad);
            catchm.update(lcd, pad);

            catchm.check_a(lcd,pad);
            catchm.check_b(lcd,pad);

            lives = catchm.get_lives();
            
            render();
            wait(1.0f/fps);

        } while (lives > 0);
    }
}

//FUNCTIONS//
void init()
{
    // initialise LCD and Gamepad
    lcd.init();
    pad.init();
}

void render()
{
    // re-draw screen each loop
    lcd.clear();
    catchm.draw(lcd,pad);
    lcd.refresh();
}

void welcome()
{
    lcd.printString("FRUIT BASKET",0,2);
    lcd.printString("press start",0,3);
    lcd.refresh();

    while (pad.check_event(Gamepad::START_PRESSED) == false) {
        pad.leds_on();
        wait(0.1);
        pad.leds_off();
        wait(0.1);
    }
}

void instructions_general()
{
    lcd.clear();
    lcd.printString("Move the",0,0);
    lcd.printString("basket with",0,1);
    lcd.printString("L/R or the",0,2);
    lcd.printString("joystick to",0,3);
    lcd.printString("catch the",0,4);
    lcd.printString("fruit.",0,5);
    lcd.refresh();

    while (pad.check_event(Gamepad::START_PRESSED) == false) {
        pad.leds_on();
        wait(0.1);
        pad.leds_off();
        wait(0.1);
    }
}

void instructions_buttons()
{
    lcd.clear();
    lcd.printString("Press A for a",0,0);
    lcd.printString("second chance.",0,1);
    lcd.printString("Press B for an",0,2);
    lcd.printString("extra life.",0,3);
    lcd.printString("Available when",0,4);
    lcd.printString("you see the",0,5);
    lcd.drawLine(69,43,73,47,1);
    lcd.drawLine(73,47,77,39,1);
    lcd.refresh();

    while (pad.check_event(Gamepad::START_PRESSED) == false) {
        pad.leds_on();
        wait(0.1);
        pad.leds_off();
        wait(0.1);
    }
}

void set_brightness()
{
    lcd.clear();
    lcd.printString("Set Brightness",0,2);
    lcd.refresh();

    while (pad.check_event(Gamepad::START_PRESSED) == false) {
        lcd.setBrightness(pad.read_pot()*10);
        pad.leds(pad.read_pot());
    }
}

int set_speed()
{
    while (pad.check_event(Gamepad::START_PRESSED) == false) {
        lcd.clear();
        lcd.printString("Set Speed",0,2);

        if (pad.read_pot() > 0.9f) {
            objects_speed = 5;
            lcd.printString("High",0,3);
        } else if (pad.read_pot() > 0.6f) {
            objects_speed = 4;
            lcd.printString("Normal",0,3);
        } else if (pad.read_pot() > 0.3f) {
            objects_speed = 3;
            lcd.printString("Slow",0,3);
        } else {
            objects_speed = 2;
            lcd.printString("Very Slow",0,3);
        }

        lcd.refresh();
    }

    return objects_speed;
}