James Cummins / Mbed 2 deprecated el17jnc

Dependencies:   mbed

Committer:
JamesCummins
Date:
Wed Apr 17 14:34:08 2019 +0000
Revision:
20:4a39a1a2be51
Child:
21:9d1447765ee1
Split code into proper classes

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 20:4a39a1a2be51 13 void BrickBreakerEngine::init(int radius){
JamesCummins 20:4a39a1a2be51 14 _ball_radius = radius;
JamesCummins 20:4a39a1a2be51 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 20:4a39a1a2be51 23 void BrickBreakerEngine::brickbreaker_mode(FXOS8700CQ &accelerometer, Gamepad &gamepad, N5110 &lcd, AnalogIn &randnoise, int fps){
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 20:4a39a1a2be51 26 _ball.read_input(accelerometer);
JamesCummins 20:4a39a1a2be51 27 _ball.update();
JamesCummins 20:4a39a1a2be51 28 Vector2D position = _ball.get_position();
JamesCummins 20:4a39a1a2be51 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 20:4a39a1a2be51 30 check_square_collision(randnoise);
JamesCummins 20:4a39a1a2be51 31 lcd.clear();
JamesCummins 20:4a39a1a2be51 32 brickbreaker_draw(lcd);
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 20:4a39a1a2be51 36 int choice = _pause.pause_menu(gamepad, lcd, fps, i);
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 20:4a39a1a2be51 44 void BrickBreakerEngine::brickbreaker_draw(N5110 &lcd){
JamesCummins 20:4a39a1a2be51 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 20:4a39a1a2be51 58 void BrickBreakerEngine::check_square_collision(AnalogIn &randnoise){
JamesCummins 20:4a39a1a2be51 59 int radius = _ball.get_radius();
JamesCummins 20:4a39a1a2be51 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
JamesCummins 20:4a39a1a2be51 69 void BrickBreakerEngine::print_score(N5110 &lcd){
JamesCummins 20:4a39a1a2be51 70 char buffer[2];
JamesCummins 20:4a39a1a2be51 71 int score = _score;
JamesCummins 20:4a39a1a2be51 72 sprintf(buffer, "%d", score);
JamesCummins 20:4a39a1a2be51 73 lcd.printString(buffer, 72, 0);
JamesCummins 20:4a39a1a2be51 74 }
JamesCummins 20:4a39a1a2be51 75
JamesCummins 20:4a39a1a2be51 76 /////////////////Pause Menu functions//////////////////////////
JamesCummins 20:4a39a1a2be51 77