One player pong with seven segment display for score keeping

Dependencies:   4DGL-uLCD-SE PinDetect SDFileSystem mbed-rtos mbed wave_player

Fork of ECE2036Lab2StarterCode by Joseph Lind

Committer:
dcleary
Date:
Thu Mar 17 20:38:26 2016 +0000
Revision:
3:c93d1b51785c
Pong

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dcleary 3:c93d1b51785c 1 #include "mbed.h"
dcleary 3:c93d1b51785c 2 #include "ball.h"
dcleary 3:c93d1b51785c 3 #include "Speaker.h"
dcleary 3:c93d1b51785c 4 #include "uLCD_4DGL.h"
dcleary 3:c93d1b51785c 5 //#include "tempModule.h"
dcleary 3:c93d1b51785c 6
dcleary 3:c93d1b51785c 7 Speaker mySpeaker(p26);//Must be PWM pin or runtime error will occur
dcleary 3:c93d1b51785c 8
dcleary 3:c93d1b51785c 9 /**** Constructors ****/
dcleary 3:c93d1b51785c 10
dcleary 3:c93d1b51785c 11 Ball::Ball() {
dcleary 3:c93d1b51785c 12 setXSign(-1); setYSign(0);
dcleary 3:c93d1b51785c 13 setFx(0); setFy(0);
dcleary 3:c93d1b51785c 14 setVx(1.6); setVy(1.2);
dcleary 3:c93d1b51785c 15 setX(0); setY(0);
dcleary 3:c93d1b51785c 16 setRadius(5);
dcleary 3:c93d1b51785c 17 }
dcleary 3:c93d1b51785c 18
dcleary 3:c93d1b51785c 19 Ball::Ball(PinName pin)
dcleary 3:c93d1b51785c 20 {
dcleary 3:c93d1b51785c 21 setXSign(-1); setYSign(0);
dcleary 3:c93d1b51785c 22 setFx(0.0); setFy(0.0);
dcleary 3:c93d1b51785c 23 setVx(1.6); setVy(1.2);
dcleary 3:c93d1b51785c 24 setX(0); setY(0);
dcleary 3:c93d1b51785c 25 setRadius(5);
dcleary 3:c93d1b51785c 26 tempSensor = new TempModule(pin);
dcleary 3:c93d1b51785c 27 }
dcleary 3:c93d1b51785c 28
dcleary 3:c93d1b51785c 29 Ball::Ball(PinName pin, float vx, float vy)
dcleary 3:c93d1b51785c 30 {
dcleary 3:c93d1b51785c 31 setXSign(-1); setYSign(0);
dcleary 3:c93d1b51785c 32 setFx(0.0); setFy(0.0);
dcleary 3:c93d1b51785c 33 setVx(vx); setVy(vy);
dcleary 3:c93d1b51785c 34 setX(0); setY(0);
dcleary 3:c93d1b51785c 35 setRadius(5);
dcleary 3:c93d1b51785c 36 tempSensor = new TempModule(pin);
dcleary 3:c93d1b51785c 37 }
dcleary 3:c93d1b51785c 38
dcleary 3:c93d1b51785c 39 /**** Set Functions ****/
dcleary 3:c93d1b51785c 40
dcleary 3:c93d1b51785c 41 // This sets the lowest velocity, for Thermal pong, or the constant velocity of x
dcleary 3:c93d1b51785c 42 void Ball::setVx(float set_vx) {vx = set_vx; }
dcleary 3:c93d1b51785c 43 // This sets the lowest velocity, for Thermal pong, or the constant velocity of y
dcleary 3:c93d1b51785c 44 void Ball::setVy(float set_vy) {vy = set_vy; }
dcleary 3:c93d1b51785c 45 void Ball::setXSign(int set_xSign) {xSign = set_xSign; }
dcleary 3:c93d1b51785c 46 void Ball::setYSign(int set_ySign) {ySign = set_ySign; }
dcleary 3:c93d1b51785c 47 void Ball::setRadius(int set_radius) {radius = set_radius; }
dcleary 3:c93d1b51785c 48 void Ball::setFx(float set_fx) {fx = set_fx; }
dcleary 3:c93d1b51785c 49 void Ball::setFy(float set_fy) {fy = set_fy; }
dcleary 3:c93d1b51785c 50 void Ball::setX(int set_x) {x = set_x; }
dcleary 3:c93d1b51785c 51 void Ball::setY(int set_y) {y = set_y; }
dcleary 3:c93d1b51785c 52 void Ball::setLose(bool set_lose) {lose = set_lose; }
dcleary 3:c93d1b51785c 53
dcleary 3:c93d1b51785c 54 /**** Get Functions ****/
dcleary 3:c93d1b51785c 55
dcleary 3:c93d1b51785c 56 int Ball::getFutureX() {
dcleary 3:c93d1b51785c 57 // calculate new X position
dcleary 3:c93d1b51785c 58 int xTemp;
dcleary 3:c93d1b51785c 59 xTemp = getFx() + ( getXSign() * getVx() );
dcleary 3:c93d1b51785c 60 return xTemp;
dcleary 3:c93d1b51785c 61 }
dcleary 3:c93d1b51785c 62
dcleary 3:c93d1b51785c 63 int Ball::getFutureY() {
dcleary 3:c93d1b51785c 64 // calculate new Y position
dcleary 3:c93d1b51785c 65 int yTemp;
dcleary 3:c93d1b51785c 66 yTemp = getFy() + ( getYSign() * getVy() );
dcleary 3:c93d1b51785c 67 return yTemp;
dcleary 3:c93d1b51785c 68 }
dcleary 3:c93d1b51785c 69
dcleary 3:c93d1b51785c 70 int Ball::getRadius() {return radius;}
dcleary 3:c93d1b51785c 71 int Ball::getXSign() {return xSign;}
dcleary 3:c93d1b51785c 72 int Ball::getYSign() {return ySign;}
dcleary 3:c93d1b51785c 73 int Ball::getX() {return x;}
dcleary 3:c93d1b51785c 74 int Ball::getY() {return y;}
dcleary 3:c93d1b51785c 75 float Ball::getFx() {return fx;}
dcleary 3:c93d1b51785c 76 float Ball::getFy() {return fy;}
dcleary 3:c93d1b51785c 77 float Ball::getVx() {return vx;}
dcleary 3:c93d1b51785c 78 float Ball::getVy() {return vy;}
dcleary 3:c93d1b51785c 79 bool Ball::getLose() {return lose;}
dcleary 3:c93d1b51785c 80
dcleary 3:c93d1b51785c 81 /**** Member Functions ****/
dcleary 3:c93d1b51785c 82
dcleary 3:c93d1b51785c 83 void Ball::reverseXDirection() {
dcleary 3:c93d1b51785c 84 // negate the sign when ball hits wall or paddle
dcleary 3:c93d1b51785c 85 int xTemp;
dcleary 3:c93d1b51785c 86 xTemp = getXSign();
dcleary 3:c93d1b51785c 87 setXSign(-xTemp);
dcleary 3:c93d1b51785c 88 }
dcleary 3:c93d1b51785c 89
dcleary 3:c93d1b51785c 90 void Ball::reverseYDirection() {
dcleary 3:c93d1b51785c 91 // negate the sign when ball hits wall or paddle
dcleary 3:c93d1b51785c 92 int yTemp;
dcleary 3:c93d1b51785c 93 yTemp = getYSign();
dcleary 3:c93d1b51785c 94 setYSign(-yTemp);
dcleary 3:c93d1b51785c 95 }
dcleary 3:c93d1b51785c 96
dcleary 3:c93d1b51785c 97 void Ball::startPong(int count, uLCD_4DGL *my_uLCD) {
dcleary 3:c93d1b51785c 98 // initialize starting pointion for the ball
dcleary 3:c93d1b51785c 99 int rnd = 0;
dcleary 3:c93d1b51785c 100 srand(count);
dcleary 3:c93d1b51785c 101 rnd = (rand() % (118 - 2 * getRadius())) + getRadius();
dcleary 3:c93d1b51785c 102 setFx( rnd ); setX( rnd );
dcleary 3:c93d1b51785c 103 rnd = (rand() % (127 - 2 * getRadius())) + getRadius();
dcleary 3:c93d1b51785c 104 setFy( rnd ); setY( rnd );
dcleary 3:c93d1b51785c 105 rnd = rand() % 2;
dcleary 3:c93d1b51785c 106 setYSign( ((float)rnd - 0.5) * 2 );
dcleary 3:c93d1b51785c 107 }
dcleary 3:c93d1b51785c 108
dcleary 3:c93d1b51785c 109 void Ball::update(uLCD_4DGL *update_uLCD) {
dcleary 3:c93d1b51785c 110 // moves the ball on the screen
dcleary 3:c93d1b51785c 111 update_uLCD->filled_circle(getX(), getY(), getRadius(), BLACK);
dcleary 3:c93d1b51785c 112 setFx(getFx()+(getXSign() * (1.5*getVx())));
dcleary 3:c93d1b51785c 113 setFy(getFy()+(getYSign() * (1.5*getVy())));
dcleary 3:c93d1b51785c 114 setX(getFutureX());
dcleary 3:c93d1b51785c 115 setY(getFutureY());
dcleary 3:c93d1b51785c 116 update_uLCD->filled_circle(getX(), getY(), getRadius(), WHITE);
dcleary 3:c93d1b51785c 117
dcleary 3:c93d1b51785c 118 }
dcleary 3:c93d1b51785c 119
dcleary 3:c93d1b51785c 120 void Ball::resetBall() {
dcleary 3:c93d1b51785c 121 // resets ball location for new game
dcleary 3:c93d1b51785c 122 setVx(1.6); setVy(1.2);
dcleary 3:c93d1b51785c 123 }
dcleary 3:c93d1b51785c 124
dcleary 3:c93d1b51785c 125 void Ball::testConditions( Paddle *my_paddle, uLCD_4DGL *my_uLCD ) {
dcleary 3:c93d1b51785c 126 if ((getFx()+getXSign() * getVx() <= getRadius()+3))
dcleary 3:c93d1b51785c 127 {
dcleary 3:c93d1b51785c 128 mySpeaker.PlayNote(300.0, 0.05, 0.1);
dcleary 3:c93d1b51785c 129 reverseXDirection();
dcleary 3:c93d1b51785c 130 }
dcleary 3:c93d1b51785c 131 if ((getFy()+getYSign() * getVy() <= getRadius()+3) || (getFy()+getYSign() * getVy() >= 125-getRadius()))
dcleary 3:c93d1b51785c 132 {
dcleary 3:c93d1b51785c 133 mySpeaker.PlayNote(300.0, 0.05, 0.1);
dcleary 3:c93d1b51785c 134 reverseYDirection();
dcleary 3:c93d1b51785c 135 }
dcleary 3:c93d1b51785c 136 if (((getFx()+getXSign() * getVx() >= my_paddle->getX()) && (getFx()+getXSign() * getVx() <= my_paddle->getX()+3)) &&
dcleary 3:c93d1b51785c 137 ((getFy()+getYSign() * getVy() >= my_paddle->getY()) && (getFy()+getYSign() * getVy() <= my_paddle->getY()+my_paddle->getLength())))
dcleary 3:c93d1b51785c 138 {
dcleary 3:c93d1b51785c 139 mySpeaker.PlayNote(300.0, 0.05, 0.1);
dcleary 3:c93d1b51785c 140 reverseYDirection();
dcleary 3:c93d1b51785c 141 }
dcleary 3:c93d1b51785c 142 if ((getFx()+getXSign() * getVx() >= 123-getRadius()))
dcleary 3:c93d1b51785c 143 {
dcleary 3:c93d1b51785c 144 mySpeaker.PlayNote(300.0, 0.7, 0.3);
dcleary 3:c93d1b51785c 145 setVx(0);
dcleary 3:c93d1b51785c 146 setVy(0);
dcleary 3:c93d1b51785c 147 setLose(1);
dcleary 3:c93d1b51785c 148 }
dcleary 3:c93d1b51785c 149 if ((getFx()+getXSign() * getVx() >= my_paddle->getX()-(getRadius()+2.5)) && (getFy()+getYSign() * getVy() <= my_paddle->getY()+my_paddle->getLength())
dcleary 3:c93d1b51785c 150 && (getFy()+getYSign() * getVy() >= my_paddle->getY()))
dcleary 3:c93d1b51785c 151 {
dcleary 3:c93d1b51785c 152 mySpeaker.PlayNote(400.0, 0.05, 0.1);
dcleary 3:c93d1b51785c 153 reverseXDirection();
dcleary 3:c93d1b51785c 154 my_paddle->setScore(1);
dcleary 3:c93d1b51785c 155
dcleary 3:c93d1b51785c 156 /* my_uLCD->locate(1,1);
dcleary 3:c93d1b51785c 157 my_uLCD->printf("%d", my_paddle->getScore());
dcleary 3:c93d1b51785c 158 */
dcleary 3:c93d1b51785c 159 }
dcleary 3:c93d1b51785c 160 }
dcleary 3:c93d1b51785c 161