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@15:fa5282fcd134, 2019-04-19 (annotated)
- Committer:
- el17mcd
- Date:
- Fri Apr 19 15:58:51 2019 +0000
- Revision:
- 15:fa5282fcd134
- Child:
- 16:a2c945279b79
! New Menus class that holds the menus for the game. Settings menu to toggle sound, change contrast and number of lives players start with.
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 | 15:fa5282fcd134 | 10 | _lives = 6; |
el17mcd | 15:fa5282fcd134 | 11 | _mute = false; |
el17mcd | 15:fa5282fcd134 | 12 | _contrast = 0.4; |
el17mcd | 15:fa5282fcd134 | 13 | } |
el17mcd | 15:fa5282fcd134 | 14 | |
el17mcd | 15:fa5282fcd134 | 15 | Menus::~Menus() |
el17mcd | 15:fa5282fcd134 | 16 | { |
el17mcd | 15:fa5282fcd134 | 17 | |
el17mcd | 15:fa5282fcd134 | 18 | } |
el17mcd | 15:fa5282fcd134 | 19 | |
el17mcd | 15:fa5282fcd134 | 20 | void Menus::start_up_screen(Graphics &graphics, N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 21 | { |
el17mcd | 15:fa5282fcd134 | 22 | while(pad.check_event(Gamepad::START_PRESSED) == false) { |
el17mcd | 15:fa5282fcd134 | 23 | lcd.clear(); |
el17mcd | 15:fa5282fcd134 | 24 | lcd.printString(" TANKS! ",0,1); |
el17mcd | 15:fa5282fcd134 | 25 | lcd.printString(" Press Start ",0,3); |
el17mcd | 15:fa5282fcd134 | 26 | _start_up_visuals(graphics, lcd, pad); |
el17mcd | 15:fa5282fcd134 | 27 | lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 28 | lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 29 | lcd.refresh(); |
el17mcd | 15:fa5282fcd134 | 30 | } |
el17mcd | 15:fa5282fcd134 | 31 | } |
el17mcd | 15:fa5282fcd134 | 32 | |
el17mcd | 15:fa5282fcd134 | 33 | void Menus::main_menu(Graphics &graphics, N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 34 | { |
el17mcd | 15:fa5282fcd134 | 35 | while(pad.check_event(Gamepad::Y_PRESSED) == false) { |
el17mcd | 15:fa5282fcd134 | 36 | pad.leds_off(); |
el17mcd | 15:fa5282fcd134 | 37 | lcd.clear(); |
el17mcd | 15:fa5282fcd134 | 38 | if (pad.check_event(Gamepad::X_PRESSED) == true) { _controls(lcd, pad); } |
el17mcd | 15:fa5282fcd134 | 39 | else if (pad.check_event(Gamepad::A_PRESSED) == true) { _scores(lcd, pad); } |
el17mcd | 15:fa5282fcd134 | 40 | else if (pad.check_event(Gamepad::B_PRESSED) == true) { _settings(lcd, pad); } |
el17mcd | 15:fa5282fcd134 | 41 | lcd.printString(" (Y) Play",0,1); |
el17mcd | 15:fa5282fcd134 | 42 | lcd.printString(" (X) Controls",0,2); |
el17mcd | 15:fa5282fcd134 | 43 | lcd.printString(" (A) Scores",0,3); |
el17mcd | 15:fa5282fcd134 | 44 | lcd.printString(" (B) Settings ",0,4); |
el17mcd | 15:fa5282fcd134 | 45 | lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 46 | lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 47 | lcd.refresh(); |
el17mcd | 15:fa5282fcd134 | 48 | wait_ms(16.666); |
el17mcd | 15:fa5282fcd134 | 49 | } |
el17mcd | 15:fa5282fcd134 | 50 | } |
el17mcd | 15:fa5282fcd134 | 51 | |
el17mcd | 15:fa5282fcd134 | 52 | void Menus::_start_up_visuals(Graphics &graphics, N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 53 | { |
el17mcd | 15:fa5282fcd134 | 54 | if (_counter >= 0) { |
el17mcd | 15:fa5282fcd134 | 55 | graphics.start_up(1, pad); |
el17mcd | 15:fa5282fcd134 | 56 | graphics.draw_tank_l(10, 5, lcd); |
el17mcd | 15:fa5282fcd134 | 57 | graphics.draw_turret_l(10, 5, 10, lcd); |
el17mcd | 15:fa5282fcd134 | 58 | graphics.draw_tank_r(64, 5, lcd); |
el17mcd | 15:fa5282fcd134 | 59 | graphics.draw_turret_r(64, 5, 180, lcd); |
el17mcd | 15:fa5282fcd134 | 60 | } else { |
el17mcd | 15:fa5282fcd134 | 61 | graphics.start_up(0, pad); |
el17mcd | 15:fa5282fcd134 | 62 | graphics.draw_tank_l(10, 5, lcd); |
el17mcd | 15:fa5282fcd134 | 63 | graphics.draw_turret_l(10, 5, 180, lcd); |
el17mcd | 15:fa5282fcd134 | 64 | graphics.draw_tank_r(64, 5, lcd); |
el17mcd | 15:fa5282fcd134 | 65 | graphics.draw_turret_r(64, 5, 340, lcd); |
el17mcd | 15:fa5282fcd134 | 66 | } |
el17mcd | 15:fa5282fcd134 | 67 | if (_counter >= 199) { _counter = -200; } |
el17mcd | 15:fa5282fcd134 | 68 | _counter++; |
el17mcd | 15:fa5282fcd134 | 69 | } |
el17mcd | 15:fa5282fcd134 | 70 | |
el17mcd | 15:fa5282fcd134 | 71 | void Menus::_read_inputs(Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 72 | { |
el17mcd | 15:fa5282fcd134 | 73 | pad.check_event(Gamepad::Y_PRESSED); |
el17mcd | 15:fa5282fcd134 | 74 | pad.check_event(Gamepad::X_PRESSED); |
el17mcd | 15:fa5282fcd134 | 75 | pad.check_event(Gamepad::A_PRESSED); |
el17mcd | 15:fa5282fcd134 | 76 | pad.check_event(Gamepad::B_PRESSED); |
el17mcd | 15:fa5282fcd134 | 77 | } |
el17mcd | 15:fa5282fcd134 | 78 | |
el17mcd | 15:fa5282fcd134 | 79 | void Menus::_controls(N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 80 | { |
el17mcd | 15:fa5282fcd134 | 81 | while(pad.check_event(Gamepad::BACK_PRESSED) == false) { |
el17mcd | 15:fa5282fcd134 | 82 | _read_inputs(pad); |
el17mcd | 15:fa5282fcd134 | 83 | lcd.clear(); |
el17mcd | 15:fa5282fcd134 | 84 | lcd.printString(" Stick: Aim",0,1); |
el17mcd | 15:fa5282fcd134 | 85 | lcd.printString(" A : Fire",0,2); |
el17mcd | 15:fa5282fcd134 | 86 | lcd.printString(" L/R : Move",0,3); |
el17mcd | 15:fa5282fcd134 | 87 | lcd.printString(" Pot : Power",0,4); |
el17mcd | 15:fa5282fcd134 | 88 | lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 89 | lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 90 | lcd.refresh(); |
el17mcd | 15:fa5282fcd134 | 91 | wait_ms(50); |
el17mcd | 15:fa5282fcd134 | 92 | } |
el17mcd | 15:fa5282fcd134 | 93 | } |
el17mcd | 15:fa5282fcd134 | 94 | |
el17mcd | 15:fa5282fcd134 | 95 | void Menus::_scores(N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 96 | { |
el17mcd | 15:fa5282fcd134 | 97 | while(pad.check_event(Gamepad::BACK_PRESSED) == false) { |
el17mcd | 15:fa5282fcd134 | 98 | _read_inputs(pad); |
el17mcd | 15:fa5282fcd134 | 99 | lcd.clear(); |
el17mcd | 15:fa5282fcd134 | 100 | lcd.printString(" Highest",0,1); |
el17mcd | 15:fa5282fcd134 | 101 | lcd.printString(" Score",0,1); |
el17mcd | 15:fa5282fcd134 | 102 | lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 103 | lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 104 | lcd.refresh(); |
el17mcd | 15:fa5282fcd134 | 105 | wait_ms(50); |
el17mcd | 15:fa5282fcd134 | 106 | } |
el17mcd | 15:fa5282fcd134 | 107 | } |
el17mcd | 15:fa5282fcd134 | 108 | |
el17mcd | 15:fa5282fcd134 | 109 | void Menus::_settings(N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 110 | { |
el17mcd | 15:fa5282fcd134 | 111 | while(pad.check_event(Gamepad::BACK_PRESSED) == false) { |
el17mcd | 15:fa5282fcd134 | 112 | lcd.clear(); |
el17mcd | 15:fa5282fcd134 | 113 | _mute_contrast(lcd, pad); |
el17mcd | 15:fa5282fcd134 | 114 | _read_inputs(pad); |
el17mcd | 15:fa5282fcd134 | 115 | lcd.printString(" (O) Lives:",0,1); |
el17mcd | 15:fa5282fcd134 | 116 | lcd.printString(" (A) Mute :",0,2); |
el17mcd | 15:fa5282fcd134 | 117 | lcd.printString(" (B) Contrast",0,3); |
el17mcd | 15:fa5282fcd134 | 118 | lcd.printString(" reads off pot",0,4); |
el17mcd | 15:fa5282fcd134 | 119 | lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 120 | lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT); |
el17mcd | 15:fa5282fcd134 | 121 | lcd.refresh(); |
el17mcd | 15:fa5282fcd134 | 122 | wait(0.2); |
el17mcd | 15:fa5282fcd134 | 123 | } |
el17mcd | 15:fa5282fcd134 | 124 | } |
el17mcd | 15:fa5282fcd134 | 125 | |
el17mcd | 15:fa5282fcd134 | 126 | void Menus::_mute_contrast(N5110 &lcd, Gamepad &pad) |
el17mcd | 15:fa5282fcd134 | 127 | { |
el17mcd | 15:fa5282fcd134 | 128 | pad.check_event(Gamepad::Y_PRESSED); |
el17mcd | 15:fa5282fcd134 | 129 | pad.check_event(Gamepad::X_PRESSED); |
el17mcd | 15:fa5282fcd134 | 130 | if (pad.get_direction() == W && _lives > 1) { _lives-- ; } |
el17mcd | 15:fa5282fcd134 | 131 | else if (pad.get_direction() == E && _lives < 6) { _lives++ ; } |
el17mcd | 15:fa5282fcd134 | 132 | else if (pad.check_event(Gamepad::A_PRESSED) == true) { _mute = !_mute; } |
el17mcd | 15:fa5282fcd134 | 133 | else if (pad.check_event(Gamepad::B_PRESSED) == true) { |
el17mcd | 15:fa5282fcd134 | 134 | _contrast = pad.read_pot(); |
el17mcd | 15:fa5282fcd134 | 135 | lcd.setContrast(_contrast); |
el17mcd | 15:fa5282fcd134 | 136 | } |
el17mcd | 15:fa5282fcd134 | 137 | char buffer[14]; |
el17mcd | 15:fa5282fcd134 | 138 | sprintf(buffer,"%d",_lives); |
el17mcd | 15:fa5282fcd134 | 139 | lcd.printString(buffer, 70, 1); |
el17mcd | 15:fa5282fcd134 | 140 | if (_mute == true ) { lcd.drawRect(70, 17, 7 , 7, FILL_BLACK); } |
el17mcd | 15:fa5282fcd134 | 141 | else { lcd.drawRect(70, 17, 7 , 7, FILL_TRANSPARENT); } |
el17mcd | 15:fa5282fcd134 | 142 | } |
el17mcd | 15:fa5282fcd134 | 143 | |
el17mcd | 15:fa5282fcd134 | 144 | bool Menus::get_mute() |
el17mcd | 15:fa5282fcd134 | 145 | { |
el17mcd | 15:fa5282fcd134 | 146 | return _mute; |
el17mcd | 15:fa5282fcd134 | 147 | } |
el17mcd | 15:fa5282fcd134 | 148 | |
el17mcd | 15:fa5282fcd134 | 149 | int Menus::get_lives() |
el17mcd | 15:fa5282fcd134 | 150 | { |
el17mcd | 15:fa5282fcd134 | 151 | return _lives; |
el17mcd | 15:fa5282fcd134 | 152 | } |