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
Menus/Menus.cpp@16:a2c945279b79, 2019-04-24 (annotated)
- Committer:
- el17mcd
- Date:
- Wed Apr 24 13:44:12 2019 +0000
- Revision:
- 16:a2c945279b79
- Parent:
- 15:fa5282fcd134
- Child:
- 17:cb39d9fa08dc
! Player now receives score at the end of the game. leaderboard added in the menus.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el17mcd | 15:fa5282fcd134 | 1 | /* Menus.cpp |
el17mcd | 15:fa5282fcd134 | 2 | Governs all the Menus |
el17mcd | 15:fa5282fcd134 | 3 | and outside-of-game articles. |
el17mcd | 15:fa5282fcd134 | 4 | 13.4.19 |
el17mcd | 15:fa5282fcd134 | 5 | */ |
el17mcd | 15:fa5282fcd134 | 6 | #include "Menus.h" |
el17mcd | 15:fa5282fcd134 | 7 | |
el17mcd | 15:fa5282fcd134 | 8 | Menus::Menus() |
el17mcd | 15:fa5282fcd134 | 9 | { |
el17mcd | 16:a2c945279b79 | 10 | _health = 6; |
el17mcd | 15:fa5282fcd134 | 11 | _mute = false; |
el17mcd | 16:a2c945279b79 | 12 | _contrast = 0.4; |
el17mcd | 16:a2c945279b79 | 13 | _brightness = 1.0; |
el17mcd | 15:fa5282fcd134 | 14 | } |
el17mcd | 15:fa5282fcd134 | 15 | |
el17mcd | 15:fa5282fcd134 | 16 | Menus::~Menus() |
el17mcd | 15:fa5282fcd134 | 17 | { |
el17mcd | 15:fa5282fcd134 | 18 | |
el17mcd | 15:fa5282fcd134 | 19 | } |
el17mcd | 15:fa5282fcd134 | 20 | |
el17mcd | 15:fa5282fcd134 | 21 | void Menus::start_up_screen(Graphics &graphics, N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 22 | { |
el17mcd | 15:fa5282fcd134 | 23 | while(pad.check_event(Gamepad::START_PRESSED) == false) { |
el17mcd | 16:a2c945279b79 | 24 | _read_inputs(pad); |
el17mcd | 15:fa5282fcd134 | 25 | lcd.clear(); |
el17mcd | 15:fa5282fcd134 | 26 | lcd.printString(" TANKS! ",0,1); |
el17mcd | 15:fa5282fcd134 | 27 | lcd.printString(" Press Start ",0,3); |
el17mcd | 15:fa5282fcd134 | 28 | _start_up_visuals(graphics, lcd, pad); |
el17mcd | 15:fa5282fcd134 | 29 | lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 30 | lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 31 | lcd.refresh(); |
el17mcd | 15:fa5282fcd134 | 32 | } |
el17mcd | 15:fa5282fcd134 | 33 | } |
el17mcd | 15:fa5282fcd134 | 34 | |
el17mcd | 16:a2c945279b79 | 35 | void Menus::main_menu(Graphics &graphics, N5110 &lcd, Gamepad &pad, Scores &scores) |
el17mcd | 15:fa5282fcd134 | 36 | { |
el17mcd | 15:fa5282fcd134 | 37 | while(pad.check_event(Gamepad::Y_PRESSED) == false) { |
el17mcd | 16:a2c945279b79 | 38 | |
el17mcd | 15:fa5282fcd134 | 39 | pad.leds_off(); |
el17mcd | 16:a2c945279b79 | 40 | pad.check_event(Gamepad::BACK_PRESSED); |
el17mcd | 15:fa5282fcd134 | 41 | lcd.clear(); |
el17mcd | 15:fa5282fcd134 | 42 | if (pad.check_event(Gamepad::X_PRESSED) == true) { _controls(lcd, pad); } |
el17mcd | 16:a2c945279b79 | 43 | else if (pad.check_event(Gamepad::A_PRESSED) == true) { _settings(lcd, pad); } |
el17mcd | 16:a2c945279b79 | 44 | else if (pad.check_event(Gamepad::B_PRESSED) == true) { _scores(lcd, pad, scores); } |
el17mcd | 15:fa5282fcd134 | 45 | lcd.printString(" (Y) Play",0,1); |
el17mcd | 15:fa5282fcd134 | 46 | lcd.printString(" (X) Controls",0,2); |
el17mcd | 16:a2c945279b79 | 47 | lcd.printString(" (A) Settings",0,3); |
el17mcd | 16:a2c945279b79 | 48 | lcd.printString(" (B) Scores",0,4); |
el17mcd | 15:fa5282fcd134 | 49 | lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 50 | lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 51 | lcd.refresh(); |
el17mcd | 16:a2c945279b79 | 52 | wait_ms(1000/60); |
el17mcd | 15:fa5282fcd134 | 53 | } |
el17mcd | 15:fa5282fcd134 | 54 | } |
el17mcd | 15:fa5282fcd134 | 55 | |
el17mcd | 15:fa5282fcd134 | 56 | void Menus::_start_up_visuals(Graphics &graphics, N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 57 | { |
el17mcd | 15:fa5282fcd134 | 58 | if (_counter >= 0) { |
el17mcd | 15:fa5282fcd134 | 59 | graphics.start_up(1, pad); |
el17mcd | 15:fa5282fcd134 | 60 | graphics.draw_tank_l(10, 5, lcd); |
el17mcd | 15:fa5282fcd134 | 61 | graphics.draw_turret_l(10, 5, 10, lcd); |
el17mcd | 15:fa5282fcd134 | 62 | graphics.draw_tank_r(64, 5, lcd); |
el17mcd | 15:fa5282fcd134 | 63 | graphics.draw_turret_r(64, 5, 180, lcd); |
el17mcd | 15:fa5282fcd134 | 64 | } else { |
el17mcd | 15:fa5282fcd134 | 65 | graphics.start_up(0, pad); |
el17mcd | 15:fa5282fcd134 | 66 | graphics.draw_tank_l(10, 5, lcd); |
el17mcd | 15:fa5282fcd134 | 67 | graphics.draw_turret_l(10, 5, 180, lcd); |
el17mcd | 15:fa5282fcd134 | 68 | graphics.draw_tank_r(64, 5, lcd); |
el17mcd | 15:fa5282fcd134 | 69 | graphics.draw_turret_r(64, 5, 340, lcd); |
el17mcd | 15:fa5282fcd134 | 70 | } |
el17mcd | 15:fa5282fcd134 | 71 | if (_counter >= 199) { _counter = -200; } |
el17mcd | 15:fa5282fcd134 | 72 | _counter++; |
el17mcd | 15:fa5282fcd134 | 73 | } |
el17mcd | 15:fa5282fcd134 | 74 | |
el17mcd | 15:fa5282fcd134 | 75 | void Menus::_read_inputs(Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 76 | { |
el17mcd | 15:fa5282fcd134 | 77 | pad.check_event(Gamepad::Y_PRESSED); |
el17mcd | 15:fa5282fcd134 | 78 | pad.check_event(Gamepad::X_PRESSED); |
el17mcd | 15:fa5282fcd134 | 79 | pad.check_event(Gamepad::A_PRESSED); |
el17mcd | 15:fa5282fcd134 | 80 | pad.check_event(Gamepad::B_PRESSED); |
el17mcd | 15:fa5282fcd134 | 81 | } |
el17mcd | 15:fa5282fcd134 | 82 | |
el17mcd | 15:fa5282fcd134 | 83 | void Menus::_controls(N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 84 | { |
el17mcd | 15:fa5282fcd134 | 85 | while(pad.check_event(Gamepad::BACK_PRESSED) == false) { |
el17mcd | 16:a2c945279b79 | 86 | |
el17mcd | 15:fa5282fcd134 | 87 | _read_inputs(pad); |
el17mcd | 15:fa5282fcd134 | 88 | lcd.clear(); |
el17mcd | 15:fa5282fcd134 | 89 | lcd.printString(" Stick: Aim",0,1); |
el17mcd | 15:fa5282fcd134 | 90 | lcd.printString(" A : Fire",0,2); |
el17mcd | 15:fa5282fcd134 | 91 | lcd.printString(" L/R : Move",0,3); |
el17mcd | 15:fa5282fcd134 | 92 | lcd.printString(" Pot : Power",0,4); |
el17mcd | 15:fa5282fcd134 | 93 | lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 94 | lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 95 | lcd.refresh(); |
el17mcd | 16:a2c945279b79 | 96 | wait_ms(1000/60); |
el17mcd | 15:fa5282fcd134 | 97 | } |
el17mcd | 15:fa5282fcd134 | 98 | } |
el17mcd | 15:fa5282fcd134 | 99 | |
el17mcd | 15:fa5282fcd134 | 100 | void Menus::_settings(N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 101 | { |
el17mcd | 15:fa5282fcd134 | 102 | while(pad.check_event(Gamepad::BACK_PRESSED) == false) { |
el17mcd | 16:a2c945279b79 | 103 | |
el17mcd | 15:fa5282fcd134 | 104 | lcd.clear(); |
el17mcd | 16:a2c945279b79 | 105 | _mute_brightness_lives(lcd, pad); |
el17mcd | 15:fa5282fcd134 | 106 | _read_inputs(pad); |
el17mcd | 16:a2c945279b79 | 107 | lcd.printString("(O) Health:",4,1); |
el17mcd | 16:a2c945279b79 | 108 | lcd.printString("(A) Mute:",4,2); |
el17mcd | 16:a2c945279b79 | 109 | lcd.printString("(B) Brightness",4,3); |
el17mcd | 16:a2c945279b79 | 110 | lcd.printString("tune with pot",4,4); |
el17mcd | 15:fa5282fcd134 | 111 | lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 112 | lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 113 | lcd.refresh(); |
el17mcd | 16:a2c945279b79 | 114 | wait_ms(1000/60); |
el17mcd | 15:fa5282fcd134 | 115 | } |
el17mcd | 15:fa5282fcd134 | 116 | } |
el17mcd | 15:fa5282fcd134 | 117 | |
el17mcd | 16:a2c945279b79 | 118 | void Menus::_mute_brightness_lives(N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 119 | { |
el17mcd | 16:a2c945279b79 | 120 | _counter--; |
el17mcd | 16:a2c945279b79 | 121 | if (_counter < 0) { // counter stops multiple consecutive button clicks |
el17mcd | 16:a2c945279b79 | 122 | _counter = 10; |
el17mcd | 16:a2c945279b79 | 123 | if (pad.get_direction() == W && _health > 1) { _health-- ; } |
el17mcd | 16:a2c945279b79 | 124 | else if (pad.get_direction() == E && _health < 6) { _health++ ; } |
el17mcd | 16:a2c945279b79 | 125 | else if (pad.check_event(Gamepad::A_PRESSED) == true) { _mute = !_mute; } |
el17mcd | 16:a2c945279b79 | 126 | else if (pad.check_event(Gamepad::B_PRESSED) == true) { |
el17mcd | 16:a2c945279b79 | 127 | _brightness = pad.read_pot(); |
el17mcd | 16:a2c945279b79 | 128 | lcd.setBrightness(_brightness); |
el17mcd | 16:a2c945279b79 | 129 | } |
el17mcd | 16:a2c945279b79 | 130 | else { _counter = -1; } |
el17mcd | 15:fa5282fcd134 | 131 | } |
el17mcd | 15:fa5282fcd134 | 132 | char buffer[14]; |
el17mcd | 16:a2c945279b79 | 133 | sprintf(buffer,"%d",_health); |
el17mcd | 16:a2c945279b79 | 134 | lcd.printString(buffer, 74, 1); |
el17mcd | 15:fa5282fcd134 | 135 | if (_mute == true ) { lcd.drawRect(70, 17, 7 , 7, FILL_BLACK); } |
el17mcd | 15:fa5282fcd134 | 136 | else { lcd.drawRect(70, 17, 7 , 7, FILL_TRANSPARENT); } |
el17mcd | 15:fa5282fcd134 | 137 | } |
el17mcd | 15:fa5282fcd134 | 138 | |
el17mcd | 16:a2c945279b79 | 139 | void Menus::_scores(N5110 &lcd, Gamepad &pad, Scores &scores) |
el17mcd | 16:a2c945279b79 | 140 | { |
el17mcd | 16:a2c945279b79 | 141 | while(pad.check_event(Gamepad::BACK_PRESSED) == false) { |
el17mcd | 16:a2c945279b79 | 142 | |
el17mcd | 16:a2c945279b79 | 143 | lcd.clear(); |
el17mcd | 16:a2c945279b79 | 144 | // if (pad.check_event(Gamepad::A_PRESSED) == true) { scores.read_sd_scores() } |
el17mcd | 16:a2c945279b79 | 145 | // else if (pad.check_event(Gamepad::B_PRESSED) == true) { scores.write_sd_scores() } |
el17mcd | 16:a2c945279b79 | 146 | scores.display_top_scores(lcd); |
el17mcd | 16:a2c945279b79 | 147 | lcd.printString("High Scores", 10, 1); |
el17mcd | 16:a2c945279b79 | 148 | lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT); |
el17mcd | 16:a2c945279b79 | 149 | lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT); |
el17mcd | 16:a2c945279b79 | 150 | _read_inputs(pad); |
el17mcd | 16:a2c945279b79 | 151 | lcd.refresh(); |
el17mcd | 16:a2c945279b79 | 152 | wait_ms(1000/60); |
el17mcd | 16:a2c945279b79 | 153 | } |
el17mcd | 16:a2c945279b79 | 154 | } |
el17mcd | 16:a2c945279b79 | 155 | |
el17mcd | 15:fa5282fcd134 | 156 | bool Menus::get_mute() |
el17mcd | 15:fa5282fcd134 | 157 | { |
el17mcd | 15:fa5282fcd134 | 158 | return _mute; |
el17mcd | 15:fa5282fcd134 | 159 | } |
el17mcd | 15:fa5282fcd134 | 160 | |
el17mcd | 16:a2c945279b79 | 161 | int Menus::get_health() |
el17mcd | 15:fa5282fcd134 | 162 | { |
el17mcd | 16:a2c945279b79 | 163 | return _health; |
el17mcd | 15:fa5282fcd134 | 164 | } |