James Cummins / Mbed 2 deprecated el17jnc

Dependencies:   mbed

Committer:
JamesCummins
Date:
Tue Apr 23 23:55:05 2019 +0000
Revision:
26:0dc10374546f
Parent:
25:b52aa23df120
Child:
35:138ad0faa42b
Big array for classic mode's map [200x500] approx 55% complete

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JamesCummins 22:4e305ff8a050 1 #include "OptionsEngine.h"
JamesCummins 22:4e305ff8a050 2
JamesCummins 26:0dc10374546f 3 #include <fstream>
JamesCummins 26:0dc10374546f 4 #include <iostream>
JamesCummins 26:0dc10374546f 5 #include <sstream>
JamesCummins 26:0dc10374546f 6 #include <functional>
JamesCummins 26:0dc10374546f 7
JamesCummins 22:4e305ff8a050 8 OptionsEngine::OptionsEngine(){
JamesCummins 22:4e305ff8a050 9 }
JamesCummins 22:4e305ff8a050 10
JamesCummins 22:4e305ff8a050 11 OptionsEngine::~OptionsEngine(){
JamesCummins 22:4e305ff8a050 12 }
JamesCummins 22:4e305ff8a050 13
JamesCummins 22:4e305ff8a050 14 void OptionsEngine::init(){
JamesCummins 22:4e305ff8a050 15 _state = BRIGHTNESS;
JamesCummins 22:4e305ff8a050 16 _brightness = 0.5;
JamesCummins 26:0dc10374546f 17 _ball_speed = 5;
JamesCummins 22:4e305ff8a050 18 }
JamesCummins 22:4e305ff8a050 19
JamesCummins 22:4e305ff8a050 20 void OptionsEngine::display_options(N5110 &lcd){
JamesCummins 22:4e305ff8a050 21 lcd.printString("Options menu", 6, 0);
JamesCummins 22:4e305ff8a050 22 lcd.printString("Brightness", 12, 2);
JamesCummins 22:4e305ff8a050 23 lcd.printString("Ball speed", 12, 3);
JamesCummins 22:4e305ff8a050 24 lcd.printString("High scores", 9, 4);
JamesCummins 22:4e305ff8a050 25 }
JamesCummins 22:4e305ff8a050 26
JamesCummins 22:4e305ff8a050 27 Option OptionsEngine::option_selection(Gamepad &gamepad, N5110 &lcd){
JamesCummins 22:4e305ff8a050 28 OptionSelection fsm[3] = {
JamesCummins 22:4e305ff8a050 29 {2,{HIGH_SCORES, BALL_SPEED, BRIGHTNESS}},
JamesCummins 22:4e305ff8a050 30 {3,{BRIGHTNESS, HIGH_SCORES, BALL_SPEED}},
JamesCummins 22:4e305ff8a050 31 {4,{BALL_SPEED, BRIGHTNESS, HIGH_SCORES}}
JamesCummins 22:4e305ff8a050 32 };
JamesCummins 22:4e305ff8a050 33 if(gamepad.get_direction() == N){ _next_state = 0; }
JamesCummins 22:4e305ff8a050 34 else if(gamepad.get_direction() == S){ _next_state = 1; }
JamesCummins 22:4e305ff8a050 35 else{ _next_state = 2; }
JamesCummins 22:4e305ff8a050 36 _state = fsm[_state].next_state[_next_state];
JamesCummins 22:4e305ff8a050 37 lcd.printChar('>', 0, fsm[_state].output);
JamesCummins 22:4e305ff8a050 38 lcd.printChar('<', 78, fsm[_state].output);
JamesCummins 22:4e305ff8a050 39 return _state;
JamesCummins 22:4e305ff8a050 40 }
JamesCummins 22:4e305ff8a050 41
JamesCummins 22:4e305ff8a050 42 void OptionsEngine::change_brightness(Gamepad &gamepad, N5110 &lcd){
JamesCummins 22:4e305ff8a050 43 while(!(gamepad.check_event(gamepad.A_PRESSED))){
JamesCummins 22:4e305ff8a050 44 lcd.clear();
JamesCummins 22:4e305ff8a050 45 lcd.printString("Brightness", 12, 0);
JamesCummins 22:4e305ff8a050 46 lcd.printString("Use L and R to", 0, 3);
JamesCummins 22:4e305ff8a050 47 lcd.printString("change", 24, 4);
JamesCummins 22:4e305ff8a050 48 lcd.printString("A = confirm", 9, 5);
JamesCummins 23:61fa82f76808 49 lcd.drawRect(10, 12, 63, 8, FILL_TRANSPARENT);
JamesCummins 22:4e305ff8a050 50 read_brightness_input(gamepad);
JamesCummins 22:4e305ff8a050 51 for(int i = 0; i < _brightness*10; i ++){
JamesCummins 23:61fa82f76808 52 lcd.drawRect(12+6*i, 14, 5, 4, FILL_BLACK);
JamesCummins 22:4e305ff8a050 53 }
JamesCummins 22:4e305ff8a050 54 lcd.setBrightness(_brightness);
JamesCummins 22:4e305ff8a050 55 lcd.refresh();
JamesCummins 22:4e305ff8a050 56 wait(0.2);
JamesCummins 22:4e305ff8a050 57 }
JamesCummins 22:4e305ff8a050 58 }
JamesCummins 22:4e305ff8a050 59
JamesCummins 22:4e305ff8a050 60 void OptionsEngine::read_brightness_input(Gamepad &gamepad){
JamesCummins 23:61fa82f76808 61 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 62 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 63 if(_brightness < 0){ _brightness = 0; }
JamesCummins 22:4e305ff8a050 64 if(_brightness > 1){ _brightness = 1; }
JamesCummins 23:61fa82f76808 65 /*printf("Brightness = %f\n", _brightness);*/
JamesCummins 22:4e305ff8a050 66 }
JamesCummins 23:61fa82f76808 67
JamesCummins 23:61fa82f76808 68 void OptionsEngine::change_ball_speed(Gamepad &gamepad, N5110 &lcd, Ball &ball){
JamesCummins 23:61fa82f76808 69 while(!(gamepad.check_event(gamepad.A_PRESSED))){
JamesCummins 23:61fa82f76808 70 lcd.clear();
JamesCummins 23:61fa82f76808 71 lcd.printString("Ball Speed", 12, 0);
JamesCummins 23:61fa82f76808 72 lcd.printString("Use L and R to", 0, 3);
JamesCummins 23:61fa82f76808 73 lcd.printString("change", 24, 4);
JamesCummins 23:61fa82f76808 74 lcd.printString("A = confirm", 9, 5);
JamesCummins 23:61fa82f76808 75 lcd.drawRect(10, 12, 63, 8, FILL_TRANSPARENT);
JamesCummins 23:61fa82f76808 76 read_ball_speed_input(gamepad);
JamesCummins 23:61fa82f76808 77 for(int i = 0; i < _ball_speed; i ++){
JamesCummins 23:61fa82f76808 78 lcd.drawRect(12+6*i, 14, 5, 4, FILL_BLACK);
JamesCummins 23:61fa82f76808 79 }
JamesCummins 23:61fa82f76808 80 ball.set_ball_speed(_ball_speed);
JamesCummins 23:61fa82f76808 81 lcd.refresh();
JamesCummins 23:61fa82f76808 82 wait(0.2);
JamesCummins 23:61fa82f76808 83 }
JamesCummins 23:61fa82f76808 84 }
JamesCummins 23:61fa82f76808 85
JamesCummins 23:61fa82f76808 86 void OptionsEngine::read_ball_speed_input(Gamepad &gamepad){
JamesCummins 23:61fa82f76808 87 if(gamepad.check_event(gamepad.L_PRESSED)){ _ball_speed -= 1; }
JamesCummins 23:61fa82f76808 88 if(gamepad.check_event(gamepad.R_PRESSED)){ _ball_speed += 1; }
JamesCummins 23:61fa82f76808 89 if(_ball_speed < 0){ _ball_speed = 0; }
JamesCummins 23:61fa82f76808 90 if(_ball_speed > 10){ _ball_speed = 10; }
JamesCummins 24:c6415cc74b17 91 }
JamesCummins 24:c6415cc74b17 92
JamesCummins 26:0dc10374546f 93 void OptionsEngine::view_high_scores(Gamepad &gamepad, N5110 &lcd){
JamesCummins 24:c6415cc74b17 94 _leaderboard = CLASSIC_MODE;
JamesCummins 24:c6415cc74b17 95 while(!(gamepad.check_event(gamepad.A_PRESSED))){
JamesCummins 24:c6415cc74b17 96 if(gamepad.check_event(gamepad.R_PRESSED)){ _leaderboard = BRICKBREAKER_MODE; }
JamesCummins 24:c6415cc74b17 97 if(gamepad.check_event(gamepad.L_PRESSED)){ _leaderboard = CLASSIC_MODE; }
JamesCummins 24:c6415cc74b17 98 lcd.clear();
JamesCummins 26:0dc10374546f 99 print_high_scores(lcd);
JamesCummins 24:c6415cc74b17 100 lcd.refresh();
JamesCummins 24:c6415cc74b17 101 wait(0.2);
JamesCummins 24:c6415cc74b17 102 }
JamesCummins 24:c6415cc74b17 103 }
JamesCummins 24:c6415cc74b17 104
JamesCummins 26:0dc10374546f 105 void OptionsEngine::read_bb_high_scores(){
JamesCummins 26:0dc10374546f 106 std::ifstream file;
JamesCummins 26:0dc10374546f 107 file.open("/sd/bbhighscores.txt");
JamesCummins 26:0dc10374546f 108 if(!(file.is_open())){
JamesCummins 26:0dc10374546f 109 printf("Error: Could not open file");
JamesCummins 26:0dc10374546f 110 }
JamesCummins 26:0dc10374546f 111 std::string nth_score;
JamesCummins 26:0dc10374546f 112 for(int n = 0; n < 5; n++){
JamesCummins 26:0dc10374546f 113 std::getline(file, nth_score);
JamesCummins 26:0dc10374546f 114 std::istringstream ipstream(nth_score);
JamesCummins 26:0dc10374546f 115 ipstream >> _bbarray[n];
JamesCummins 26:0dc10374546f 116 }
JamesCummins 26:0dc10374546f 117 }
JamesCummins 26:0dc10374546f 118
JamesCummins 26:0dc10374546f 119 void OptionsEngine::print_high_scores(N5110 &lcd){
JamesCummins 24:c6415cc74b17 120 if(_leaderboard == CLASSIC_MODE){
JamesCummins 24:c6415cc74b17 121 lcd.printString("Classic", 21, 0);
JamesCummins 24:c6415cc74b17 122 lcd.printString("1.", 0, 1);
JamesCummins 24:c6415cc74b17 123 lcd.printString("2.", 0, 2);
JamesCummins 24:c6415cc74b17 124 lcd.printString("3.", 0, 3); lcd.printString("R>", 72, 3);
JamesCummins 24:c6415cc74b17 125 lcd.printString("4.", 0, 4);
JamesCummins 24:c6415cc74b17 126 lcd.printString("5.", 0, 5);
JamesCummins 24:c6415cc74b17 127
JamesCummins 24:c6415cc74b17 128
JamesCummins 24:c6415cc74b17 129 }
JamesCummins 24:c6415cc74b17 130 if(_leaderboard == BRICKBREAKER_MODE){
JamesCummins 26:0dc10374546f 131 read_bb_high_scores();
JamesCummins 24:c6415cc74b17 132 lcd.printString("Brickbreak", 12, 0);
JamesCummins 26:0dc10374546f 133 for (int i = 1; i < 6; i++){
JamesCummins 26:0dc10374546f 134 char buffer[6];
JamesCummins 26:0dc10374546f 135 sprintf(buffer, "%1d. %2d", i, _bbarray[i-1]);
JamesCummins 26:0dc10374546f 136 lcd.printString(buffer, 0, i);
JamesCummins 26:0dc10374546f 137 }
JamesCummins 26:0dc10374546f 138 lcd.printString("<L", 72, 3);
JamesCummins 24:c6415cc74b17 139 }
JamesCummins 23:61fa82f76808 140 }