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-27
Revision:
15:03868ddf5bf3
Parent:
14:e20bf6569607
Child:
16:d70fd9ff28b9

File content as of revision 15:03868ddf5bf3:

#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 game_over(int score);
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();
            if (lives == 0) {
                game_over(basket.get_score());
            }
            
            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 game_over(int score)
{
    lcd.clear();
    lcd.printString("   GAME OVER  ",0,2);
    
    char buffer[14];
    int _score = score;
    int print_score;
    
    if ((score == 0)||(score <= 9)) {
        print_score = sprintf(buffer, "  Score: 000%d ", _score);
    } else if (score <= 99) {
        print_score = sprintf(buffer, "  Score: 00%2d ", _score);
    } else if (score <= 999 ) {
        print_score = sprintf(buffer, "  Score: 0%3d ", _score);
    } else {
        print_score = sprintf(buffer, "  Score: %4d ", _score);
    }   
    
    if (print_score <= 14) {
        lcd.printString(buffer,0,3);
    }
    lcd.refresh();
    wait(8.0);
}

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