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-22
- Revision:
- 14:e20bf6569607
- Parent:
- 13:09a9ffd8eb60
- Child:
- 15:03868ddf5bf3
File content as of revision 14:e20bf6569607:
#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(); 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); game_over(); } } //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() { lcd.clear(); lcd.printString(" GAME OVER ",0,2); char buffer[14]; int score = basket.get_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()); 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; }