Code for The game of Pong using Photocell Resistors

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

Committer:
doubster
Date:
Wed Oct 21 01:58:52 2015 +0000
Revision:
1:4352a2c0a4af
Parent:
0:2a96017a6c8e
Removed and Added Comments;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
doubster 0:2a96017a6c8e 1 #include "mbed.h"
doubster 0:2a96017a6c8e 2 #include "uLCD_4DGL.h"
doubster 0:2a96017a6c8e 3 #include "SDFileSystem.h"
doubster 0:2a96017a6c8e 4 #include "wave_player.h"
doubster 0:2a96017a6c8e 5 #include <string>
doubster 0:2a96017a6c8e 6 #include "rtos.h"
doubster 0:2a96017a6c8e 7
doubster 0:2a96017a6c8e 8 // ULCD
doubster 0:2a96017a6c8e 9 uLCD_4DGL uLCD(p9,p10,p17); // serial tx, serial rx, reset pin;
doubster 0:2a96017a6c8e 10
doubster 0:2a96017a6c8e 11 // Speaker Output
doubster 0:2a96017a6c8e 12 AnalogOut DACout(p18);
doubster 0:2a96017a6c8e 13 wave_player waver(&DACout);
doubster 0:2a96017a6c8e 14
doubster 0:2a96017a6c8e 15 // SD Cards
doubster 0:2a96017a6c8e 16 SDFileSystem sd(p5, p6, p7, p8, "sd");
doubster 0:2a96017a6c8e 17
doubster 0:2a96017a6c8e 18 // Paddle Left
doubster 0:2a96017a6c8e 19 AnalogIn photocellleft(p15);
doubster 0:2a96017a6c8e 20 // Paddle Right
doubster 0:2a96017a6c8e 21 AnalogIn photocellright(p16);
doubster 0:2a96017a6c8e 22
doubster 0:2a96017a6c8e 23 //std::string a
doubster 0:2a96017a6c8e 24 void Sound(std::string event){
doubster 0:2a96017a6c8e 25 FILE *wave_file;
doubster 0:2a96017a6c8e 26
doubster 0:2a96017a6c8e 27 if(event == "hit")
doubster 0:2a96017a6c8e 28 wave_file=fopen("/sd/wavfiles/pac_bonus.wav","r");
doubster 0:2a96017a6c8e 29 else if(event == "end")
doubster 0:2a96017a6c8e 30 wave_file=fopen("/sd/wavfiles/BUZZER.wav","r");
doubster 0:2a96017a6c8e 31 else if(event == "start")
doubster 0:2a96017a6c8e 32 wave_file=fopen("/sd/wavfiles/BUZZER.wav","r");
doubster 0:2a96017a6c8e 33
doubster 0:2a96017a6c8e 34 waver.play(wave_file);
doubster 0:2a96017a6c8e 35 fclose(wave_file);
doubster 0:2a96017a6c8e 36 wait(1);
doubster 0:2a96017a6c8e 37 }
doubster 0:2a96017a6c8e 38
doubster 0:2a96017a6c8e 39 int border = 128;
doubster 0:2a96017a6c8e 40 int paddlesizex = 5;
doubster 0:2a96017a6c8e 41 int paddlesizey = 20;
doubster 0:2a96017a6c8e 42 int paddlecolor = 0x00FF00;
doubster 0:2a96017a6c8e 43 int ballradius = 3;
doubster 0:2a96017a6c8e 44 int ballcolor = 0xFF00FF;
doubster 0:2a96017a6c8e 45 int black = 0x000000;
doubster 0:2a96017a6c8e 46
doubster 0:2a96017a6c8e 47 // Paddle left
doubster 0:2a96017a6c8e 48
doubster 0:2a96017a6c8e 49 int paddlelx = 0;
doubster 0:2a96017a6c8e 50 int paddlely = 0;
doubster 0:2a96017a6c8e 51 int paddlerx = border-paddlesizex;
doubster 0:2a96017a6c8e 52 int paddlery = 50;
doubster 0:2a96017a6c8e 53
doubster 0:2a96017a6c8e 54 int oldpaddlely = paddlely;
doubster 0:2a96017a6c8e 55 int oldpaddlery = paddlery;
doubster 0:2a96017a6c8e 56
doubster 0:2a96017a6c8e 57 int paddlelincr = 1;
doubster 0:2a96017a6c8e 58 int paddlerincr = 1;
doubster 0:2a96017a6c8e 59
doubster 0:2a96017a6c8e 60 // Ball x,y , should be randomized to begin
doubster 0:2a96017a6c8e 61 int ballx = border/2;
doubster 0:2a96017a6c8e 62 int bally = rand() % 100;
doubster 0:2a96017a6c8e 63
doubster 0:2a96017a6c8e 64 int oldballx = ballx;
doubster 0:2a96017a6c8e 65 int oldbally = bally;
doubster 0:2a96017a6c8e 66 // Increments for ball
doubster 0:2a96017a6c8e 67 int ballxincr = -1;
doubster 0:2a96017a6c8e 68 int ballyincr = -1;
doubster 0:2a96017a6c8e 69
doubster 0:2a96017a6c8e 70 int oldphotocell = photocellleft;
doubster 0:2a96017a6c8e 71
doubster 0:2a96017a6c8e 72 int hitvariable = 0;
doubster 0:2a96017a6c8e 73
doubster 0:2a96017a6c8e 74 // Threading
doubster 0:2a96017a6c8e 75 void function_thread3(void const *name){
doubster 0:2a96017a6c8e 76 FILE *wave_file;
doubster 0:2a96017a6c8e 77 //printf("\n\n\nHello, wave world!\n");
doubster 0:2a96017a6c8e 78 while(true){
doubster 0:2a96017a6c8e 79 if(hitvariable == 1){
doubster 0:2a96017a6c8e 80 wave_file=fopen("/sd/wavfiles/pac_bonus.wav","r");
doubster 0:2a96017a6c8e 81 waver.play(wave_file);
doubster 0:2a96017a6c8e 82 fclose(wave_file);
doubster 0:2a96017a6c8e 83 hitvariable = 0;
doubster 0:2a96017a6c8e 84 //wait(.2);
doubster 0:2a96017a6c8e 85 }
doubster 0:2a96017a6c8e 86 }
doubster 0:2a96017a6c8e 87 }
doubster 0:2a96017a6c8e 88
doubster 0:2a96017a6c8e 89 // ULCD Functions
doubster 0:2a96017a6c8e 90 void DrawPaddle(int x, int y,int color){
doubster 0:2a96017a6c8e 91 // Green paddles
doubster 0:2a96017a6c8e 92 uLCD.filled_rectangle(x, y, x+paddlesizex, y+paddlesizey, color);
doubster 0:2a96017a6c8e 93 }
doubster 0:2a96017a6c8e 94
doubster 0:2a96017a6c8e 95 void DrawBall(int x, int y,int color){
doubster 0:2a96017a6c8e 96 uLCD.filled_circle(x, y, ballradius, color);
doubster 0:2a96017a6c8e 97 }
doubster 0:2a96017a6c8e 98
doubster 0:2a96017a6c8e 99 int main() {
doubster 0:2a96017a6c8e 100 // Begin the game
doubster 0:2a96017a6c8e 101 Sound("start");
doubster 0:2a96017a6c8e 102
doubster 0:2a96017a6c8e 103 // Thread for Sound
doubster 0:2a96017a6c8e 104 Thread thread3(function_thread3);
doubster 0:2a96017a6c8e 105
doubster 0:2a96017a6c8e 106 // Baudrate
doubster 0:2a96017a6c8e 107 uLCD.baudrate(300000);
doubster 0:2a96017a6c8e 108 int initialphotocell = photocellleft*100/2;
doubster 0:2a96017a6c8e 109 //uLCD.printf("%d",initialphotocell);
doubster 0:2a96017a6c8e 110 //wait(10);
doubster 0:2a96017a6c8e 111 // Rectangle
doubster 0:2a96017a6c8e 112 DrawPaddle(paddlelx,paddlely,paddlecolor);
doubster 0:2a96017a6c8e 113 //wait(5);
doubster 0:2a96017a6c8e 114 DrawPaddle(paddlerx,paddlery,paddlecolor);
doubster 0:2a96017a6c8e 115
doubster 0:2a96017a6c8e 116 DrawBall(ballx,bally,ballcolor);
doubster 0:2a96017a6c8e 117
doubster 0:2a96017a6c8e 118 while(true){
doubster 1:4352a2c0a4af 119 // Update Positions
doubster 0:2a96017a6c8e 120 oldballx = ballx;
doubster 0:2a96017a6c8e 121 oldbally = bally;
doubster 0:2a96017a6c8e 122 ballx += ballxincr;
doubster 0:2a96017a6c8e 123 bally += ballyincr;
doubster 0:2a96017a6c8e 124 oldpaddlely = paddlely;
doubster 0:2a96017a6c8e 125 oldpaddlery = paddlery;
doubster 0:2a96017a6c8e 126 paddlely += paddlelincr;
doubster 0:2a96017a6c8e 127 paddlery += paddlerincr;
doubster 0:2a96017a6c8e 128
doubster 1:4352a2c0a4af 129 // Ball Collision with right wall
doubster 0:2a96017a6c8e 130 if(ballx+ballradius>=border){
doubster 0:2a96017a6c8e 131 // Lose
doubster 0:2a96017a6c8e 132 //ballxincr = -2;
doubster 0:2a96017a6c8e 133 Sound("end");
doubster 0:2a96017a6c8e 134 ballx = border/2;
doubster 0:2a96017a6c8e 135 bally = rand() % 100;
doubster 0:2a96017a6c8e 136 ballxincr = -1;
doubster 0:2a96017a6c8e 137 ballyincr = -ballyincr;
doubster 0:2a96017a6c8e 138 //hitvariable = 1;
doubster 0:2a96017a6c8e 139 //Sound("hit");
doubster 0:2a96017a6c8e 140 }
doubster 1:4352a2c0a4af 141 // Ball Collision with left wall
doubster 0:2a96017a6c8e 142 else if(ballx<=0){
doubster 0:2a96017a6c8e 143 // Lose
doubster 0:2a96017a6c8e 144 Sound("end");
doubster 0:2a96017a6c8e 145 ballx = border/2;
doubster 0:2a96017a6c8e 146 bally = rand() % 100;
doubster 0:2a96017a6c8e 147 ballxincr = 1;
doubster 0:2a96017a6c8e 148 ballyincr = -ballyincr;
doubster 0:2a96017a6c8e 149 //hitvariable = 1;
doubster 0:2a96017a6c8e 150 //Sound("hit");
doubster 0:2a96017a6c8e 151 }
doubster 1:4352a2c0a4af 152 // Ball Collision with top and Bottom
doubster 0:2a96017a6c8e 153 if(bally+ballradius>=border){
doubster 0:2a96017a6c8e 154 ballyincr = -1;
doubster 0:2a96017a6c8e 155 hitvariable = 1;
doubster 0:2a96017a6c8e 156 //Sound("hit");
doubster 0:2a96017a6c8e 157 }
doubster 0:2a96017a6c8e 158 else if(bally<=0){
doubster 0:2a96017a6c8e 159 ballyincr = 1;
doubster 0:2a96017a6c8e 160 hitvariable = 1;
doubster 0:2a96017a6c8e 161 //Sound("hit");
doubster 0:2a96017a6c8e 162 }
doubster 0:2a96017a6c8e 163
doubster 0:2a96017a6c8e 164 // Left Paddle Collisions
doubster 0:2a96017a6c8e 165 if(ballx-ballradius<=paddlelx+paddlesizex && bally+ballradius>paddlely && bally-ballradius<paddlely+paddlesizey){
doubster 0:2a96017a6c8e 166 ballxincr = 1;
doubster 0:2a96017a6c8e 167 }
doubster 0:2a96017a6c8e 168 // Right Paddle Collision
doubster 0:2a96017a6c8e 169 else if(ballx+ballradius>=paddlerx && bally+ballradius>paddlery && bally-ballradius<paddlery+paddlesizey){
doubster 0:2a96017a6c8e 170 ballxincr = -1;
doubster 0:2a96017a6c8e 171 }
doubster 1:4352a2c0a4af 172 // Paddle not fall off the screen
doubster 0:2a96017a6c8e 173 if(paddlely<0){
doubster 0:2a96017a6c8e 174 paddlely = 0;
doubster 0:2a96017a6c8e 175 //paddlelincr = 1;
doubster 0:2a96017a6c8e 176 }
doubster 0:2a96017a6c8e 177 else if(paddlely+paddlesizey>=border){
doubster 0:2a96017a6c8e 178 paddlely = border - paddlesizey;
doubster 0:2a96017a6c8e 179 //paddlelincr = -1;
doubster 0:2a96017a6c8e 180 }
doubster 0:2a96017a6c8e 181 if(paddlery<=0){
doubster 0:2a96017a6c8e 182 paddlery = 0;
doubster 0:2a96017a6c8e 183 //paddlerincr = 1;
doubster 0:2a96017a6c8e 184 }
doubster 0:2a96017a6c8e 185 else if(paddlery+paddlesizey>=border){
doubster 0:2a96017a6c8e 186 paddlery = border - paddlesizey;
doubster 0:2a96017a6c8e 187 //paddlerincr = -1;
doubster 0:2a96017a6c8e 188 }
doubster 1:4352a2c0a4af 189 // Get light from Photocells
doubster 0:2a96017a6c8e 190 if(photocellleft*100 >initialphotocell)
doubster 0:2a96017a6c8e 191 {
doubster 0:2a96017a6c8e 192 paddlelincr = -2;
doubster 0:2a96017a6c8e 193 }
doubster 0:2a96017a6c8e 194 else
doubster 0:2a96017a6c8e 195 {
doubster 0:2a96017a6c8e 196 paddlelincr = 2;
doubster 0:2a96017a6c8e 197 }
doubster 0:2a96017a6c8e 198 if(photocellright*100 > initialphotocell)
doubster 0:2a96017a6c8e 199 {
doubster 0:2a96017a6c8e 200 paddlerincr = -2;
doubster 0:2a96017a6c8e 201 }
doubster 0:2a96017a6c8e 202 else
doubster 0:2a96017a6c8e 203 {
doubster 0:2a96017a6c8e 204 paddlerincr = 2;
doubster 0:2a96017a6c8e 205 }
doubster 0:2a96017a6c8e 206 //oldphotocell = photocell;
doubster 0:2a96017a6c8e 207 DrawBall(oldballx,oldbally,black);
doubster 0:2a96017a6c8e 208 DrawBall(ballx,bally,ballcolor);
doubster 0:2a96017a6c8e 209 DrawPaddle(paddlelx,oldpaddlely,black);
doubster 0:2a96017a6c8e 210 DrawPaddle(paddlerx,oldpaddlery,black);
doubster 0:2a96017a6c8e 211 DrawPaddle(paddlelx,paddlely,paddlecolor);
doubster 0:2a96017a6c8e 212 DrawPaddle(paddlerx,paddlery,paddlecolor);
doubster 0:2a96017a6c8e 213 }
doubster 0:2a96017a6c8e 214 }
doubster 0:2a96017a6c8e 215
doubster 0:2a96017a6c8e 216
doubster 0:2a96017a6c8e 217
doubster 0:2a96017a6c8e 218
doubster 0:2a96017a6c8e 219
doubster 0:2a96017a6c8e 220
doubster 0:2a96017a6c8e 221
doubster 0:2a96017a6c8e 222
doubster 0:2a96017a6c8e 223
doubster 0:2a96017a6c8e 224
doubster 0:2a96017a6c8e 225
doubster 0:2a96017a6c8e 226
doubster 0:2a96017a6c8e 227
doubster 0:2a96017a6c8e 228