James Cummins / Mbed 2 deprecated el17jnc

Dependencies:   mbed

Committer:
JamesCummins
Date:
Sun Apr 21 13:20:12 2019 +0000
Revision:
25:b52aa23df120
Parent:
24:c6415cc74b17
Child:
26:0dc10374546f
Started trying to create SD files, and moved game mode functions into main.cpp to make classes more readable

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JamesCummins 22:4e305ff8a050 1 #include "OptionsEngine.h"
JamesCummins 22:4e305ff8a050 2
JamesCummins 22:4e305ff8a050 3 OptionsEngine::OptionsEngine(){
JamesCummins 22:4e305ff8a050 4 }
JamesCummins 22:4e305ff8a050 5
JamesCummins 22:4e305ff8a050 6 OptionsEngine::~OptionsEngine(){
JamesCummins 22:4e305ff8a050 7 }
JamesCummins 22:4e305ff8a050 8
JamesCummins 22:4e305ff8a050 9 void OptionsEngine::init(){
JamesCummins 22:4e305ff8a050 10 _state = BRIGHTNESS;
JamesCummins 22:4e305ff8a050 11 _brightness = 0.5;
JamesCummins 25:b52aa23df120 12 _ball_speed = 0.5;
JamesCummins 22:4e305ff8a050 13 }
JamesCummins 22:4e305ff8a050 14
JamesCummins 22:4e305ff8a050 15 void OptionsEngine::display_options(N5110 &lcd){
JamesCummins 22:4e305ff8a050 16 lcd.printString("Options menu", 6, 0);
JamesCummins 22:4e305ff8a050 17 lcd.printString("Brightness", 12, 2);
JamesCummins 22:4e305ff8a050 18 lcd.printString("Ball speed", 12, 3);
JamesCummins 22:4e305ff8a050 19 lcd.printString("High scores", 9, 4);
JamesCummins 22:4e305ff8a050 20 }
JamesCummins 22:4e305ff8a050 21
JamesCummins 22:4e305ff8a050 22 Option OptionsEngine::option_selection(Gamepad &gamepad, N5110 &lcd){
JamesCummins 22:4e305ff8a050 23 OptionSelection fsm[3] = {
JamesCummins 22:4e305ff8a050 24 {2,{HIGH_SCORES, BALL_SPEED, BRIGHTNESS}},
JamesCummins 22:4e305ff8a050 25 {3,{BRIGHTNESS, HIGH_SCORES, BALL_SPEED}},
JamesCummins 22:4e305ff8a050 26 {4,{BALL_SPEED, BRIGHTNESS, HIGH_SCORES}}
JamesCummins 22:4e305ff8a050 27 };
JamesCummins 22:4e305ff8a050 28 if(gamepad.get_direction() == N){ _next_state = 0; }
JamesCummins 22:4e305ff8a050 29 else if(gamepad.get_direction() == S){ _next_state = 1; }
JamesCummins 22:4e305ff8a050 30 else{ _next_state = 2; }
JamesCummins 22:4e305ff8a050 31 _state = fsm[_state].next_state[_next_state];
JamesCummins 22:4e305ff8a050 32 lcd.printChar('>', 0, fsm[_state].output);
JamesCummins 22:4e305ff8a050 33 lcd.printChar('<', 78, fsm[_state].output);
JamesCummins 22:4e305ff8a050 34 return _state;
JamesCummins 22:4e305ff8a050 35 }
JamesCummins 22:4e305ff8a050 36
JamesCummins 22:4e305ff8a050 37 void OptionsEngine::change_brightness(Gamepad &gamepad, N5110 &lcd){
JamesCummins 22:4e305ff8a050 38 while(!(gamepad.check_event(gamepad.A_PRESSED))){
JamesCummins 22:4e305ff8a050 39 lcd.clear();
JamesCummins 22:4e305ff8a050 40 lcd.printString("Brightness", 12, 0);
JamesCummins 22:4e305ff8a050 41 lcd.printString("Use L and R to", 0, 3);
JamesCummins 22:4e305ff8a050 42 lcd.printString("change", 24, 4);
JamesCummins 22:4e305ff8a050 43 lcd.printString("A = confirm", 9, 5);
JamesCummins 23:61fa82f76808 44 lcd.drawRect(10, 12, 63, 8, FILL_TRANSPARENT);
JamesCummins 22:4e305ff8a050 45 read_brightness_input(gamepad);
JamesCummins 22:4e305ff8a050 46 for(int i = 0; i < _brightness*10; i ++){
JamesCummins 23:61fa82f76808 47 lcd.drawRect(12+6*i, 14, 5, 4, FILL_BLACK);
JamesCummins 22:4e305ff8a050 48 }
JamesCummins 22:4e305ff8a050 49 lcd.setBrightness(_brightness);
JamesCummins 22:4e305ff8a050 50 lcd.refresh();
JamesCummins 22:4e305ff8a050 51 wait(0.2);
JamesCummins 22:4e305ff8a050 52 }
JamesCummins 22:4e305ff8a050 53 }
JamesCummins 22:4e305ff8a050 54
JamesCummins 22:4e305ff8a050 55 void OptionsEngine::read_brightness_input(Gamepad &gamepad){
JamesCummins 23:61fa82f76808 56 if(gamepad.check_event(gamepad.L_PRESSED)){ _brightness -= 0.1f; } //Use of f to explicitly convert to a float (to fit declaration type in header file).
JamesCummins 22:4e305ff8a050 57 if(gamepad.check_event(gamepad.R_PRESSED)){ _brightness += 0.1f; } //Otherwise 0.1 is implicitly converted to a double (giving warning messages).
JamesCummins 22:4e305ff8a050 58 if(_brightness < 0){ _brightness = 0; }
JamesCummins 22:4e305ff8a050 59 if(_brightness > 1){ _brightness = 1; }
JamesCummins 23:61fa82f76808 60 /*printf("Brightness = %f\n", _brightness);*/
JamesCummins 22:4e305ff8a050 61 }
JamesCummins 23:61fa82f76808 62
JamesCummins 23:61fa82f76808 63 void OptionsEngine::change_ball_speed(Gamepad &gamepad, N5110 &lcd, Ball &ball){
JamesCummins 23:61fa82f76808 64 while(!(gamepad.check_event(gamepad.A_PRESSED))){
JamesCummins 23:61fa82f76808 65 lcd.clear();
JamesCummins 23:61fa82f76808 66 lcd.printString("Ball Speed", 12, 0);
JamesCummins 23:61fa82f76808 67 lcd.printString("Use L and R to", 0, 3);
JamesCummins 23:61fa82f76808 68 lcd.printString("change", 24, 4);
JamesCummins 23:61fa82f76808 69 lcd.printString("A = confirm", 9, 5);
JamesCummins 23:61fa82f76808 70 lcd.drawRect(10, 12, 63, 8, FILL_TRANSPARENT);
JamesCummins 23:61fa82f76808 71 read_ball_speed_input(gamepad);
JamesCummins 23:61fa82f76808 72 for(int i = 0; i < _ball_speed; i ++){
JamesCummins 23:61fa82f76808 73 lcd.drawRect(12+6*i, 14, 5, 4, FILL_BLACK);
JamesCummins 23:61fa82f76808 74 }
JamesCummins 23:61fa82f76808 75 ball.set_ball_speed(_ball_speed);
JamesCummins 23:61fa82f76808 76 lcd.refresh();
JamesCummins 23:61fa82f76808 77 wait(0.2);
JamesCummins 23:61fa82f76808 78 }
JamesCummins 23:61fa82f76808 79 }
JamesCummins 23:61fa82f76808 80
JamesCummins 23:61fa82f76808 81 void OptionsEngine::read_ball_speed_input(Gamepad &gamepad){
JamesCummins 23:61fa82f76808 82 if(gamepad.check_event(gamepad.L_PRESSED)){ _ball_speed -= 1; }
JamesCummins 23:61fa82f76808 83 if(gamepad.check_event(gamepad.R_PRESSED)){ _ball_speed += 1; }
JamesCummins 23:61fa82f76808 84 if(_ball_speed < 0){ _ball_speed = 0; }
JamesCummins 23:61fa82f76808 85 if(_ball_speed > 10){ _ball_speed = 10; }
JamesCummins 24:c6415cc74b17 86 }
JamesCummins 24:c6415cc74b17 87
JamesCummins 24:c6415cc74b17 88 void OptionsEngine::view_high_scores(Gamepad &gamepad, N5110 &lcd, SDFileSystem &sd){
JamesCummins 24:c6415cc74b17 89 _leaderboard = CLASSIC_MODE;
JamesCummins 24:c6415cc74b17 90 while(!(gamepad.check_event(gamepad.A_PRESSED))){
JamesCummins 24:c6415cc74b17 91 if(gamepad.check_event(gamepad.R_PRESSED)){ _leaderboard = BRICKBREAKER_MODE; }
JamesCummins 24:c6415cc74b17 92 if(gamepad.check_event(gamepad.L_PRESSED)){ _leaderboard = CLASSIC_MODE; }
JamesCummins 24:c6415cc74b17 93 lcd.clear();
JamesCummins 24:c6415cc74b17 94 print_high_scores(lcd, sd);
JamesCummins 24:c6415cc74b17 95 lcd.refresh();
JamesCummins 24:c6415cc74b17 96 wait(0.2);
JamesCummins 24:c6415cc74b17 97 }
JamesCummins 24:c6415cc74b17 98 }
JamesCummins 24:c6415cc74b17 99
JamesCummins 24:c6415cc74b17 100 void OptionsEngine::print_high_scores(N5110 &lcd, SDFileSystem &sd){
JamesCummins 24:c6415cc74b17 101 if(_leaderboard == CLASSIC_MODE){
JamesCummins 24:c6415cc74b17 102 lcd.printString("Classic", 21, 0);
JamesCummins 24:c6415cc74b17 103 lcd.printString("1.", 0, 1);
JamesCummins 24:c6415cc74b17 104 lcd.printString("2.", 0, 2);
JamesCummins 24:c6415cc74b17 105 lcd.printString("3.", 0, 3); lcd.printString("R>", 72, 3);
JamesCummins 24:c6415cc74b17 106 lcd.printString("4.", 0, 4);
JamesCummins 24:c6415cc74b17 107 lcd.printString("5.", 0, 5);
JamesCummins 24:c6415cc74b17 108
JamesCummins 24:c6415cc74b17 109
JamesCummins 24:c6415cc74b17 110 }
JamesCummins 24:c6415cc74b17 111 if(_leaderboard == BRICKBREAKER_MODE){
JamesCummins 24:c6415cc74b17 112 lcd.printString("Brickbreak", 12, 0);
JamesCummins 24:c6415cc74b17 113 lcd.printString("1.", 0, 1);
JamesCummins 24:c6415cc74b17 114 lcd.printString("2.", 0, 2);
JamesCummins 24:c6415cc74b17 115 lcd.printString("3.", 0, 3); lcd.printString("<L", 72, 3);
JamesCummins 24:c6415cc74b17 116 lcd.printString("4.", 0, 4);
JamesCummins 24:c6415cc74b17 117 lcd.printString("5.", 0, 5);
JamesCummins 24:c6415cc74b17 118
JamesCummins 24:c6415cc74b17 119
JamesCummins 24:c6415cc74b17 120
JamesCummins 24:c6415cc74b17 121 }
JamesCummins 23:61fa82f76808 122 }