pong game
Dependencies: 4DGL-uLCD-SE mbed
Fork of uLCD144G2_demo by
main.cpp@9:15468b23e0c6, 2015-03-12 (annotated)
- Committer:
- drio3
- Date:
- Thu Mar 12 22:36:18 2015 +0000
- Revision:
- 9:15468b23e0c6
- Parent:
- 8:31e63caf37e2
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
4180_1 | 8:31e63caf37e2 | 1 | // uLCD-144-G2 demo program for uLCD-4GL LCD driver library |
4180_1 | 0:cfcf73272647 | 2 | // |
4180_1 | 0:cfcf73272647 | 3 | #include "mbed.h" |
drio3 | 9:15468b23e0c6 | 4 | #include "math.h" |
4180_1 | 2:75727e89a717 | 5 | #include "uLCD_4DGL.h" |
drio3 | 9:15468b23e0c6 | 6 | #define PI 3.14159265358979323846 |
4180_1 | 0:cfcf73272647 | 7 | |
4180_1 | 2:75727e89a717 | 8 | uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin; |
drio3 | 9:15468b23e0c6 | 9 | AnalogIn a1(p19); |
drio3 | 9:15468b23e0c6 | 10 | AnalogIn a2(p20); |
drio3 | 9:15468b23e0c6 | 11 | DigitalIn start(p18); |
drio3 | 9:15468b23e0c6 | 12 | |
drio3 | 9:15468b23e0c6 | 13 | int bx = 64; |
drio3 | 9:15468b23e0c6 | 14 | int by = 64; |
drio3 | 9:15468b23e0c6 | 15 | int P1x1 = 0, P1x2 = 3, P1y1, P1y2; |
drio3 | 9:15468b23e0c6 | 16 | int P2x1 = 124, P2x2 = 127, P2y1, P2y2; |
drio3 | 9:15468b23e0c6 | 17 | float angle; |
drio3 | 9:15468b23e0c6 | 18 | int speed; |
drio3 | 9:15468b23e0c6 | 19 | int P1S = 0, P2S = 0; |
drio3 | 9:15468b23e0c6 | 20 | int hold, h1, h2; |
drio3 | 9:15468b23e0c6 | 21 | |
drio3 | 9:15468b23e0c6 | 22 | |
4180_1 | 0:cfcf73272647 | 23 | |
4180_1 | 2:75727e89a717 | 24 | int main() |
4180_1 | 2:75727e89a717 | 25 | { |
4180_1 | 7:7bd7397ab89f | 26 | |
drio3 | 9:15468b23e0c6 | 27 | // // basic printf demo = 16 by 18 characters on screen |
drio3 | 9:15468b23e0c6 | 28 | // uLCD.printf("\nHello uLCD World\n"); //Default Green on black text |
drio3 | 9:15468b23e0c6 | 29 | // uLCD.printf("\n Starting Demo..."); |
drio3 | 9:15468b23e0c6 | 30 | // uLCD.text_width(4); //4X size text |
drio3 | 9:15468b23e0c6 | 31 | // uLCD.text_height(4); |
drio3 | 9:15468b23e0c6 | 32 | // uLCD.color(RED); |
drio3 | 9:15468b23e0c6 | 33 | // for (int i=5; i>=0; --i) { |
drio3 | 9:15468b23e0c6 | 34 | // uLCD.locate(1,2); |
drio3 | 9:15468b23e0c6 | 35 | // uLCD.printf("%2D",i); |
drio3 | 9:15468b23e0c6 | 36 | // wait(.5); |
drio3 | 9:15468b23e0c6 | 37 | // |
drio3 | 9:15468b23e0c6 | 38 | // } |
drio3 | 9:15468b23e0c6 | 39 | // uLCD.cls(); |
4180_1 | 7:7bd7397ab89f | 40 | |
4180_1 | 7:7bd7397ab89f | 41 | |
drio3 | 9:15468b23e0c6 | 42 | uLCD.text_width(1); |
drio3 | 9:15468b23e0c6 | 43 | uLCD.text_height(1); |
drio3 | 9:15468b23e0c6 | 44 | uLCD.baudrate(300000); |
4180_1 | 8:31e63caf37e2 | 45 | |
drio3 | 9:15468b23e0c6 | 46 | // Initialize random angle between 0 and 360 |
drio3 | 9:15468b23e0c6 | 47 | srand (time(NULL)); |
drio3 | 9:15468b23e0c6 | 48 | do { |
drio3 | 9:15468b23e0c6 | 49 | angle = rand()%361; |
drio3 | 9:15468b23e0c6 | 50 | } while ((angle<20)||(angle>70&&angle<110)||(angle>160&&angle<200)||(angle>250&&angle<290)||(angle>340)); |
drio3 | 9:15468b23e0c6 | 51 | |
drio3 | 9:15468b23e0c6 | 52 | ///////////////////////////////////////////////////// |
drio3 | 9:15468b23e0c6 | 53 | |
drio3 | 9:15468b23e0c6 | 54 | while(1) { |
drio3 | 9:15468b23e0c6 | 55 | if (start==0) { |
drio3 | 9:15468b23e0c6 | 56 | hold=0; |
drio3 | 9:15468b23e0c6 | 57 | h1=0; |
drio3 | 9:15468b23e0c6 | 58 | h2=0; |
drio3 | 9:15468b23e0c6 | 59 | } |
drio3 | 9:15468b23e0c6 | 60 | |
drio3 | 9:15468b23e0c6 | 61 | if (hold==1) |
drio3 | 9:15468b23e0c6 | 62 | speed=0; |
drio3 | 9:15468b23e0c6 | 63 | else |
drio3 | 9:15468b23e0c6 | 64 | speed=5; |
drio3 | 9:15468b23e0c6 | 65 | |
drio3 | 9:15468b23e0c6 | 66 | // Set position of the paddles |
drio3 | 9:15468b23e0c6 | 67 | P1y1 = (a1*103)+8; |
drio3 | 9:15468b23e0c6 | 68 | P1y2 = P1y1 + 16; |
drio3 | 9:15468b23e0c6 | 69 | P2y1 = (a2*103+8); |
drio3 | 9:15468b23e0c6 | 70 | P2y2 = P2y1 + 16; |
drio3 | 9:15468b23e0c6 | 71 | |
drio3 | 9:15468b23e0c6 | 72 | // Control motion of ball |
drio3 | 9:15468b23e0c6 | 73 | uLCD.filled_circle(bx, by , 2, 0); |
drio3 | 9:15468b23e0c6 | 74 | |
drio3 | 9:15468b23e0c6 | 75 | if((bx>122 && (by>P2y1 && by<P2y2)) || (bx<5 && (by>P1y1 && by<P1y2))) |
drio3 | 9:15468b23e0c6 | 76 | angle = 180 - angle; |
drio3 | 9:15468b23e0c6 | 77 | else if(by>125 || by<10)// I think this is where our problem is |
drio3 | 9:15468b23e0c6 | 78 | angle = -angle; |
drio3 | 9:15468b23e0c6 | 79 | |
drio3 | 9:15468b23e0c6 | 80 | //P1 Scores |
drio3 | 9:15468b23e0c6 | 81 | else if(bx>122) { |
drio3 | 9:15468b23e0c6 | 82 | P1S++; |
drio3 | 9:15468b23e0c6 | 83 | bx = 5; |
drio3 | 9:15468b23e0c6 | 84 | by = P1y1+8; |
drio3 | 9:15468b23e0c6 | 85 | hold=1; |
drio3 | 9:15468b23e0c6 | 86 | h1=1; |
drio3 | 9:15468b23e0c6 | 87 | angle = rand()%120+120+180; |
drio3 | 9:15468b23e0c6 | 88 | |
drio3 | 9:15468b23e0c6 | 89 | //P2 Scores |
drio3 | 9:15468b23e0c6 | 90 | } else if(bx<5) { |
drio3 | 9:15468b23e0c6 | 91 | P2S++; |
drio3 | 9:15468b23e0c6 | 92 | bx = 122; |
drio3 | 9:15468b23e0c6 | 93 | by = P2y1+8; |
drio3 | 9:15468b23e0c6 | 94 | hold=1; |
drio3 | 9:15468b23e0c6 | 95 | h2=1; |
drio3 | 9:15468b23e0c6 | 96 | angle = rand()%120+120; |
drio3 | 9:15468b23e0c6 | 97 | } |
drio3 | 9:15468b23e0c6 | 98 | |
drio3 | 9:15468b23e0c6 | 99 | if (hold==1&&h1==1) { |
drio3 | 9:15468b23e0c6 | 100 | bx = 6; |
drio3 | 9:15468b23e0c6 | 101 | by = P1y1+8; |
drio3 | 9:15468b23e0c6 | 102 | } else if (hold==1&&h2==1) { |
drio3 | 9:15468b23e0c6 | 103 | bx = 121; |
drio3 | 9:15468b23e0c6 | 104 | by = P2y1+8; |
drio3 | 9:15468b23e0c6 | 105 | } else { |
drio3 | 9:15468b23e0c6 | 106 | bx = bx + speed*cos(angle*2*PI/360); |
drio3 | 9:15468b23e0c6 | 107 | by = by - speed*sin(angle*2*PI/360); |
drio3 | 9:15468b23e0c6 | 108 | } |
drio3 | 9:15468b23e0c6 | 109 | |
drio3 | 9:15468b23e0c6 | 110 | // Print paddles and ball |
drio3 | 9:15468b23e0c6 | 111 | uLCD.filled_circle(bx, by, 2, 0xffffff); |
drio3 | 9:15468b23e0c6 | 112 | uLCD.filled_rectangle(0, P1y1, 3, P1y2, 0xffffff); |
drio3 | 9:15468b23e0c6 | 113 | uLCD.filled_rectangle(124, P2y1, 127, P2y2, 0xffffff); |
drio3 | 9:15468b23e0c6 | 114 | uLCD.filled_rectangle(0, 9, 3, P1y1-1, 0); |
drio3 | 9:15468b23e0c6 | 115 | uLCD.filled_rectangle(0, P1y2+1, 3, 127, 0); |
drio3 | 9:15468b23e0c6 | 116 | uLCD.filled_rectangle(124, 9, 127, P2y1-1, 0); |
drio3 | 9:15468b23e0c6 | 117 | uLCD.filled_rectangle(124, P2y2+1, 127, 127, 0); |
drio3 | 9:15468b23e0c6 | 118 | uLCD.line(5, 8, 122, 8, 0xffffff); |
drio3 | 9:15468b23e0c6 | 119 | |
drio3 | 9:15468b23e0c6 | 120 | // Print scores |
drio3 | 9:15468b23e0c6 | 121 | uLCD.locate(2,0); |
drio3 | 9:15468b23e0c6 | 122 | uLCD.printf("P1: %d P2: %d",P1S,P2S); |
drio3 | 9:15468b23e0c6 | 123 | wait(.005); |
drio3 | 9:15468b23e0c6 | 124 | } |
drio3 | 9:15468b23e0c6 | 125 | |
drio3 | 9:15468b23e0c6 | 126 | } |