ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Thu Mar 28 21:27:05 2019 +0000
Revision:
11:b66170249a26
Parent:
10:8bf3713d9e9c
Child:
14:9861fe85c803
Added an introductory text at the top right of the screen that disappears after the skater jumps for the first time.

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 10:8bf3713d9e9c 10 _lower_map.init(40);
lewisgw 10:8bf3713d9e9c 11 _upper_map.init(22);
lewisgw 8:5327418f823a 12 _skater.set_reset_flag(false);
lewisgw 8:5327418f823a 13 wait(1);
lewisgw 9:fff2009f826e 14 }
lewisgw 9:fff2009f826e 15 }
lewisgw 9:fff2009f826e 16
lewisgw 9:fff2009f826e 17 void Engine::reset_skater() {
lewisgw 9:fff2009f826e 18 _moving_counter = 0;
lewisgw 9:fff2009f826e 19 _jump_counter = 0;
lewisgw 9:fff2009f826e 20 _direction = Left;
lewisgw 10:8bf3713d9e9c 21 _level_condition = 0;
lewisgw 11:b66170249a26 22 _start_platform = true;
lewisgw 9:fff2009f826e 23 _x = 40;
lewisgw 11:b66170249a26 24 _y = 23;
lewisgw 9:fff2009f826e 25 }
lewisgw 8:5327418f823a 26
lewisgw 5:eda40cdde3e7 27 void Engine::init() {
lewisgw 9:fff2009f826e 28 reset_skater();
lewisgw 10:8bf3713d9e9c 29 _lower_map.init(40);
lewisgw 10:8bf3713d9e9c 30 _upper_map.init(22);
lewisgw 11:b66170249a26 31 _skater.set_reset_flag(false);
lewisgw 9:fff2009f826e 32 srand(time(NULL));
lewisgw 9:fff2009f826e 33 }
lewisgw 5:eda40cdde3e7 34
lewisgw 5:eda40cdde3e7 35 void Engine::read_input(Gamepad &gamepad) {
lewisgw 9:fff2009f826e 36 _input.coord = gamepad.get_mapped_coord();
lewisgw 9:fff2009f826e 37 _input.A_flag = gamepad.check_event(Gamepad::A_PRESSED);
lewisgw 9:fff2009f826e 38 }
lewisgw 5:eda40cdde3e7 39
lewisgw 5:eda40cdde3e7 40 void Engine::process_y() {
lewisgw 9:fff2009f826e 41 set_fall_flag();
lewisgw 9:fff2009f826e 42 if (_fall_flag) {
lewisgw 9:fff2009f826e 43 _skater.fall(_fall_flag);
lewisgw 9:fff2009f826e 44 } else {
lewisgw 10:8bf3713d9e9c 45 _skater.set_y_position( _input.A_flag, _jump_counter, _level_condition );
lewisgw 9:fff2009f826e 46 }
lewisgw 9:fff2009f826e 47 _fall_flag = _skater.get_fall_flag();
lewisgw 9:fff2009f826e 48 _y = _skater.get_y_position();
lewisgw 9:fff2009f826e 49 _jump_counter = _skater.get_jump_counter();
lewisgw 9:fff2009f826e 50 }
lewisgw 8:5327418f823a 51
lewisgw 9:fff2009f826e 52 void Engine::set_fall_flag() {
lewisgw 10:8bf3713d9e9c 53 if (((_lower_line_1.x_end < _x) && (_x < (_lower_line_2.x_start - 6))) && _y == 23) {
lewisgw 9:fff2009f826e 54 _fall_flag = true;
lewisgw 10:8bf3713d9e9c 55 } else if (((_lower_line_2.x_end < _x) && (_x < (_lower_line_3.x_start - 6))) && _y == 23) {
lewisgw 9:fff2009f826e 56 _fall_flag = true;
lewisgw 10:8bf3713d9e9c 57 } else if (((_lower_line_3.x_end < _x) && (_x < (_lower_line_1.x_start - 6))) && _y == 23) {
lewisgw 9:fff2009f826e 58 _fall_flag = true;
lewisgw 9:fff2009f826e 59 }
lewisgw 9:fff2009f826e 60 }
lewisgw 5:eda40cdde3e7 61
lewisgw 7:bbc2b75c1418 62 void Engine::process_x(int t) {
lewisgw 9:fff2009f826e 63 if ( _x < -10 || _x > 84 ) {
lewisgw 8:5327418f823a 64 _skater.set_reset_flag(true);
lewisgw 9:fff2009f826e 65 } else {
lewisgw 9:fff2009f826e 66 _skater.set_x_position_and_sprite(_input.coord.x,
lewisgw 9:fff2009f826e 67 _moving_counter,
lewisgw 9:fff2009f826e 68 _direction,
lewisgw 9:fff2009f826e 69 _input.coord.y);
lewisgw 5:eda40cdde3e7 70 _x = _skater.get_x_position();
lewisgw 5:eda40cdde3e7 71 _moving_counter = _skater.get_moving_counter();
lewisgw 10:8bf3713d9e9c 72 if ((t % 4 == 0) && (_input.coord.x > -0.1)) {
lewisgw 9:fff2009f826e 73 _moving_counter--;
lewisgw 7:bbc2b75c1418 74 }
lewisgw 9:fff2009f826e 75 }
lewisgw 9:fff2009f826e 76 }
lewisgw 5:eda40cdde3e7 77
lewisgw 5:eda40cdde3e7 78 void Engine::process_sprite() {
lewisgw 9:fff2009f826e 79 _sprite = _skater.get_sprite_value();
lewisgw 9:fff2009f826e 80 _direction = _skater.get_direction();
lewisgw 9:fff2009f826e 81 }
lewisgw 5:eda40cdde3e7 82
lewisgw 5:eda40cdde3e7 83
lewisgw 10:8bf3713d9e9c 84 void Engine::set_level_condition() {
lewisgw 10:8bf3713d9e9c 85 if (((_upper_line_1.x_start - 6) <= _x) && (_x <= _upper_line_1.x_end)) {
lewisgw 10:8bf3713d9e9c 86 _level_condition = 1;
lewisgw 10:8bf3713d9e9c 87 } else if (((_upper_line_2.x_start - 6) <= _x) && (_x <= _upper_line_2.x_end)) {
lewisgw 10:8bf3713d9e9c 88 _level_condition = 1;
lewisgw 10:8bf3713d9e9c 89 } else if (((_upper_line_3.x_start - 6) <= _x) && (_x <= _upper_line_3.x_end)) {
lewisgw 10:8bf3713d9e9c 90 _level_condition = 1;
lewisgw 9:fff2009f826e 91 } else {
lewisgw 10:8bf3713d9e9c 92 _level_condition = 0;
lewisgw 10:8bf3713d9e9c 93 }
lewisgw 9:fff2009f826e 94 }
lewisgw 7:bbc2b75c1418 95
lewisgw 7:bbc2b75c1418 96 void Engine::generate_map() {
lewisgw 10:8bf3713d9e9c 97 generate_lower_lines();
lewisgw 10:8bf3713d9e9c 98 generate_upper_lines();
lewisgw 9:fff2009f826e 99 }
lewisgw 5:eda40cdde3e7 100
lewisgw 10:8bf3713d9e9c 101 void Engine::generate_lower_lines() {
lewisgw 10:8bf3713d9e9c 102 _length_1 = (rand() %20) + 10;
lewisgw 10:8bf3713d9e9c 103 _lower_map.generate_line_1(_length_1);
lewisgw 10:8bf3713d9e9c 104 _lower_line_1 = _lower_map.get_line_1();
lewisgw 10:8bf3713d9e9c 105 _length_2 = (rand() %20) + 10;
lewisgw 10:8bf3713d9e9c 106 _lower_map.generate_line_2(_length_2);
lewisgw 10:8bf3713d9e9c 107 _lower_line_2 = _lower_map.get_line_2();
lewisgw 10:8bf3713d9e9c 108 _length_3 = (rand() %20) + 10;
lewisgw 10:8bf3713d9e9c 109 _lower_map.generate_line_3(_length_3);
lewisgw 10:8bf3713d9e9c 110 _lower_line_3 = _lower_map.get_line_3();
lewisgw 10:8bf3713d9e9c 111 }
lewisgw 10:8bf3713d9e9c 112
lewisgw 10:8bf3713d9e9c 113 void Engine::generate_upper_lines() {
lewisgw 10:8bf3713d9e9c 114 _upper_map.generate_line_1(_length_1 / 2);
lewisgw 10:8bf3713d9e9c 115 _upper_line_1 = _upper_map.get_line_1();
lewisgw 10:8bf3713d9e9c 116 _upper_map.generate_line_2(_length_2 / 2);
lewisgw 10:8bf3713d9e9c 117 _upper_line_2 = _upper_map.get_line_2();
lewisgw 10:8bf3713d9e9c 118 _upper_map.generate_line_3(_length_3 / 2);
lewisgw 10:8bf3713d9e9c 119 _upper_line_3 = _upper_map.get_line_3();
lewisgw 10:8bf3713d9e9c 120 }
lewisgw 5:eda40cdde3e7 121
lewisgw 5:eda40cdde3e7 122 void Engine::update_lcd(N5110 &lcd){
lewisgw 9:fff2009f826e 123 _skate_sprite = _skater.get_sprite(_sprite);
lewisgw 9:fff2009f826e 124 lcd.drawSprite(_x,_y,17,10,(int *)_skate_sprite);
lewisgw 10:8bf3713d9e9c 125 lcd.drawLine(_lower_line_2.x_start,_lower_line_2.y,_lower_line_2.x_end,_lower_line_2.y,FILL_BLACK);
lewisgw 10:8bf3713d9e9c 126 lcd.drawLine(_lower_line_1.x_start,_lower_line_1.y,_lower_line_1.x_end,_lower_line_1.y,FILL_BLACK);
lewisgw 10:8bf3713d9e9c 127 lcd.drawLine(_lower_line_3.x_start,_lower_line_3.y,_lower_line_3.x_end,_lower_line_3.y,FILL_BLACK);
lewisgw 10:8bf3713d9e9c 128 lcd.drawLine(_upper_line_2.x_start,_upper_line_2.y,_upper_line_2.x_end,_upper_line_2.y,FILL_BLACK);
lewisgw 10:8bf3713d9e9c 129 lcd.drawLine(_upper_line_1.x_start,_upper_line_1.y,_upper_line_1.x_end,_upper_line_1.y,FILL_BLACK);
lewisgw 10:8bf3713d9e9c 130 lcd.drawLine(_upper_line_3.x_start,_upper_line_3.y,_upper_line_3.x_end,_upper_line_3.y,FILL_BLACK);
lewisgw 11:b66170249a26 131 }
lewisgw 11:b66170249a26 132
lewisgw 11:b66170249a26 133 bool Engine::get_start_platform() {
lewisgw 11:b66170249a26 134 if(_input.A_flag) _start_platform = false;
lewisgw 11:b66170249a26 135 return _start_platform;
lewisgw 9:fff2009f826e 136 }