Kaif Kutchwala 201267448 ELEC2645 Project

Dependencies:   mbed

Committer:
KaifK
Date:
Sun May 17 23:00:04 2020 +0000
Revision:
9:e6566d09f087
Parent:
8:5ede90f99a27
Child:
12:ca7329a41fc5
random commit (cant afford to lose this code again);

Who changed what in which revision?

UserRevisionLine numberNew contents of line
KaifK 4:08a0ff6668df 1 #include "Game.h"
KaifK 8:5ede90f99a27 2
KaifK 9:e6566d09f087 3 Game::Game(N5110 &lcd, Gamepad &pad, Ball &ball) {
KaifK 9:e6566d09f087 4 _lcd = &lcd;
KaifK 9:e6566d09f087 5 _pad = &pad;
KaifK 9:e6566d09f087 6 _ball = &ball;
KaifK 9:e6566d09f087 7 }
KaifK 4:08a0ff6668df 8 Game::~Game() {}
KaifK 4:08a0ff6668df 9
KaifK 4:08a0ff6668df 10 void Game::init() {
KaifK 4:08a0ff6668df 11 _is_goal = false;
KaifK 8:5ede90f99a27 12 _lives = 3;
KaifK 8:5ede90f99a27 13 _score = 0;
KaifK 9:e6566d09f087 14 _speed = 0.30f;
KaifK 9:e6566d09f087 15 _x_val = 42.00f;
KaifK 9:e6566d09f087 16 _y_val = 0.00f;
KaifK 7:2a3b566aedd3 17 _shot_x = 0;
KaifK 7:2a3b566aedd3 18 _shot_y = 0;
KaifK 4:08a0ff6668df 19 }
KaifK 9:e6566d09f087 20 void Game::play() {
KaifK 9:e6566d09f087 21 updateLives();
KaifK 9:e6566d09f087 22 readInput();
KaifK 9:e6566d09f087 23 _ball->playShot(_shot_x, _shot_y);
KaifK 9:e6566d09f087 24 _score++;
KaifK 9:e6566d09f087 25 updateSpeed();
KaifK 8:5ede90f99a27 26 }
KaifK 7:2a3b566aedd3 27
KaifK 9:e6566d09f087 28 void Game::readInput() {
KaifK 9:e6566d09f087 29 _x_val = 42; //reset x_val
KaifK 9:e6566d09f087 30 _y_val = 0; //reset y_val
KaifK 9:e6566d09f087 31 while(!_pad->A_pressed()) {
KaifK 9:e6566d09f087 32 pointer_input();
KaifK 7:2a3b566aedd3 33 }
KaifK 9:e6566d09f087 34 wait(0.1);
KaifK 9:e6566d09f087 35 while(!_pad->B_pressed()) {
KaifK 9:e6566d09f087 36 power_meter_input();
KaifK 6:09a555c0d997 37 }
KaifK 9:e6566d09f087 38 wait(0.1);
KaifK 8:5ede90f99a27 39 convert_to_shot_x();
KaifK 7:2a3b566aedd3 40 convert_to_shot_y();
KaifK 9:e6566d09f087 41 printf("x val = %.2f \n",_x_val);
KaifK 7:2a3b566aedd3 42 printf("shot_x val = %d \n",_shot_x);
KaifK 9:e6566d09f087 43 printf("y val = %.2f \n",_y_val);
KaifK 7:2a3b566aedd3 44 printf("shot_y val = %d \n",_shot_y);
KaifK 7:2a3b566aedd3 45
KaifK 6:09a555c0d997 46 }
KaifK 9:e6566d09f087 47 void Game::updateLives() {
KaifK 5:ed71996c0534 48 switch(_lives){
KaifK 5:ed71996c0534 49 case 1:
KaifK 9:e6566d09f087 50 _pad->leds(0.0);
KaifK 9:e6566d09f087 51 _pad->led(1,1.0); //red leds only
KaifK 9:e6566d09f087 52 _pad->led(4,1.0);
KaifK 5:ed71996c0534 53 break;
KaifK 5:ed71996c0534 54 case 2:
KaifK 9:e6566d09f087 55 _pad->leds_off();
KaifK 9:e6566d09f087 56 _pad->led(1,1.0); //red and yellow leds
KaifK 9:e6566d09f087 57 _pad->led(2,1.0);
KaifK 9:e6566d09f087 58 _pad->led(4,1.0);
KaifK 9:e6566d09f087 59 _pad->led(5,1.0);
KaifK 5:ed71996c0534 60 break;
KaifK 5:ed71996c0534 61 case 3:
KaifK 9:e6566d09f087 62 _pad->leds(1.0);
KaifK 5:ed71996c0534 63 break;
KaifK 5:ed71996c0534 64 default:
KaifK 7:2a3b566aedd3 65 error("Invalid Number of Lives");
KaifK 5:ed71996c0534 66 break;
KaifK 5:ed71996c0534 67 }
KaifK 5:ed71996c0534 68 }
KaifK 9:e6566d09f087 69 void Game::updateScore() {
KaifK 5:ed71996c0534 70 char buffer[12];
KaifK 5:ed71996c0534 71 sprintf(buffer,"%d",_score);
KaifK 9:e6566d09f087 72 _lcd->printString(buffer,2,5);
KaifK 9:e6566d09f087 73 }
KaifK 9:e6566d09f087 74 void Game::updateSpeed() {
KaifK 9:e6566d09f087 75 if(abs(_speed) <= 2) { // max speed = 1
KaifK 9:e6566d09f087 76 if(_score % 3 == 0) {
KaifK 9:e6566d09f087 77 _speed = abs(_speed) + 0.20f;
KaifK 9:e6566d09f087 78 }
KaifK 9:e6566d09f087 79 }
KaifK 9:e6566d09f087 80 printf("speed = %.2f \n", _speed);
KaifK 9:e6566d09f087 81 printf("score = %d \n", _score);
KaifK 5:ed71996c0534 82 }
KaifK 7:2a3b566aedd3 83
KaifK 9:e6566d09f087 84 void Game::pointer_input() {
KaifK 9:e6566d09f087 85 updateScore();
KaifK 9:e6566d09f087 86 _ball->display_background();
KaifK 9:e6566d09f087 87 _ball->init();
KaifK 7:2a3b566aedd3 88 //draw aim pointer
KaifK 9:e6566d09f087 89 _lcd->drawLine(WIDTH / 2 - 5, 41, _x_val, HEIGHT / 2 + 7, 1);//left side
KaifK 9:e6566d09f087 90 _lcd->drawLine(WIDTH / 2 + 5, 41, _x_val, HEIGHT / 2 + 7, 1);//right side
KaifK 7:2a3b566aedd3 91 _x_val += _speed;
KaifK 9:e6566d09f087 92 //printf("dir = %d \n", _speed);
KaifK 9:e6566d09f087 93 if((int)_x_val >= 70) { _speed = (-1 * _speed); }
KaifK 9:e6566d09f087 94 //pointer points out of screen i.e. 70=84 therefore, switch direction
KaifK 7:2a3b566aedd3 95 //value found through trial and error using print statement
KaifK 9:e6566d09f087 96 else if((int)_x_val <= 12) { _speed = abs(_speed); }
KaifK 9:e6566d09f087 97 _lcd->refresh();
KaifK 9:e6566d09f087 98 _lcd->clear();
KaifK 7:2a3b566aedd3 99 wait(0.01);
KaifK 7:2a3b566aedd3 100 }
KaifK 9:e6566d09f087 101 void Game::power_meter_input() {
KaifK 9:e6566d09f087 102 updateScore();
KaifK 7:2a3b566aedd3 103 //keep direction of pointer
KaifK 9:e6566d09f087 104 _ball->display_background();
KaifK 9:e6566d09f087 105 _ball->init();
KaifK 9:e6566d09f087 106 _lcd->drawLine(WIDTH / 2 - 5, 41, _x_val, HEIGHT / 2 + 7, 1);
KaifK 9:e6566d09f087 107 _lcd->drawLine(WIDTH / 2 + 5, 41, _x_val, HEIGHT / 2 + 7, 1);
KaifK 7:2a3b566aedd3 108 //fill and empty power meter
KaifK 9:e6566d09f087 109 _lcd->drawRect(77,27,6,_y_val,FILL_BLACK);
KaifK 9:e6566d09f087 110 _y_val += _speed/2;
KaifK 9:e6566d09f087 111 if((int)_y_val >= 20) { _speed = (-1 * _speed); } //power meter full
KaifK 9:e6566d09f087 112 else if((int)_y_val <= 0) { _speed = abs(_speed); } // power meter empty
KaifK 9:e6566d09f087 113 _lcd->refresh();
KaifK 9:e6566d09f087 114 _lcd->clear();
KaifK 7:2a3b566aedd3 115 wait(0.01);
KaifK 7:2a3b566aedd3 116 }
KaifK 7:2a3b566aedd3 117 void Game::convert_to_shot_x() {
KaifK 9:e6566d09f087 118 //convert from range 12-70 (range of pointer) to 0-84 (range of screen)
KaifK 9:e6566d09f087 119 _shot_x = ((((int)_x_val - 12) * (84)) / (70 - 12));
KaifK 8:5ede90f99a27 120 //ball misses goal completely
KaifK 9:e6566d09f087 121 if(_shot_x <=7) { _shot_x = -20;}
KaifK 9:e6566d09f087 122 else if(_shot_x >=77) { _shot_x = 104;}
KaifK 7:2a3b566aedd3 123 }
KaifK 7:2a3b566aedd3 124 void Game::convert_to_shot_y() {
KaifK 9:e6566d09f087 125 _shot_y = ((((int)_y_val) * (24)) / (20));
KaifK 9:e6566d09f087 126 if(_shot_y <= 3) {_shot_y = -6; } //shot too high
KaifK 9:e6566d09f087 127 else if (_shot_y >= 19) {_shot_y = 19; }//shot is low, but must enter goal
KaifK 9:e6566d09f087 128 }
KaifK 9:e6566d09f087 129 int Game::random_level_gen(int limit) {
KaifK 9:e6566d09f087 130 int number = (rand() % limit) + 1; //random level between 1-10
KaifK 9:e6566d09f087 131 return number;
KaifK 7:2a3b566aedd3 132 }
KaifK 7:2a3b566aedd3 133
KaifK 8:5ede90f99a27 134
KaifK 8:5ede90f99a27 135