pong game

Dependencies:   4DGL-uLCD-SE mbed

Fork of uLCD144G2_demo by jim hamblen

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?

UserRevisionLine numberNew 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 }