James Cummins / Mbed 2 deprecated el17jnc

Dependencies:   mbed

Committer:
JamesCummins
Date:
Thu Apr 18 22:56:34 2019 +0000
Revision:
23:61fa82f76808
Parent:
21:9d1447765ee1
Child:
25:b52aa23df120
Set ball speed issue fixed by creating a single ball object in top level file and referring back to that, rather than 2 different ones which don't communicate

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JamesCummins 20:4a39a1a2be51 1 #include "BrickBreakerEngine.h"
JamesCummins 20:4a39a1a2be51 2 #include <cmath>
JamesCummins 20:4a39a1a2be51 3
JamesCummins 20:4a39a1a2be51 4 //Constructor
JamesCummins 20:4a39a1a2be51 5 BrickBreakerEngine::BrickBreakerEngine(){
JamesCummins 20:4a39a1a2be51 6 }
JamesCummins 20:4a39a1a2be51 7
JamesCummins 20:4a39a1a2be51 8 //Destructor
JamesCummins 20:4a39a1a2be51 9 BrickBreakerEngine::~BrickBreakerEngine(){
JamesCummins 20:4a39a1a2be51 10 }
JamesCummins 20:4a39a1a2be51 11
JamesCummins 20:4a39a1a2be51 12 //Initialiser
JamesCummins 23:61fa82f76808 13 void BrickBreakerEngine::init(int radius, Ball &ball){
JamesCummins 20:4a39a1a2be51 14 _ball_radius = radius;
JamesCummins 23:61fa82f76808 15 ball.init(_ball_radius);
JamesCummins 20:4a39a1a2be51 16 srand(time(NULL));
JamesCummins 20:4a39a1a2be51 17 _square_coord.x = 2 + rand()%80;
JamesCummins 20:4a39a1a2be51 18 _square_coord.y = 8 + rand()%36;
JamesCummins 20:4a39a1a2be51 19 _pause.init();
JamesCummins 20:4a39a1a2be51 20 }
JamesCummins 20:4a39a1a2be51 21
JamesCummins 20:4a39a1a2be51 22 /////////////////Methods for different game modes////////////////////////////
JamesCummins 23:61fa82f76808 23 void BrickBreakerEngine::brickbreaker_mode(FXOS8700CQ &accelerometer, Gamepad &gamepad, N5110 &lcd, AnalogIn &randnoise, int fps, Ball &ball){
JamesCummins 20:4a39a1a2be51 24 for(int i = 0; i <45*fps; i++){
JamesCummins 20:4a39a1a2be51 25 if(i == 1){ _score = 0; } //reset score when game restarts
JamesCummins 23:61fa82f76808 26 ball.read_input(accelerometer);
JamesCummins 23:61fa82f76808 27 ball.update();
JamesCummins 23:61fa82f76808 28 /*Vector2D position = _ball.get_position();
JamesCummins 23:61fa82f76808 29 printf("ball_x = %f | ball_y = %f\n", position.x, position.y); //note: running with tests causes the game to run slow and take ~2min30s*/
JamesCummins 23:61fa82f76808 30 check_square_collision(randnoise, ball);
JamesCummins 20:4a39a1a2be51 31 lcd.clear();
JamesCummins 23:61fa82f76808 32 brickbreaker_draw(lcd, ball);
JamesCummins 20:4a39a1a2be51 33 lcd.refresh();
JamesCummins 20:4a39a1a2be51 34 wait_ms(1000/fps);
JamesCummins 20:4a39a1a2be51 35 if(gamepad.check_event(gamepad.BACK_PRESSED)){
JamesCummins 21:9d1447765ee1 36 int choice = _pause.pause_menu(gamepad, lcd, fps, i, BRICKBREAKER_MODE);
JamesCummins 20:4a39a1a2be51 37 i = choice;
JamesCummins 20:4a39a1a2be51 38 }
JamesCummins 20:4a39a1a2be51 39 }
JamesCummins 20:4a39a1a2be51 40 }
JamesCummins 20:4a39a1a2be51 41
JamesCummins 20:4a39a1a2be51 42 //////////////Methods for updating and rendering//////////////////
JamesCummins 20:4a39a1a2be51 43
JamesCummins 23:61fa82f76808 44 void BrickBreakerEngine::brickbreaker_draw(N5110 &lcd, Ball &ball){
JamesCummins 23:61fa82f76808 45 ball.draw(lcd);
JamesCummins 20:4a39a1a2be51 46 lcd.drawRect(_square_coord.x, _square_coord.y, 5, 5, FILL_BLACK);
JamesCummins 20:4a39a1a2be51 47 print_score(lcd);
JamesCummins 20:4a39a1a2be51 48 }
JamesCummins 20:4a39a1a2be51 49
JamesCummins 20:4a39a1a2be51 50 /////////////Brickbreaker functionality/////////////////////
JamesCummins 20:4a39a1a2be51 51
JamesCummins 20:4a39a1a2be51 52 void BrickBreakerEngine::generate_rand_square(AnalogIn &randnoise){
JamesCummins 20:4a39a1a2be51 53 int rand = randnoise.read_u16();
JamesCummins 20:4a39a1a2be51 54 Vector2D square_coords = {rand % 80, 8 + rand % 36};
JamesCummins 20:4a39a1a2be51 55 _square_coord = square_coords;
JamesCummins 20:4a39a1a2be51 56 }
JamesCummins 20:4a39a1a2be51 57
JamesCummins 23:61fa82f76808 58 void BrickBreakerEngine::check_square_collision(AnalogIn &randnoise, Ball &ball){
JamesCummins 23:61fa82f76808 59 int radius = ball.get_radius();
JamesCummins 23:61fa82f76808 60 Vector2D position = ball.get_position();
JamesCummins 20:4a39a1a2be51 61 if (abs(position.x - (_square_coord.x + 2)) <= (radius + 2) and
JamesCummins 20:4a39a1a2be51 62 abs(position.y - (_square_coord.y + 2)) <= (radius + 2)) {
JamesCummins 20:4a39a1a2be51 63 _score++;
JamesCummins 20:4a39a1a2be51 64 generate_rand_square(randnoise);
JamesCummins 20:4a39a1a2be51 65 }
JamesCummins 20:4a39a1a2be51 66 }
JamesCummins 20:4a39a1a2be51 67
JamesCummins 20:4a39a1a2be51 68 void BrickBreakerEngine::print_score(N5110 &lcd){
JamesCummins 20:4a39a1a2be51 69 char buffer[2];
JamesCummins 20:4a39a1a2be51 70 int score = _score;
JamesCummins 20:4a39a1a2be51 71 sprintf(buffer, "%d", score);
JamesCummins 20:4a39a1a2be51 72 lcd.printString(buffer, 72, 0);
JamesCummins 20:4a39a1a2be51 73 }