harry rance
/
Revised_Space_Invaders
Harry Rance 200925395 Embedded Systems Project
Diff: Menu.cpp
- 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; +} +