ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Sun Mar 24 19:22:50 2019 +0000
Revision:
9:fff2009f826e
Parent:
8:5327418f823a
Child:
10:8bf3713d9e9c
Same functionality as last commit, now properly formatted and organised into a menu class to run the game engine and to implement a menu in the future

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lewisgw 5:eda40cdde3e7 1 #include "Engine.h"
lewisgw 5:eda40cdde3e7 2
lewisgw 9:fff2009f826e 3 Engine::Engine() {}
lewisgw 5:eda40cdde3e7 4
lewisgw 9:fff2009f826e 5 Engine::~Engine() {}
lewisgw 5:eda40cdde3e7 6
lewisgw 8:5327418f823a 7 void Engine::check_reset() {
lewisgw 9:fff2009f826e 8 if (_skater.get_reset_flag()) {
lewisgw 9:fff2009f826e 9 reset_skater();
lewisgw 8:5327418f823a 10 _map.init();
lewisgw 8:5327418f823a 11 _skater.set_reset_flag(false);
lewisgw 8:5327418f823a 12 wait(1);
lewisgw 9:fff2009f826e 13 }
lewisgw 9:fff2009f826e 14 }
lewisgw 9:fff2009f826e 15
lewisgw 9:fff2009f826e 16 void Engine::reset_skater() {
lewisgw 9:fff2009f826e 17 _moving_counter = 0;
lewisgw 9:fff2009f826e 18 _jump_counter = 0;
lewisgw 9:fff2009f826e 19 _direction = Left;
lewisgw 9:fff2009f826e 20 _level = 0;
lewisgw 9:fff2009f826e 21 _x = 40;
lewisgw 9:fff2009f826e 22 _y = 40;
lewisgw 9:fff2009f826e 23 }
lewisgw 8:5327418f823a 24
lewisgw 5:eda40cdde3e7 25 void Engine::init() {
lewisgw 9:fff2009f826e 26 reset_skater();
lewisgw 9:fff2009f826e 27 _map.init();
lewisgw 9:fff2009f826e 28 srand(time(NULL));
lewisgw 9:fff2009f826e 29 }
lewisgw 5:eda40cdde3e7 30
lewisgw 5:eda40cdde3e7 31 void Engine::read_input(Gamepad &gamepad) {
lewisgw 9:fff2009f826e 32 _input.coord = gamepad.get_mapped_coord();
lewisgw 9:fff2009f826e 33 _input.A_flag = gamepad.check_event(Gamepad::A_PRESSED);
lewisgw 9:fff2009f826e 34 }
lewisgw 5:eda40cdde3e7 35
lewisgw 5:eda40cdde3e7 36 void Engine::process_y() {
lewisgw 9:fff2009f826e 37 set_fall_flag();
lewisgw 9:fff2009f826e 38 if (_fall_flag) {
lewisgw 9:fff2009f826e 39 _skater.fall(_fall_flag);
lewisgw 9:fff2009f826e 40 } else {
lewisgw 9:fff2009f826e 41 _skater.set_y_position( _input.A_flag, _jump_counter, _level );
lewisgw 9:fff2009f826e 42 }
lewisgw 9:fff2009f826e 43 _fall_flag = _skater.get_fall_flag();
lewisgw 9:fff2009f826e 44 _y = _skater.get_y_position();
lewisgw 9:fff2009f826e 45 _jump_counter = _skater.get_jump_counter();
lewisgw 9:fff2009f826e 46 }
lewisgw 8:5327418f823a 47
lewisgw 9:fff2009f826e 48 void Engine::set_fall_flag() {
lewisgw 9:fff2009f826e 49 if (((_line_1.x_end < _x) && (_x < (_line_2.x_start - 6))) && _y == 23) {
lewisgw 9:fff2009f826e 50 _fall_flag = true;
lewisgw 9:fff2009f826e 51 } else if (((_line_2.x_end < _x) && (_x < (_line_3.x_start - 6))) && _y == 23) {
lewisgw 9:fff2009f826e 52 _fall_flag = true;
lewisgw 9:fff2009f826e 53 } else if (((_line_3.x_end < _x) && (_x < (_line_1.x_start - 6))) && _y == 23) {
lewisgw 9:fff2009f826e 54 _fall_flag = true;
lewisgw 9:fff2009f826e 55 }
lewisgw 9:fff2009f826e 56 }
lewisgw 5:eda40cdde3e7 57
lewisgw 7:bbc2b75c1418 58 void Engine::process_x(int t) {
lewisgw 9:fff2009f826e 59 if ( _x < -10 || _x > 84 ) {
lewisgw 8:5327418f823a 60 _skater.set_reset_flag(true);
lewisgw 9:fff2009f826e 61 } else {
lewisgw 9:fff2009f826e 62 _skater.set_x_position_and_sprite(_input.coord.x,
lewisgw 9:fff2009f826e 63 _moving_counter,
lewisgw 9:fff2009f826e 64 _direction,
lewisgw 9:fff2009f826e 65 _input.coord.y);
lewisgw 5:eda40cdde3e7 66 _x = _skater.get_x_position();
lewisgw 5:eda40cdde3e7 67 _moving_counter = _skater.get_moving_counter();
lewisgw 9:fff2009f826e 68 if ((t % 6 == 0 || t % 8 == 0) && (_input.coord.x > -0.1)) {
lewisgw 9:fff2009f826e 69 _moving_counter--;
lewisgw 7:bbc2b75c1418 70 }
lewisgw 9:fff2009f826e 71 }
lewisgw 9:fff2009f826e 72 }
lewisgw 5:eda40cdde3e7 73
lewisgw 5:eda40cdde3e7 74 void Engine::process_sprite() {
lewisgw 9:fff2009f826e 75 _sprite = _skater.get_sprite_value();
lewisgw 9:fff2009f826e 76 _direction = _skater.get_direction();
lewisgw 9:fff2009f826e 77 }
lewisgw 5:eda40cdde3e7 78
lewisgw 5:eda40cdde3e7 79
lewisgw 5:eda40cdde3e7 80 void Engine::find_level() {
lewisgw 9:fff2009f826e 81 if ((_x >= 1 && _x <= 30 && _y < 15) || (_x >= 45 && _x <= 80 && _y < 15)) {
lewisgw 5:eda40cdde3e7 82 _level = 1;
lewisgw 9:fff2009f826e 83 } else {
lewisgw 5:eda40cdde3e7 84 _level = 0;
lewisgw 9:fff2009f826e 85 }
lewisgw 9:fff2009f826e 86 }
lewisgw 7:bbc2b75c1418 87
lewisgw 7:bbc2b75c1418 88 void Engine::generate_map() {
lewisgw 9:fff2009f826e 89 _length_1 = (rand() %20) + 10;
lewisgw 9:fff2009f826e 90 _map.generate_line_1(_length_1);
lewisgw 9:fff2009f826e 91 _line_1 = _map.get_line_1();
lewisgw 9:fff2009f826e 92 _length_2 = (rand() %20) + 10;
lewisgw 9:fff2009f826e 93 _map.generate_line_2(_length_2);
lewisgw 9:fff2009f826e 94 _line_2 = _map.get_line_2();
lewisgw 9:fff2009f826e 95 _length_3 = (rand() %20) + 10;
lewisgw 9:fff2009f826e 96 _map.generate_line_3(_length_3);
lewisgw 9:fff2009f826e 97 _line_3 = _map.get_line_3();
lewisgw 9:fff2009f826e 98 }
lewisgw 5:eda40cdde3e7 99
lewisgw 5:eda40cdde3e7 100
lewisgw 5:eda40cdde3e7 101 void Engine::update_lcd(N5110 &lcd){
lewisgw 9:fff2009f826e 102 _skate_sprite = _skater.get_sprite(_sprite);
lewisgw 9:fff2009f826e 103 lcd.drawSprite(_x,_y,17,10,(int *)_skate_sprite);
lewisgw 9:fff2009f826e 104 lcd.drawLine(_line_2.x_start,_line_2.y,_line_2.x_end,_line_2.y,FILL_BLACK);
lewisgw 9:fff2009f826e 105 lcd.drawLine(_line_1.x_start,_line_1.y,_line_1.x_end,_line_1.y,FILL_BLACK);
lewisgw 9:fff2009f826e 106 lcd.drawLine(_line_3.x_start,_line_3.y,_line_3.x_end,_line_3.y,FILL_BLACK);
lewisgw 9:fff2009f826e 107 }