ELEC2645 (2018/19) / Mbed 2 deprecated EL17MCD

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }