Code for The game of Pong using Photocell Resistors
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player
main.cpp@1:4352a2c0a4af, 2015-10-21 (annotated)
- 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?
User | Revision | Line number | New 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 |