ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Sat Mar 23 15:36:56 2019 +0000
Revision:
8:5327418f823a
Parent:
7:bbc2b75c1418
Child:
9:fff2009f826e
Skater can fall between gaps in the platforms. If skater falls between gaps or goes of the screen, a reset function resets the game.

Who changed what in which revision?

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