Haoyan Zhang
/
el17h2z1
deemo1
StarcraftEngine/StarcraftEngine.cpp
- Committer:
- haoyan
- Date:
- 2020-05-12
- Revision:
- 2:03cd3bb32511
- Parent:
- 1:8c48fb8ca5e0
- Child:
- 3:1db91ad3ab84
File content as of revision 2:03cd3bb32511:
#include "StarcraftEngine.h" StarcraftEngine::StarcraftEngine() { } StarcraftEngine::~StarcraftEngine() { } void StarcraftEngine::init(int Battleship_height, int Battleship_width, int Laser_height, int Laser_width, int Swarm_height, int Swarm_width, int speed) { // initialise the game parameters _Battleship_height = Battleship_height; _Battleship_width = Battleship_width; _Laser_height = Laser_height; _Laser_width = Laser_width; _Swarm_height = Swarm_height; _Swarm_width = Swarm_width; _speed = speed; // x position on screen - WIDTH is defined in N5110.h _Battleshipx = GAP; // Initializing Battleship,Laser and Swarm _Battleship.init(_Battleshipx, _Battleship_height, _Battleship_width); _Laser.init(_Laser_height, _Laser_width, _speed); _Swarm.init(_Swarm_height, _Swarm_width, _speed); } void StarcraftEngine::read_input(Gamepad &pad) { _d = pad.get_direction(); _mag = pad.get_mag(); } int StarcraftEngine::find_life() { int find_life = _Battleship.get_life(); return find_life; } int StarcraftEngine::find_score() { int find_score = _Battleship.get_score(); return find_score; } void StarcraftEngine::draw(N5110 &lcd) { // draw the elements in the LCD buffer // pitch lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT); //score print_scores(lcd); // Battleship _Battleship.draw(lcd); // Swarm _Swarm.draw(lcd); // Laser _Laser.draw(lcd); } void StarcraftEngine::update(Gamepad &pad) { check_goal(pad); // important to update battleship, laser and swarm before checking collisions so can // correct for it before updating the display _Battleship.update(_d,_mag); _Swarm.update(); _Laser.update(); check_Swarm_collisions(pad); } void StarcraftEngine::check_Swarm_collisions(Gamepad &pad) { // read current swarm attributes Vector2D Swarm_pos = _Swarm.get_pos(); Vector2D Swarm_velocity = _Swarm.get_velocity(); // check if swarm hit or over the battleship if ( (Swarm_pos.y >= HEIGHT - 1) ) { _Battleship.minus_life(); pad.tone(800.0,0.1); // Audio feedback } // write new attributes _Swarm.set_velocity(Swarm_velocity); _Swarm.set_pos(Swarm_pos); } void StarcraftEngine::check_goal(Gamepad &pad) { Vector2D Swarm_pos = _Swarm.get_pos(); Vector2D Battleship_pos = _Battleship.get_pos(); Vector2D Laser_pos = _Laser.get_pos(); Vector2D Laser_velocity = _Laser.get_velocity(); Vector2D Swarm_velocity = _Swarm.get_velocity(); // Player get score if ((Laser_pos.x >= Swarm_pos.x)&& (Laser_pos.x <= Swarm_pos.x + 6)&& (Laser_pos.y <= Swarm_pos.y + 6)&& (Laser_pos.y >= Swarm_pos.y)) { _Battleship.add_score(); Laser_pos.x = Battleship_pos.x + 3; Laser_pos.y = Battleship_pos.y - 1; Swarm_pos.x = rand() % 64; Swarm_pos.y = 2; pad.tone(800.0,0.25); wait(0.1); } if ((Laser_pos.y < 6)||(Battleship_pos.y - Laser_pos.y >= 20)) { Laser_pos.x = Battleship_pos.x + 3; Laser_pos.y = Battleship_pos.y - 1; } _Laser.set_velocity(Laser_velocity); _Swarm.set_velocity(Swarm_velocity); _Laser.set_pos(Laser_pos); _Swarm.set_pos(Swarm_pos); } void StarcraftEngine::print_scores(N5110 &lcd) { // get scores from battleship int Battleship_score = _Battleship.get_score(); int Battleship_life = _Battleship.get_life(); // print to LCD char buffer[14]; sprintf(buffer,"%2d",Battleship_score); lcd.printString(buffer,WIDTH/2 - 20,1); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits }