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-20
Revision:
13:09a9ffd8eb60
Parent:
12:d87c9ae89472
Child:
14:e20bf6569607

File content as of revision 13:09a9ffd8eb60:

#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;

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; 
    
    while(1) {

        init();
        
        welcome();
        instructions_general();
        instructions_buttons();
        
        set_brightness();
        set_speed();
        catchm.init(BASKET_Y,BASKET_WIDTH,set_speed(),LIVES);
        
        render(); 
        wait(1.0f/fps);  
        //int lives;

        do {
            catchm.input(pad);
            catchm.update(lcd, pad);
            
            catchm.check_a(lcd,pad);
            catchm.check_b(lcd,pad);
            catchm.check_x(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);
    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());
        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;
}