ST7735 Pong by Jonne Valola, derived work from William Johnston\'s mbed Pong for NokiaLCD / PS2 keyboard This pong uses a rotary encoder hooked to pins 21 and 22, ST7735_TFT library by me, RotaryEncoder library by Shinichiro Nakamura. All copyrights of respective owners. Use on your own risk and discretion.
Dependencies: mbed ST7735_TFT RotaryEncoder TFT_fonts_old
ball.cpp
00001 #include "mbed.h" 00002 #include "ball.h" 00003 00004 Ball::Ball() { 00005 int x=y=width=height=color=xInc=yInc=0; 00006 } 00007 00008 Ball::Ball(int x, int y, int w, int h, int c, int xi, int yi) 00009 : x(x), y(y), width(w), height(h), color(c), xInc(xi), yInc(yi) {} 00010 00011 00012 /* 00013 * Member Function move: 00014 * Description: Colors in the previous ball black 00015 * and moves ball to new position. 00016 */ 00017 void Ball::move(ST7735_TFT &lcd) { 00018 draw(lcd, true); 00019 x += xInc; y += yInc; 00020 } 00021 00022 /* 00023 * Member Function draw: 00024 * Description: Draws object on screen 00025 * if isBlack, color in black. 00026 */ 00027 void Ball::draw(ST7735_TFT &lcd, bool isBlack) const { 00028 lcd.fillrect(x, y, x+width, y+height, (isBlack) ? 0x000000 : color); 00029 } 00030 00031 int Ball::size() const { 00032 return width*height; 00033 } 00034 00035 int Ball::getX() const { 00036 return x; 00037 } 00038 00039 int Ball::getY() const { 00040 return y; 00041 } 00042 00043 bool Ball::hitX() { 00044 return (x+width<=width) || (x+width>=160); 00045 } 00046 00047 bool Ball::hitY() { 00048 return (y<=0) || (y+height>=128); 00049 } 00050 00051 /* 00052 * Member Function hitP1: 00053 * Description: Checks to see if there is 00054 * a collision between paddle1 and the ball. 00055 * Has special functionality for changing 00056 * y-incline based on collision point. 00057 */ 00058 bool Ball::hitP1(int _x, int _y, int _height) { 00059 bool hit = ((_x>=x) && (xInc<0)) && 00060 (((_y<=y) && (_y+_height>=y+height)) || 00061 ((_y>=y) && (_y<=y+height)) || 00062 ((_y+_height>=y) && (_y+_height<=y+height)) 00063 ); 00064 if(hit) { 00065 if(_y+_height-y < 4 && yInc>0) yInc = 2; 00066 if(y-_y < 4 && yInc<0) yInc = -2; 00067 else yInc = (yInc>0) ? 1 : -1; 00068 } 00069 return hit; 00070 } 00071 00072 00073 /* 00074 * Member Function hitP2: 00075 * Description: Checks to see if there is 00076 * a collision between paddle2 and the ball. 00077 * Has special functionality for changing 00078 * y-incline based on collision point. 00079 */ 00080 bool Ball::hitP2(int _x, int _y, int _height) { 00081 bool hit = ((_x<=x+width) && (xInc>0)) && 00082 (((_y<=y) && (_y+_height>=y+height)) || 00083 ((_y>=y) && (_y<=y+height)) || 00084 ((_y+_height>=y) && (_y+_height<=y+height)) 00085 ); 00086 if(hit) { 00087 if(_y+_height-y < 4 && yInc>0) yInc = 2; 00088 if(y-_y < 4 && yInc<0) yInc = -2; 00089 else yInc = (yInc>0) ? 1 : -1; 00090 } 00091 return hit; 00092 } 00093 00094 void Ball::reverseX() { 00095 xInc *= -1; 00096 } 00097 00098 void Ball::reverseY() { 00099 yInc *= -1; 00100 }
Generated on Sat Jul 16 2022 02:20:05 by 1.7.2