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.
Options_Engine/OptionsEngine.cpp@26:0dc10374546f, 2019-04-23 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |