James Cummins / Mbed 2 deprecated el17jnc

Dependencies:   mbed

Committer:
JamesCummins
Date:
Sat May 04 18:56:38 2019 +0000
Revision:
35:138ad0faa42b
Parent:
34:7e03391cb8a6
Child:
38:a85bc227b907
High scores working, just a few finishing touches required now

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JamesCummins 20:4a39a1a2be51 1 #include "BrickBreakerEngine.h"
JamesCummins 20:4a39a1a2be51 2
JamesCummins 20:4a39a1a2be51 3 //Constructor
JamesCummins 20:4a39a1a2be51 4 BrickBreakerEngine::BrickBreakerEngine(){
JamesCummins 20:4a39a1a2be51 5 }
JamesCummins 20:4a39a1a2be51 6
JamesCummins 20:4a39a1a2be51 7 //Destructor
JamesCummins 20:4a39a1a2be51 8 BrickBreakerEngine::~BrickBreakerEngine(){
JamesCummins 20:4a39a1a2be51 9 }
JamesCummins 20:4a39a1a2be51 10
JamesCummins 20:4a39a1a2be51 11 //Initialiser
JamesCummins 23:61fa82f76808 12 void BrickBreakerEngine::init(int radius, Ball &ball){
JamesCummins 20:4a39a1a2be51 13 _ball_radius = radius;
JamesCummins 23:61fa82f76808 14 ball.init(_ball_radius);
JamesCummins 20:4a39a1a2be51 15 srand(time(NULL));
JamesCummins 20:4a39a1a2be51 16 _square_coord.x = 2 + rand()%80;
JamesCummins 20:4a39a1a2be51 17 _square_coord.y = 8 + rand()%36;
JamesCummins 20:4a39a1a2be51 18 }
JamesCummins 20:4a39a1a2be51 19
JamesCummins 25:b52aa23df120 20 //Method for rendering
JamesCummins 20:4a39a1a2be51 21
JamesCummins 23:61fa82f76808 22 void BrickBreakerEngine::brickbreaker_draw(N5110 &lcd, Ball &ball){
JamesCummins 23:61fa82f76808 23 ball.draw(lcd);
JamesCummins 20:4a39a1a2be51 24 lcd.drawRect(_square_coord.x, _square_coord.y, 5, 5, FILL_BLACK);
JamesCummins 20:4a39a1a2be51 25 print_score(lcd);
JamesCummins 20:4a39a1a2be51 26 }
JamesCummins 20:4a39a1a2be51 27
JamesCummins 20:4a39a1a2be51 28 /////////////Brickbreaker functionality/////////////////////
JamesCummins 20:4a39a1a2be51 29
JamesCummins 25:b52aa23df120 30 void BrickBreakerEngine::set_score(int score){
JamesCummins 25:b52aa23df120 31 _score = score;
JamesCummins 25:b52aa23df120 32 }
JamesCummins 25:b52aa23df120 33
JamesCummins 20:4a39a1a2be51 34 void BrickBreakerEngine::generate_rand_square(AnalogIn &randnoise){
JamesCummins 20:4a39a1a2be51 35 int rand = randnoise.read_u16();
JamesCummins 20:4a39a1a2be51 36 Vector2D square_coords = {rand % 80, 8 + rand % 36};
JamesCummins 20:4a39a1a2be51 37 _square_coord = square_coords;
JamesCummins 20:4a39a1a2be51 38 }
JamesCummins 20:4a39a1a2be51 39
JamesCummins 23:61fa82f76808 40 void BrickBreakerEngine::check_square_collision(AnalogIn &randnoise, Ball &ball){
JamesCummins 23:61fa82f76808 41 int radius = ball.get_radius();
JamesCummins 23:61fa82f76808 42 Vector2D position = ball.get_position();
JamesCummins 20:4a39a1a2be51 43 if (abs(position.x - (_square_coord.x + 2)) <= (radius + 2) and
JamesCummins 20:4a39a1a2be51 44 abs(position.y - (_square_coord.y + 2)) <= (radius + 2)) {
JamesCummins 20:4a39a1a2be51 45 _score++;
JamesCummins 20:4a39a1a2be51 46 generate_rand_square(randnoise);
JamesCummins 20:4a39a1a2be51 47 }
JamesCummins 20:4a39a1a2be51 48 }
JamesCummins 20:4a39a1a2be51 49
JamesCummins 20:4a39a1a2be51 50 void BrickBreakerEngine::print_score(N5110 &lcd){
JamesCummins 20:4a39a1a2be51 51 char buffer[2];
JamesCummins 20:4a39a1a2be51 52 int score = _score;
JamesCummins 20:4a39a1a2be51 53 sprintf(buffer, "%d", score);
JamesCummins 20:4a39a1a2be51 54 lcd.printString(buffer, 72, 0);
JamesCummins 20:4a39a1a2be51 55 }
JamesCummins 25:b52aa23df120 56
JamesCummins 26:0dc10374546f 57 void BrickBreakerEngine::read_high_scores(){
JamesCummins 34:7e03391cb8a6 58 FILE *fp;
JamesCummins 34:7e03391cb8a6 59 fp = fopen("/sd/bbhighscores.txt", "r");
JamesCummins 34:7e03391cb8a6 60
JamesCummins 34:7e03391cb8a6 61 if(fp == NULL){
JamesCummins 26:0dc10374546f 62 printf("Error: Could not open file");
JamesCummins 34:7e03391cb8a6 63 } else {
JamesCummins 34:7e03391cb8a6 64 int i = 0;
JamesCummins 34:7e03391cb8a6 65 rewind(fp);
JamesCummins 34:7e03391cb8a6 66
JamesCummins 35:138ad0faa42b 67 while(fscanf(fp, "%d,%f", &_index_array[i], &_array_of_values[i]) != EOF){
JamesCummins 34:7e03391cb8a6 68 i++;
JamesCummins 34:7e03391cb8a6 69 }
JamesCummins 34:7e03391cb8a6 70 fclose(fp);
JamesCummins 26:0dc10374546f 71 }
JamesCummins 26:0dc10374546f 72 }
JamesCummins 26:0dc10374546f 73
JamesCummins 26:0dc10374546f 74 void BrickBreakerEngine::check_high_score(){
JamesCummins 26:0dc10374546f 75 read_high_scores();
JamesCummins 34:7e03391cb8a6 76 for(int i = 4; i >= 0; i--){
JamesCummins 35:138ad0faa42b 77 if(_array_of_values[i] < _score){
JamesCummins 35:138ad0faa42b 78 _array_of_values[i+1] = _array_of_values[i];
JamesCummins 35:138ad0faa42b 79 _array_of_values[i] = _score;
JamesCummins 34:7e03391cb8a6 80 }
JamesCummins 34:7e03391cb8a6 81 }
JamesCummins 26:0dc10374546f 82 }
JamesCummins 26:0dc10374546f 83
JamesCummins 26:0dc10374546f 84 void BrickBreakerEngine::write_high_scores(){
JamesCummins 26:0dc10374546f 85 check_high_score();
JamesCummins 34:7e03391cb8a6 86 FILE *fp;
JamesCummins 34:7e03391cb8a6 87 fp = fopen("/sd/bbhighscores.txt", "w");
JamesCummins 34:7e03391cb8a6 88 if(fp == NULL){
JamesCummins 34:7e03391cb8a6 89 printf("Error: Could not open file");
JamesCummins 34:7e03391cb8a6 90 } else {
JamesCummins 34:7e03391cb8a6 91 for(int i = 0; i < 5; i++){
JamesCummins 35:138ad0faa42b 92 fprintf(fp, "%d, %f\n", _index_array[i], _array_of_values[i]);
JamesCummins 34:7e03391cb8a6 93 }
JamesCummins 34:7e03391cb8a6 94 fclose(fp);
JamesCummins 26:0dc10374546f 95 }
JamesCummins 32:eff573ad8e42 96 }
JamesCummins 32:eff573ad8e42 97
JamesCummins 32:eff573ad8e42 98 void BrickBreakerEngine::time_warning(Gamepad &gamepad, int frame, int fps){
JamesCummins 32:eff573ad8e42 99 gamepad.leds_on();
JamesCummins 32:eff573ad8e42 100 int game_length = 45 * fps;
JamesCummins 32:eff573ad8e42 101 if(frame > 0.17 * game_length){
JamesCummins 32:eff573ad8e42 102 gamepad.led(6, 0);
JamesCummins 32:eff573ad8e42 103 }
JamesCummins 32:eff573ad8e42 104 if(frame > 0.33 * game_length){
JamesCummins 32:eff573ad8e42 105 gamepad.led(5, 0);
JamesCummins 32:eff573ad8e42 106 }
JamesCummins 32:eff573ad8e42 107 if(frame > 0.5 * game_length){
JamesCummins 32:eff573ad8e42 108 gamepad.led(4, 0);
JamesCummins 32:eff573ad8e42 109 }
JamesCummins 32:eff573ad8e42 110 if(frame > 0.67 * game_length){
JamesCummins 32:eff573ad8e42 111 gamepad.led(3, 0);
JamesCummins 32:eff573ad8e42 112 }
JamesCummins 32:eff573ad8e42 113 if(frame > 0.83 * game_length){
JamesCummins 32:eff573ad8e42 114 gamepad.led(2, 0);
JamesCummins 32:eff573ad8e42 115 }
JamesCummins 32:eff573ad8e42 116 if(frame > 0.97 * game_length){
JamesCummins 32:eff573ad8e42 117 gamepad.led(1, 0);
JamesCummins 32:eff573ad8e42 118 }
JamesCummins 32:eff573ad8e42 119 }
JamesCummins 32:eff573ad8e42 120
JamesCummins 32:eff573ad8e42 121 void BrickBreakerEngine::end(Gamepad &gamepad, N5110 &lcd){
JamesCummins 32:eff573ad8e42 122 while(!(gamepad.check_event(gamepad.A_PRESSED))){
JamesCummins 32:eff573ad8e42 123 lcd.clear();
JamesCummins 32:eff573ad8e42 124 char buffer[2];
JamesCummins 32:eff573ad8e42 125 sprintf(buffer, "%d", _score);
JamesCummins 32:eff573ad8e42 126 lcd.printString("Time up!", 18, 1);
JamesCummins 32:eff573ad8e42 127 lcd.printString("You scored:", 9, 3);
JamesCummins 32:eff573ad8e42 128 lcd.printString(buffer, 36, 4);
JamesCummins 32:eff573ad8e42 129 lcd.printString("(A = back)", 24, 5);
JamesCummins 32:eff573ad8e42 130 lcd.refresh();
JamesCummins 32:eff573ad8e42 131 wait(0.2);
JamesCummins 32:eff573ad8e42 132 }
JamesCummins 35:138ad0faa42b 133 }