James Cummins / Mbed 2 deprecated el17jnc

Dependencies:   mbed

Committer:
JamesCummins
Date:
Mon May 06 21:44:49 2019 +0000
Revision:
37:de1f584bce71
Parent:
36:9f7463a65fe0
Child:
38:a85bc227b907
Documentation written out with the exception of example code

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 26:0dc10374546f 12 _ball_speed = 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 26:0dc10374546f 88 void OptionsEngine::view_high_scores(Gamepad &gamepad, N5110 &lcd){
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 26:0dc10374546f 94 print_high_scores(lcd);
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 35:138ad0faa42b 100 void OptionsEngine::read_classic_high_scores(){
JamesCummins 35:138ad0faa42b 101 FILE *fp;
JamesCummins 35:138ad0faa42b 102 fp = fopen("/sd/classichighscores.txt", "r");
JamesCummins 35:138ad0faa42b 103
JamesCummins 35:138ad0faa42b 104 if(fp == NULL){
JamesCummins 26:0dc10374546f 105 printf("Error: Could not open file");
JamesCummins 35:138ad0faa42b 106 } else {
JamesCummins 35:138ad0faa42b 107 int i = 0;
JamesCummins 35:138ad0faa42b 108 rewind(fp);
JamesCummins 35:138ad0faa42b 109
JamesCummins 35:138ad0faa42b 110 while(fscanf(fp, "%d,%f", &_classic_index[i], &_classic_values[i]) != EOF){
JamesCummins 35:138ad0faa42b 111 i++;
JamesCummins 35:138ad0faa42b 112 }
JamesCummins 35:138ad0faa42b 113 fclose(fp);
JamesCummins 26:0dc10374546f 114 }
JamesCummins 35:138ad0faa42b 115 }
JamesCummins 35:138ad0faa42b 116
JamesCummins 35:138ad0faa42b 117 void OptionsEngine::read_bb_high_scores(){
JamesCummins 35:138ad0faa42b 118 FILE *fp;
JamesCummins 35:138ad0faa42b 119 fp = fopen("/sd/bbhighscores.txt", "r");
JamesCummins 35:138ad0faa42b 120
JamesCummins 35:138ad0faa42b 121 if(fp == NULL){
JamesCummins 35:138ad0faa42b 122 printf("Error: Could not open file");
JamesCummins 35:138ad0faa42b 123 } else {
JamesCummins 35:138ad0faa42b 124 int i = 0;
JamesCummins 35:138ad0faa42b 125 rewind(fp);
JamesCummins 35:138ad0faa42b 126
JamesCummins 35:138ad0faa42b 127 while(fscanf(fp, "%d,%f", &_bb_index[i], &_bb_values[i]) != EOF){
JamesCummins 35:138ad0faa42b 128 i++;
JamesCummins 35:138ad0faa42b 129 }
JamesCummins 35:138ad0faa42b 130 fclose(fp);
JamesCummins 26:0dc10374546f 131 }
JamesCummins 26:0dc10374546f 132 }
JamesCummins 26:0dc10374546f 133
JamesCummins 26:0dc10374546f 134 void OptionsEngine::print_high_scores(N5110 &lcd){
JamesCummins 24:c6415cc74b17 135 if(_leaderboard == CLASSIC_MODE){
JamesCummins 35:138ad0faa42b 136 read_classic_high_scores();
JamesCummins 24:c6415cc74b17 137 lcd.printString("Classic", 21, 0);
JamesCummins 35:138ad0faa42b 138 lcd.printString("R>", 72, 3);
JamesCummins 35:138ad0faa42b 139 char buffer[14];
JamesCummins 35:138ad0faa42b 140 for(int i = 0; i < 5; i++){
JamesCummins 36:9f7463a65fe0 141 sprintf(buffer, "%d. %.0fs", _classic_index[i], _classic_values[i]);
JamesCummins 35:138ad0faa42b 142 lcd.printString(buffer, 0, i + 1);
JamesCummins 35:138ad0faa42b 143 }
JamesCummins 24:c6415cc74b17 144 }
JamesCummins 24:c6415cc74b17 145 if(_leaderboard == BRICKBREAKER_MODE){
JamesCummins 26:0dc10374546f 146 read_bb_high_scores();
JamesCummins 24:c6415cc74b17 147 lcd.printString("Brickbreak", 12, 0);
JamesCummins 35:138ad0faa42b 148 lcd.printString("<L", 72, 3);
JamesCummins 35:138ad0faa42b 149 char buffer[14];
JamesCummins 35:138ad0faa42b 150 for(int i = 0; i < 5; i++){
JamesCummins 35:138ad0faa42b 151 sprintf(buffer, "%d. %.0f", _bb_index[i], _bb_values[i]);
JamesCummins 35:138ad0faa42b 152 lcd.printString(buffer, 0, i + 1);
JamesCummins 26:0dc10374546f 153 }
JamesCummins 24:c6415cc74b17 154 }
JamesCummins 23:61fa82f76808 155 }