ELEC2645 (2018/19) / Mbed 2 deprecated EL17MCD

Dependencies:   mbed

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?

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