James Cummins / Mbed 2 deprecated el17jnc

Dependencies:   mbed

Committer:
JamesCummins
Date:
Tue Apr 23 23:55:05 2019 +0000
Revision:
26:0dc10374546f
Parent:
25:b52aa23df120
Child:
32:eff573ad8e42
Big array for classic mode's map [200x500] approx 55% complete

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 26:0dc10374546f 3 #include <fstream>
JamesCummins 26:0dc10374546f 4 #include <iostream>
JamesCummins 26:0dc10374546f 5 #include <sstream>
JamesCummins 26:0dc10374546f 6 #include <functional>
JamesCummins 20:4a39a1a2be51 7
JamesCummins 20:4a39a1a2be51 8 //Constructor
JamesCummins 20:4a39a1a2be51 9 BrickBreakerEngine::BrickBreakerEngine(){
JamesCummins 20:4a39a1a2be51 10 }
JamesCummins 20:4a39a1a2be51 11
JamesCummins 20:4a39a1a2be51 12 //Destructor
JamesCummins 20:4a39a1a2be51 13 BrickBreakerEngine::~BrickBreakerEngine(){
JamesCummins 20:4a39a1a2be51 14 }
JamesCummins 20:4a39a1a2be51 15
JamesCummins 20:4a39a1a2be51 16 //Initialiser
JamesCummins 23:61fa82f76808 17 void BrickBreakerEngine::init(int radius, Ball &ball){
JamesCummins 20:4a39a1a2be51 18 _ball_radius = radius;
JamesCummins 23:61fa82f76808 19 ball.init(_ball_radius);
JamesCummins 20:4a39a1a2be51 20 srand(time(NULL));
JamesCummins 20:4a39a1a2be51 21 _square_coord.x = 2 + rand()%80;
JamesCummins 20:4a39a1a2be51 22 _square_coord.y = 8 + rand()%36;
JamesCummins 20:4a39a1a2be51 23 }
JamesCummins 20:4a39a1a2be51 24
JamesCummins 25:b52aa23df120 25 //Method for rendering
JamesCummins 20:4a39a1a2be51 26
JamesCummins 23:61fa82f76808 27 void BrickBreakerEngine::brickbreaker_draw(N5110 &lcd, Ball &ball){
JamesCummins 23:61fa82f76808 28 ball.draw(lcd);
JamesCummins 20:4a39a1a2be51 29 lcd.drawRect(_square_coord.x, _square_coord.y, 5, 5, FILL_BLACK);
JamesCummins 20:4a39a1a2be51 30 print_score(lcd);
JamesCummins 20:4a39a1a2be51 31 }
JamesCummins 20:4a39a1a2be51 32
JamesCummins 20:4a39a1a2be51 33 /////////////Brickbreaker functionality/////////////////////
JamesCummins 20:4a39a1a2be51 34
JamesCummins 25:b52aa23df120 35 void BrickBreakerEngine::set_score(int score){
JamesCummins 25:b52aa23df120 36 _score = score;
JamesCummins 25:b52aa23df120 37 }
JamesCummins 25:b52aa23df120 38
JamesCummins 20:4a39a1a2be51 39 void BrickBreakerEngine::generate_rand_square(AnalogIn &randnoise){
JamesCummins 20:4a39a1a2be51 40 int rand = randnoise.read_u16();
JamesCummins 20:4a39a1a2be51 41 Vector2D square_coords = {rand % 80, 8 + rand % 36};
JamesCummins 20:4a39a1a2be51 42 _square_coord = square_coords;
JamesCummins 20:4a39a1a2be51 43 }
JamesCummins 20:4a39a1a2be51 44
JamesCummins 23:61fa82f76808 45 void BrickBreakerEngine::check_square_collision(AnalogIn &randnoise, Ball &ball){
JamesCummins 23:61fa82f76808 46 int radius = ball.get_radius();
JamesCummins 23:61fa82f76808 47 Vector2D position = ball.get_position();
JamesCummins 20:4a39a1a2be51 48 if (abs(position.x - (_square_coord.x + 2)) <= (radius + 2) and
JamesCummins 20:4a39a1a2be51 49 abs(position.y - (_square_coord.y + 2)) <= (radius + 2)) {
JamesCummins 20:4a39a1a2be51 50 _score++;
JamesCummins 20:4a39a1a2be51 51 generate_rand_square(randnoise);
JamesCummins 20:4a39a1a2be51 52 }
JamesCummins 20:4a39a1a2be51 53 }
JamesCummins 20:4a39a1a2be51 54
JamesCummins 20:4a39a1a2be51 55 void BrickBreakerEngine::print_score(N5110 &lcd){
JamesCummins 20:4a39a1a2be51 56 char buffer[2];
JamesCummins 20:4a39a1a2be51 57 int score = _score;
JamesCummins 20:4a39a1a2be51 58 sprintf(buffer, "%d", score);
JamesCummins 20:4a39a1a2be51 59 lcd.printString(buffer, 72, 0);
JamesCummins 20:4a39a1a2be51 60 }
JamesCummins 25:b52aa23df120 61
JamesCummins 26:0dc10374546f 62 void BrickBreakerEngine::read_high_scores(){
JamesCummins 26:0dc10374546f 63 std::ifstream file;
JamesCummins 26:0dc10374546f 64 file.open("/sd/bbhighscores.txt");
JamesCummins 26:0dc10374546f 65 if(!(file.is_open())){
JamesCummins 26:0dc10374546f 66 printf("Error: Could not open file");
JamesCummins 26:0dc10374546f 67 }
JamesCummins 26:0dc10374546f 68 std::string nth_score;
JamesCummins 26:0dc10374546f 69 for(int n = 0; n < 5; n++){
JamesCummins 26:0dc10374546f 70 std::getline(file, nth_score);
JamesCummins 26:0dc10374546f 71 std::istringstream ipstream(nth_score);
JamesCummins 26:0dc10374546f 72 ipstream >> _hsarray[n];
JamesCummins 26:0dc10374546f 73 }
JamesCummins 26:0dc10374546f 74 }
JamesCummins 26:0dc10374546f 75
JamesCummins 26:0dc10374546f 76 void BrickBreakerEngine::check_high_score(){
JamesCummins 26:0dc10374546f 77 read_high_scores();
JamesCummins 26:0dc10374546f 78 _score = _hsarray[5];
JamesCummins 26:0dc10374546f 79 std::sort(_hsarray, _hsarray + 6, std::greater<int>());
JamesCummins 26:0dc10374546f 80 }
JamesCummins 26:0dc10374546f 81
JamesCummins 26:0dc10374546f 82 void BrickBreakerEngine::write_high_scores(){
JamesCummins 26:0dc10374546f 83 check_high_score();
JamesCummins 26:0dc10374546f 84 int array[5];
JamesCummins 26:0dc10374546f 85 for(int i = 0; i < 5; i++){
JamesCummins 26:0dc10374546f 86 array[i] = _hsarray[i];
JamesCummins 26:0dc10374546f 87 }
JamesCummins 26:0dc10374546f 88 std::ofstream file;
JamesCummins 26:0dc10374546f 89 file.open("/sd/bbhighscores.txt");
JamesCummins 26:0dc10374546f 90 for(int i = 0; i < 5; i++){
JamesCummins 26:0dc10374546f 91 file << array[i] << std::endl;
JamesCummins 26:0dc10374546f 92 }
JamesCummins 26:0dc10374546f 93 file.close();
JamesCummins 25:b52aa23df120 94 }