Harry Rance 200925395 Embedded Systems Project

Dependencies:   mbed

Revision:
3:43970d8d642e
Child:
4:107bdbbf78bf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Menu.cpp	Sun Apr 30 15:23:56 2017 +0000
@@ -0,0 +1,252 @@
+#include "Menu.h"
+
+Menu::Menu()
+{
+
+}
+
+Menu::~Menu()
+{
+
+}
+
+void Menu::initialise(int square_pos, int all_coins)
+{
+  _square_pos_y = square_pos;
+  _square_pos_x = 70;
+  _all_coins = all_coins;
+  _is_game_active = 0;
+  _page_index = 0;
+}
+
+void Menu::draw(N5110 &lcd)
+{
+  draw_initial_screen(lcd);
+  draw_shop(lcd);
+  draw_options(lcd);
+  draw_selection_square(lcd);
+}
+
+void Menu::update(Gamepad &pad)
+{
+  move_selection_square_y(_d);
+  move_selection_square_x(_d);
+  initial_screen_selection(pad);
+  page_selection(pad);
+  step_back(pad);
+}
+
+void Menu::read_input(Gamepad &pad)
+{
+  _d = pad.get_direction();
+}
+
+void Menu::draw_initial_screen(N5110 &lcd)
+{
+  lcd.printString("SPACE INVADERS",0,0);
+  lcd.printString("BOSS FIGHT",13,1);
+  lcd.printString("Start Game", 5, 3);
+  lcd.printString("Shop", 5, 4);
+  lcd.printString("Options", 5, 5);
+}
+
+void Menu::draw_selection_square(N5110 &lcd)
+{
+  lcd.drawRect(_square_pos_x, _square_pos_y, 5, 5, 1);
+}
+
+void Menu::move_selection_square_x(Direction d)
+{
+  if (d == CENTRE) {
+    _square_active = 1;
+  }
+  if (_page_index == 1){
+    if (d == E && _square_active){
+      _square_pos_x += 22;
+      _square_pos_y = 41;
+      _square_active = 0;
+    } else if (d == W && _square_active){
+      _square_pos_x -= 22;
+      _square_pos_y = 41;
+      _square_active = 0;
+    }
+    if(_square_pos_x < 7){
+      _square_pos_x = 73;
+    }
+    if(_square_pos_x > 73){
+      _square_pos_x = 7;
+    }
+  }
+}
+
+void Menu::move_selection_square_y(Direction d)
+{
+  if (d == CENTRE) {
+    _square_active = 1;
+  }
+  if (_page_index == 0 || _page_index == 2 || _page_index == 3){
+    _square_pos_x = 70;
+    if (d == S && _square_active){
+      _square_pos_y += 8;
+      _square_pos_x = 70;
+      _square_active = 0;
+    } else if (d == N && _square_active){
+      _square_pos_y -= 8;
+      _square_pos_x = 70;
+      _square_active = 0;
+    }
+    if(_square_pos_y < 25){
+      _square_pos_y = 41;
+    }
+    if(_square_pos_y > 41){
+      _square_pos_y = 25;
+    }
+  }
+}
+
+void Menu::page_selection(Gamepad &pad)
+{
+  if (_square_pos_y == 33 && (pad.check_event(Gamepad::A_PRESSED)) && _page_index == 0){
+    _page_index = 1;
+    _square_pos_x = 7;
+    _square_pos_y = 41;
+  }
+  if (_square_pos_y == 41 && (pad.check_event(Gamepad::A_PRESSED)) && _page_index == 0){
+    _page_index = 2;
+    _square_pos_x = 70;
+    _square_pos_y = 25;
+  }
+}
+
+void Menu::step_back(Gamepad &pad)
+{
+  if (_page_index == 1 && (pad.check_event(Gamepad::BACK_PRESSED))){
+    _page_index = 0;
+    _square_pos_x = 70;
+    _square_pos_y = 33;
+  }
+  if (_page_index == 2 && (pad.check_event(Gamepad::BACK_PRESSED))){
+    _page_index = 0;
+    _square_pos_x = 70;
+    _square_pos_y = 41;
+  }
+}
+
+void Menu::draw_shop(N5110 &lcd)
+{
+  if(_page_index == 1){
+    lcd.clear();
+    lcd.printString("SHOP",35,0);
+    draw_shop_ship_1(lcd);
+    draw_shop_ship_2(lcd);
+    draw_shop_ship_3(lcd);
+    draw_shop_ship_4(lcd);
+    draw_heart(lcd);
+    lcd.printString("Life: 100 C",5,3);
+
+    if (_square_pos_x == 7){
+      lcd.printString("Cost: 50 C",5,2);
+    } else if (_square_pos_x == 29) {
+      lcd.printString("Cost: 100 C",5,2);
+    } else if (_square_pos_x == 51) {
+      lcd.printString("Cost: 150 C",5,2);
+    } else if (_square_pos_x == 73) {
+      lcd.printString("Cost: 200 C",5,2);
+    }
+  }
+}
+
+void Menu::draw_options(N5110 &lcd)
+{
+  if(_page_index == 2){
+    lcd.clear();
+    lcd.printString("OPTIONS",20,0);
+    lcd.printString("Video",5,3);
+    lcd.printString("Audio",5,4);
+    lcd.printString("Controls",5,5);
+  }
+}
+
+void Menu::draw_shop_ship_1(N5110 &lcd)
+{
+  lcd.drawRect(5, 38, 2, 2, 1);
+  lcd.drawRect(9, 38, 2, 2, 1);
+  lcd.drawRect(13, 38, 2, 2, 1);
+  lcd.drawRect(7, 36, 2, 2, 1);
+  lcd.drawRect(11, 36, 2, 2, 1);
+  lcd.drawRect(5, 34, 10, 2, 1);
+  lcd.drawRect(7, 32, 6, 4, 1);
+  lcd.drawRect(9, 30, 2, 2, 1);
+}
+
+void Menu::draw_shop_ship_2(N5110 &lcd)
+{
+  lcd.drawRect(29, 38, 6, 2, 1);
+  lcd.drawRect(27, 36, 4, 2, 1);
+  lcd.drawRect(33, 36, 4, 2, 1);
+  lcd.drawRect(27, 34, 10, 2, 1);
+  lcd.drawRect(27, 32, 2, 4, 1);
+  lcd.drawRect(35, 32, 2, 4, 1);
+  lcd.drawRect(31, 32, 2, 2, 1);
+}
+
+void Menu::draw_shop_ship_3(N5110 &lcd)
+{
+  lcd.drawRect(49, 38, 2, 2, 1);
+  lcd.drawRect(57, 38, 2, 2, 1);
+  lcd.drawRect(51, 36, 2, 2, 1);
+  lcd.drawRect(55, 36, 2, 2, 1);
+  lcd.drawRect(53, 34, 2, 2, 1);
+}
+
+void Menu::draw_shop_ship_4(N5110 &lcd)
+{
+  lcd.drawRect(71, 38, 10, 2, 1);
+  lcd.drawRect(73, 36, 2, 2, 1);
+  lcd.drawRect(77, 36, 2, 2, 1);
+  lcd.drawRect(73, 34, 6, 2, 1);
+  lcd.drawRect(71, 32, 2, 4, 1);
+  lcd.drawRect(75, 30, 2, 4, 1);
+  lcd.drawRect(79, 32, 2, 4, 1);
+}
+
+void Menu::draw_heart(N5110 &lcd)
+{
+  lcd.drawRect(41, 32,2,1,0);
+  lcd.drawRect(44, 32,2,1,0);
+  lcd.drawRect(40, 33,7,1,0);
+  lcd.drawRect(39, 34,9,1,0);
+  lcd.drawRect(40, 35,7,1,0);
+  lcd.drawRect(41, 36,5,1,0);
+  lcd.drawRect(42, 37,3,1,0);
+  lcd.setPixel(43, 38);
+}
+
+void Menu::initial_screen_selection(Gamepad &pad)
+{
+  if (_square_pos_y == 25 && (pad.check_event(Gamepad::A_PRESSED)) && _page_index == 0) {
+    run_game();
+  }
+}
+
+void Menu::run_game()
+{
+  _is_game_active = 1;
+}
+
+void Menu::stop_game()
+{
+  _is_game_active = 0;
+}
+
+int Menu::is_game_active()
+{
+  return _is_game_active;
+}
+
+int Menu::total_coins()
+{
+  _all_coins = _boss.get_boss_coins() + _bullet.get_coins();
+  return _all_coins;
+}
+