Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Engine.cpp
- Committer:
- musallambseiso
- Date:
- 2017-04-25
- Revision:
- 10:b2dd5f484f98
- Parent:
- 9:0efc8d7cdcf7
- Child:
- 11:10c01766f774
File content as of revision 10:b2dd5f484f98:
#include "Engine.h" Engine::Engine() { collisions = 0; wave_counter = 0; } Engine::~Engine() { } void Engine::init(int friendly_width,int friendly_height,int ship_size,int speed,N5110 &lcd, Gamepad &pad) { _friendly_width = friendly_width; _friendly_height = friendly_height; _ship_size = ship_size; _speed = speed; _friendlyx = GAP; _friendly.init(_friendlyx,_friendly_height,_friendly_width); _ship1.init(_ship_size,_speed); _ship2.init(_ship_size,_speed); _ship3.init(_ship_size,_speed); _ship4.init(_ship_size,_speed); _ship5.init(_ship_size,_speed); _ship6.init(_ship_size,_speed); _bullet.init(_speed); } void Engine::read_input(Gamepad &pad) { _d = pad.get_direction(); _mag = pad.get_mag(); } // DRAWING FUNCTIONS void Engine::draw(N5110 &lcd) { grid_draw(lcd); ships_draw(lcd); _friendly.draw(lcd); _stats.draw_health(lcd); _stats.check_health(lcd, collisions); wave_draw(lcd); } void Engine::grid_draw(N5110 &lcd) { lcd.drawRect(0, 0, WIDTH, HEIGHT-8, FILL_TRANSPARENT); lcd.drawLine(WIDTH-1, HEIGHT-8, WIDTH-1, HEIGHT, 1); lcd.drawLine(WIDTH-11, HEIGHT-8, WIDTH-11, HEIGHT, 1); lcd.drawLine(12, HEIGHT-1, WIDTH, HEIGHT-1, 1); lcd.drawLine(12, HEIGHT-8, 12, HEIGHT, 1); } void Engine::wave_draw(N5110 &lcd) { char buffer[14]; int length = sprintf(buffer,"%2d",wave_counter); lcd.printString(buffer,0,5); } void Engine::ships_draw(N5110 &lcd) { _ship1.draw(lcd); _ship2.draw(lcd); _ship3.draw(lcd); _ship4.draw(lcd); _ship5.draw(lcd); _ship6.draw(lcd); } void Engine::checker(N5110 &lcd, Gamepad &pad) { check_pass(pad); check_death(lcd, pad); } void Engine::update(N5110 &lcd, Gamepad &pad) { _friendly.update(_d,_mag); _ship1.update(); _ship2.update(); _ship3.update(); _ship4.update(); _ship5.update(); _ship6.update(); //_bullet.update(); } void Engine::shoot(N5110 &lcd, Gamepad &pad, int speed) { _speed = speed; if (pad.check_event(Gamepad::A_PRESSED) == true) { //trigger = true; } //if (trigger == true) //{ //pad.tone(1200.0,0.1); //_bullet.init(_speed); //_bullet.draw(lcd); //_bullet.update(); //trigger = false; //} } void Engine::check_pass(Gamepad &pad) { Vector2D ship1_pos = _ship1.get_pos(); if (ship1_pos.x + _ship_size < 0) { _ship1.init(_ship_size,_speed); wave_counter = wave_counter + 1; } Vector2D ship2_pos = _ship2.get_pos(); if (ship2_pos.x + _ship_size < 0) { _ship2.init(_ship_size,_speed); } Vector2D ship3_pos = _ship3.get_pos(); if (ship3_pos.x + _ship_size < 0) { _ship3.init(_ship_size,_speed); } Vector2D ship4_pos = _ship4.get_pos(); if (ship4_pos.x + _ship_size < 0) { _ship4.init(_ship_size,_speed); } Vector2D ship5_pos = _ship5.get_pos(); if (ship5_pos.x + _ship_size < 0) { _ship5.init(_ship_size,_speed); } Vector2D ship6_pos = _ship6.get_pos(); if (ship6_pos.x + _ship_size < 0) { _ship6.init(_ship_size,_speed); } } void Engine::check_death1(N5110 &lcd, Gamepad &pad) { Vector2D friendly_pos = _friendly.get_pos(); Vector2D ship1_pos = _ship1.get_pos(); if ((friendly_pos.y >= ship1_pos.y-5) && // change 5 to friendly size and 6 to ship size (friendly_pos.y <= ship1_pos.y+5) && (friendly_pos.x+6 >= ship1_pos.x) && (friendly_pos.x+6 <= ship1_pos.x+5)) { pad.tone(800.0,0.1); collisions = collisions + 1; } } void Engine::check_death2(N5110 &lcd, Gamepad &pad) { Vector2D friendly_pos = _friendly.get_pos(); Vector2D ship2_pos = _ship2.get_pos(); if ((friendly_pos.y >= ship2_pos.y-5) && // change 5 to friendly size and 6 to ship size (friendly_pos.y <= ship2_pos.y+5) && (friendly_pos.x+6 >= ship2_pos.x) && (friendly_pos.x+6 <= ship2_pos.x+5)) { pad.tone(800.0,0.1); collisions = collisions + 1; } } void Engine::check_death3(N5110 &lcd, Gamepad &pad) { Vector2D friendly_pos = _friendly.get_pos(); Vector2D ship3_pos = _ship3.get_pos(); if ((friendly_pos.y >= ship3_pos.y-5) && // change 5 to friendly size and 6 to ship size (friendly_pos.y <= ship3_pos.y+5) && (friendly_pos.x+6 >= ship3_pos.x) && (friendly_pos.x+6 <= ship3_pos.x+5)) { pad.tone(800.0,0.1); collisions = collisions + 1; } } void Engine::check_death4(N5110 &lcd, Gamepad &pad) { Vector2D friendly_pos = _friendly.get_pos(); Vector2D ship4_pos = _ship4.get_pos(); if ((friendly_pos.y >= ship4_pos.y-5) && // change 5 to friendly size and 6 to ship size (friendly_pos.y <= ship4_pos.y+5) && (friendly_pos.x+6 >= ship4_pos.x) && (friendly_pos.x+6 <= ship4_pos.x+5)) { pad.tone(800.0,0.1); collisions = collisions + 1; } } void Engine::check_death5(N5110 &lcd, Gamepad &pad) { Vector2D friendly_pos = _friendly.get_pos(); Vector2D ship5_pos = _ship5.get_pos(); if ((friendly_pos.y >= ship5_pos.y-5) && // change 5 to friendly size and 6 to ship size (friendly_pos.y <= ship5_pos.y+5) && (friendly_pos.x+6 >= ship5_pos.x) && (friendly_pos.x+6 <= ship5_pos.x+5)) { pad.tone(800.0,0.1); collisions = collisions + 1; } } void Engine::check_death6(N5110 &lcd, Gamepad &pad) { Vector2D friendly_pos = _friendly.get_pos(); Vector2D ship6_pos = _ship6.get_pos(); if ((friendly_pos.y >= ship6_pos.y-5) && // change 5 to friendly size and 6 to ship size (friendly_pos.y <= ship6_pos.y+5) && (friendly_pos.x+6 >= ship6_pos.x) && (friendly_pos.x+6 <= ship6_pos.x+5)) { pad.tone(800.0,0.1); collisions = collisions + 1; } } void Engine::check_death(N5110 &lcd, Gamepad &pad) { check_death1(lcd, pad); check_death2(lcd, pad); check_death3(lcd, pad); check_death4(lcd, pad); check_death5(lcd, pad); check_death6(lcd, pad); game_over(lcd, pad); } void Engine::game_over(N5110 &lcd, Gamepad &pad) { if (collisions >= 6) { lcd.drawRect(0,0,84,48,FILL_WHITE); lcd.printString(" You Lose! ",0,0); lcd.printString(" Press Right ",0,2); lcd.printString(" & Left! ",0,4); lcd.refresh(); wait(1); //printf("Hello\n"); while ((pad.check_event(Gamepad::R_PRESSED) == false) || (pad.check_event(Gamepad::L_PRESSED) == false)) { wait(0.1); //printf("3333\n"); } init(_friendly_width, _friendly_height, _ship_size, _speed, lcd, pad); collisions = 0; wave_counter = 0; } }