Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed FATFileSystem
Menu/Menu.cpp
- Committer:
- ellisbhastroud
- Date:
- 2019-03-29
- Revision:
- 3:a8960004d261
- Parent:
- 2:81cfa8310f55
- Child:
- 4:035448357749
File content as of revision 3:a8960004d261:
#include "Menu.h"
// constructor
Menu::Menu()
{
}
//deconstructor
Menu::~Menu()
{
}
//public methods
void Menu::init()
{
_cursor_pos = START; //cursor begins on start
}
//prints welcome screen
void Menu::print_welcome(N5110 &lcd)
{
lcd.clear();
lcd.printString("Welcome to",0,0);
lcd.printString("GAME",0,1);
lcd.printString("by",0,2);
lcd.printString("Ellis Blackford Stroud",0,3);
lcd.refresh();
wait(1);
lcd.clear();
lcd.printString("Use joystick",0,1);
lcd.printString("and START/BACK",0,2);
lcd.printString("to navigate menu !",0,3);
lcd.refresh();
wait(1);
}
//prints main menu screen
void Menu::print_menu(N5110 &lcd)
{
lcd.clear();
lcd.printString("Start Game",10,0);
lcd.printString("Highscores",10,2);
lcd.printString("Settings",10,4);
lcd.refresh();
}
//prints start screen and waits to start game
bool Menu::check_start(N5110 &lcd, Gamepad &pad)
{
lcd.clear();
lcd.printString("Press A ?",8,2);
lcd.printString("to start?",8,3);
lcd.refresh();
while(pad.check_event(Gamepad::A_PRESSED) == false) {
wait(0.2);
}
lcd.clear();
lcd.refresh();
printf("GAME STARTED");
return true;
}
//prints highscores screen
void Menu::print_highscores(N5110 &lcd)
{
lcd.clear();
lcd.printString("Highscores",0,2);
lcd.refresh();
}
//prints settings screen
void Menu::print_settings(N5110 &lcd)
{
lcd.clear();
lcd.printString("Settings",0,2);
lcd.refresh();
}
//changes menu screen using cursor position and returns true if begin start
bool Menu::menu_change(N5110 &lcd, Gamepad &pad)
{
int m = _cursor_pos;
switch(m) { //uses cursor position to select next screen
case 0:
//returns true if start game
{
bool start = check_start(lcd, pad);
return start;
}
case 1:
print_highscores(lcd);
return false;
case 2:
print_settings(lcd);
return false;
default: // default case
return false;
}
}
void Menu::menu_return(N5110 &lcd, Gamepad &pad)
{
while(pad.check_event(Gamepad::BACK_PRESSED) == false) {
}
print_menu(lcd);
}
//Uses joystick direction to select menu option
void Menu::menu_select(Gamepad &pad, N5110 &lcd)
{
while(pad.check_event(Gamepad::START_PRESSED) == false) { //loops until start pressed
int d = pad.get_direction();
MenuChoices cursor_pos = _cursor_pos;
switch(cursor_pos) {
//cursor on start
case 0:
draw_cursor(lcd);
switch(d) {
case 0: //joystick centered
_cursor_pos = START;
break;
case 1: //joystick up
_cursor_pos = SETTINGS;
break;
case 5: //joystick down
_cursor_pos = HIGHSCORES;
break;
}
break;
//cursor on highscores
case 1:
draw_cursor(lcd);
switch(d) {
case 0: //joystick centered
_cursor_pos = HIGHSCORES;
break;
case 1: //joystick up
_cursor_pos = START;
break;
case 5: //joystick down
_cursor_pos = SETTINGS;
break;
}
break;
//cursor on settings
case 2:
draw_cursor(lcd);
switch(d) {
case 0: //joystick centered
_cursor_pos = SETTINGS;
break;
case 1: //joystick up
_cursor_pos = HIGHSCORES;
break;
case 5: //joystick down
_cursor_pos = START;
break;
}
break;
}
wait(0.2);
}
}
//private methods
//draws cursor in necessary position
void Menu::draw_cursor(N5110 &lcd)
{
int cursor_pos = _cursor_pos;
switch(cursor_pos) {
case 0: //cursor on start
lcd.drawRect(0,16,6,8,FILL_WHITE);
lcd.drawRect(0,32,6,8,FILL_WHITE);
lcd.drawRect(0,0,6,8,FILL_TRANSPARENT);
break;
case 1: //cursor on highscores
lcd.drawRect(0,0,6,8,FILL_WHITE);
lcd.drawRect(0,32,6,8,FILL_WHITE);
lcd.drawRect(0,16,6,8,FILL_TRANSPARENT);
break;
case 2: //cursor on settings
lcd.drawRect(0,0,6,8,FILL_WHITE);
lcd.drawRect(0,16,6,8,FILL_WHITE);
lcd.drawRect(0,32,6,8,FILL_TRANSPARENT);
break;
}
lcd.refresh();
}