James Cummins / Mbed 2 deprecated el17jnc

Dependencies:   mbed

Committer:
JamesCummins
Date:
Sun Apr 28 10:20:52 2019 +0000
Revision:
32:eff573ad8e42
Parent:
26:0dc10374546f
Child:
34:7e03391cb8a6
Classic mode finished and working

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 32:eff573ad8e42 94 }
JamesCummins 32:eff573ad8e42 95
JamesCummins 32:eff573ad8e42 96 void BrickBreakerEngine::time_warning(Gamepad &gamepad, int frame, int fps){
JamesCummins 32:eff573ad8e42 97 gamepad.leds_on();
JamesCummins 32:eff573ad8e42 98 int game_length = 45 * fps;
JamesCummins 32:eff573ad8e42 99 if(frame > 0.17 * game_length){
JamesCummins 32:eff573ad8e42 100 gamepad.led(6, 0);
JamesCummins 32:eff573ad8e42 101 }
JamesCummins 32:eff573ad8e42 102 if(frame > 0.33 * game_length){
JamesCummins 32:eff573ad8e42 103 gamepad.led(5, 0);
JamesCummins 32:eff573ad8e42 104 }
JamesCummins 32:eff573ad8e42 105 if(frame > 0.5 * game_length){
JamesCummins 32:eff573ad8e42 106 gamepad.led(4, 0);
JamesCummins 32:eff573ad8e42 107 }
JamesCummins 32:eff573ad8e42 108 if(frame > 0.67 * game_length){
JamesCummins 32:eff573ad8e42 109 gamepad.led(3, 0);
JamesCummins 32:eff573ad8e42 110 }
JamesCummins 32:eff573ad8e42 111 if(frame > 0.83 * game_length){
JamesCummins 32:eff573ad8e42 112 gamepad.led(2, 0);
JamesCummins 32:eff573ad8e42 113 }
JamesCummins 32:eff573ad8e42 114 if(frame > 0.97 * game_length){
JamesCummins 32:eff573ad8e42 115 gamepad.led(1, 0);
JamesCummins 32:eff573ad8e42 116 }
JamesCummins 32:eff573ad8e42 117 }
JamesCummins 32:eff573ad8e42 118
JamesCummins 32:eff573ad8e42 119 void BrickBreakerEngine::end(Gamepad &gamepad, N5110 &lcd){
JamesCummins 32:eff573ad8e42 120 while(!(gamepad.check_event(gamepad.A_PRESSED))){
JamesCummins 32:eff573ad8e42 121 lcd.clear();
JamesCummins 32:eff573ad8e42 122 char buffer[2];
JamesCummins 32:eff573ad8e42 123 sprintf(buffer, "%d", _score);
JamesCummins 32:eff573ad8e42 124 lcd.printString("Time up!", 18, 1);
JamesCummins 32:eff573ad8e42 125 lcd.printString("You scored:", 9, 3);
JamesCummins 32:eff573ad8e42 126 lcd.printString(buffer, 36, 4);
JamesCummins 32:eff573ad8e42 127 lcd.printString("(A = back)", 24, 5);
JamesCummins 32:eff573ad8e42 128 lcd.refresh();
JamesCummins 32:eff573ad8e42 129 wait(0.2);
JamesCummins 32:eff573ad8e42 130 }
JamesCummins 25:b52aa23df120 131 }