Sound update

Dependencies:   4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed

Committer:
jstephens78
Date:
Mon Dec 05 20:51:36 2022 +0000
Revision:
20:73e4f12277bd
Parent:
19:6d9bee043ede
Child:
22:601e6f9077e4
All four threads launch, air hockey is the default

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jstephens78 19:6d9bee043ede 1 #include "tetris.h"
jstephens78 19:6d9bee043ede 2 #include "globals.h"
jstephens78 19:6d9bee043ede 3
jstephens78 19:6d9bee043ede 4 #include "mbed.h"
jstephens78 19:6d9bee043ede 5 #include "Game.h"
jstephens78 19:6d9bee043ede 6 #include "PinDetect.h"
jstephens78 19:6d9bee043ede 7 //#include "Speaker.h"
jstephens78 19:6d9bee043ede 8 //#include "TextLCD.h"
jstephens78 19:6d9bee043ede 9 //#include "Shiftbrite.h"
jstephens78 19:6d9bee043ede 10 //#include "SDFileSystem.h"
jstephens78 19:6d9bee043ede 11 //#include "wave_player.h"
jstephens78 19:6d9bee043ede 12 #include "rtos.h"
jstephens78 19:6d9bee043ede 13
jstephens78 19:6d9bee043ede 14 //TextLCD textLCD(p26, p25, p24, p23, p22, p15);
jstephens78 19:6d9bee043ede 15 //Speaker mySpeaker(p21);
jstephens78 19:6d9bee043ede 16 //Shiftbrite myShiftbrite(p9, p10, p11, p12, p13);
jstephens78 19:6d9bee043ede 17 //SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
jstephens78 19:6d9bee043ede 18
jstephens78 19:6d9bee043ede 19 PinDetect LEFT_KEY(p16); // need to use NavSwitch for this
jstephens78 19:6d9bee043ede 20 PinDetect RIGHT_KEY(p19);
jstephens78 19:6d9bee043ede 21 PinDetect ROTATE_KEY(p17);
jstephens78 19:6d9bee043ede 22 PinDetect DOWN_KEY(p30);
jstephens78 19:6d9bee043ede 23
jstephens78 19:6d9bee043ede 24 int SinglePiecePoints = 50;
jstephens78 19:6d9bee043ede 25 int LineClearPoints = 200;
jstephens78 19:6d9bee043ede 26 int key_input = 0;
jstephens78 19:6d9bee043ede 27 bool gameStarted = false;
jstephens78 19:6d9bee043ede 28 void input_left() // FIX
jstephens78 19:6d9bee043ede 29 {
jstephens78 19:6d9bee043ede 30 if(!gameStarted)
jstephens78 19:6d9bee043ede 31 { gameStarted=true;
jstephens78 19:6d9bee043ede 32 return;
jstephens78 19:6d9bee043ede 33 }
jstephens78 19:6d9bee043ede 34 key_input = 1;
jstephens78 19:6d9bee043ede 35 //mySpeaker.PlayNote(400.0,0.05,0.025);
jstephens78 19:6d9bee043ede 36 //mySpeaker.PlayNote(500.0,0.05,0.025);
jstephens78 19:6d9bee043ede 37 }
jstephens78 19:6d9bee043ede 38
jstephens78 19:6d9bee043ede 39 void input_right()
jstephens78 19:6d9bee043ede 40 {
jstephens78 19:6d9bee043ede 41 if(!gameStarted)
jstephens78 19:6d9bee043ede 42 { gameStarted=true;
jstephens78 19:6d9bee043ede 43 return;
jstephens78 19:6d9bee043ede 44 }
jstephens78 19:6d9bee043ede 45 key_input = 2;
jstephens78 19:6d9bee043ede 46 //mySpeaker.PlayNote(400.0,0.05,0.025);
jstephens78 19:6d9bee043ede 47 //mySpeaker.PlayNote(500.0,0.05,0.025);
jstephens78 19:6d9bee043ede 48 }
jstephens78 19:6d9bee043ede 49
jstephens78 19:6d9bee043ede 50 void input_rotate()
jstephens78 19:6d9bee043ede 51 {
jstephens78 19:6d9bee043ede 52 if(!gameStarted)
jstephens78 19:6d9bee043ede 53 { gameStarted=true;
jstephens78 19:6d9bee043ede 54 return;
jstephens78 19:6d9bee043ede 55 }
jstephens78 19:6d9bee043ede 56 key_input = 3;
jstephens78 19:6d9bee043ede 57 /*mySpeaker.PlayNote(600.0,0.05,0.025);
jstephens78 19:6d9bee043ede 58 mySpeaker.PlayNote(700.0,0.05,0.025);
jstephens78 19:6d9bee043ede 59 mySpeaker.PlayNote(800.0,0.05,0.025);
jstephens78 19:6d9bee043ede 60 mySpeaker.PlayNote(900.0,0.05,0.025);*/
jstephens78 19:6d9bee043ede 61 }
jstephens78 19:6d9bee043ede 62
jstephens78 19:6d9bee043ede 63 void input_down()
jstephens78 19:6d9bee043ede 64 {
jstephens78 19:6d9bee043ede 65 if(!gameStarted)
jstephens78 19:6d9bee043ede 66 { gameStarted=true;
jstephens78 19:6d9bee043ede 67 return;
jstephens78 19:6d9bee043ede 68 }
jstephens78 19:6d9bee043ede 69 key_input=4;
jstephens78 19:6d9bee043ede 70 /*mySpeaker.PlayNote(500.0,0.05,0.025);
jstephens78 19:6d9bee043ede 71 mySpeaker.PlayNote(1500.0,0.05,0.025);
jstephens78 19:6d9bee043ede 72 mySpeaker.PlayNote(500.0,0.05,0.025);
jstephens78 19:6d9bee043ede 73 mySpeaker.PlayNote(1500.0,0.05,0.025);*/
jstephens78 19:6d9bee043ede 74 }
jstephens78 19:6d9bee043ede 75
jstephens78 19:6d9bee043ede 76 void clear_board()
jstephens78 19:6d9bee043ede 77 {
jstephens78 19:6d9bee043ede 78 uLCD.filled_rectangle(20,0,79,128,0);
jstephens78 19:6d9bee043ede 79 }
jstephens78 19:6d9bee043ede 80
jstephens78 19:6d9bee043ede 81 void clear_next_piece()
jstephens78 19:6d9bee043ede 82 {
jstephens78 19:6d9bee043ede 83 uLCD.filled_rectangle(92,20,122,50,0);
jstephens78 19:6d9bee043ede 84 }
jstephens78 19:6d9bee043ede 85
jstephens78 19:6d9bee043ede 86 /*
jstephens78 19:6d9bee043ede 87 void UpdateGameStatus(int points,int lines)
jstephens78 19:6d9bee043ede 88 {
jstephens78 19:6d9bee043ede 89 textLCD.locate(7,0);
jstephens78 19:6d9bee043ede 90 textLCD.printf("%d",points);
jstephens78 19:6d9bee043ede 91 textLCD.locate(13,1);
jstephens78 19:6d9bee043ede 92 textLCD.printf("%d",lines);
jstephens78 19:6d9bee043ede 93 }*/
jstephens78 19:6d9bee043ede 94
jstephens78 19:6d9bee043ede 95 /* ShiftBright Code
jstephens78 19:6d9bee043ede 96 void FlashLight(void const *args)
jstephens78 19:6d9bee043ede 97 {
jstephens78 19:6d9bee043ede 98 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 99 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 100
jstephens78 19:6d9bee043ede 101 myShiftbrite.RGB(0,0,42);
jstephens78 19:6d9bee043ede 102 myShiftbrite.RGB(0,0,42);
jstephens78 19:6d9bee043ede 103 Thread::wait(100);
jstephens78 19:6d9bee043ede 104
jstephens78 19:6d9bee043ede 105
jstephens78 19:6d9bee043ede 106 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 107 myShiftbrite.RGB(0,42,0);
jstephens78 19:6d9bee043ede 108 Thread::wait(100);
jstephens78 19:6d9bee043ede 109
jstephens78 19:6d9bee043ede 110 myShiftbrite.RGB(0,0,42);
jstephens78 19:6d9bee043ede 111 myShiftbrite.RGB(0,0,42);
jstephens78 19:6d9bee043ede 112 Thread::wait(100);
jstephens78 19:6d9bee043ede 113
jstephens78 19:6d9bee043ede 114 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 115 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 116 }
jstephens78 19:6d9bee043ede 117
jstephens78 19:6d9bee043ede 118 void GameOverLight(void const *args)
jstephens78 19:6d9bee043ede 119 {
jstephens78 19:6d9bee043ede 120
jstephens78 19:6d9bee043ede 121 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 122 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 123
jstephens78 19:6d9bee043ede 124 myShiftbrite.RGB(0,0,200);
jstephens78 19:6d9bee043ede 125 Thread::wait(100);
jstephens78 19:6d9bee043ede 126 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 127 Thread::wait(100);
jstephens78 19:6d9bee043ede 128 myShiftbrite.RGB(0,0,200);
jstephens78 19:6d9bee043ede 129 Thread::wait(100);
jstephens78 19:6d9bee043ede 130 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 131 Thread::wait(100);
jstephens78 19:6d9bee043ede 132 myShiftbrite.RGB(0,0,200);
jstephens78 19:6d9bee043ede 133 Thread::wait(100);
jstephens78 19:6d9bee043ede 134 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 135 Thread::wait(100);
jstephens78 19:6d9bee043ede 136 myShiftbrite.RGB(0,0,200);
jstephens78 19:6d9bee043ede 137 Thread::wait(100);
jstephens78 19:6d9bee043ede 138 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 139 Thread::wait(100);
jstephens78 19:6d9bee043ede 140 myShiftbrite.RGB(0,0,200);
jstephens78 19:6d9bee043ede 141 Thread::wait(100);
jstephens78 19:6d9bee043ede 142 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 143 Thread::wait(100);
jstephens78 19:6d9bee043ede 144 myShiftbrite.RGB(0,0,200);
jstephens78 19:6d9bee043ede 145 Thread::wait(100);
jstephens78 19:6d9bee043ede 146 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 147 Thread::wait(100);
jstephens78 19:6d9bee043ede 148 myShiftbrite.RGB(0,0,200);
jstephens78 19:6d9bee043ede 149 Thread::wait(100);
jstephens78 19:6d9bee043ede 150 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 151 Thread::wait(100);
jstephens78 19:6d9bee043ede 152 myShiftbrite.RGB(0,0,200);
jstephens78 19:6d9bee043ede 153 Thread::wait(100);
jstephens78 19:6d9bee043ede 154 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 155 Thread::wait(100);
jstephens78 19:6d9bee043ede 156 myShiftbrite.RGB(0,0,200);
jstephens78 19:6d9bee043ede 157 Thread::wait(100);
jstephens78 19:6d9bee043ede 158 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 159 Thread::wait(100);
jstephens78 19:6d9bee043ede 160 myShiftbrite.RGB(0,0,200);
jstephens78 19:6d9bee043ede 161 Thread::wait(100);
jstephens78 19:6d9bee043ede 162 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 163 }
jstephens78 19:6d9bee043ede 164
jstephens78 19:6d9bee043ede 165 void GameStartLight(void const *args)
jstephens78 19:6d9bee043ede 166 {
jstephens78 19:6d9bee043ede 167
jstephens78 19:6d9bee043ede 168 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 169 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 170
jstephens78 19:6d9bee043ede 171 myShiftbrite.RGB(0,200,0);
jstephens78 19:6d9bee043ede 172 Thread::wait(100);
jstephens78 19:6d9bee043ede 173 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 174 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 175 Thread::wait(100);
jstephens78 19:6d9bee043ede 176 myShiftbrite.RGB(0,200,0);
jstephens78 19:6d9bee043ede 177 Thread::wait(100);
jstephens78 19:6d9bee043ede 178 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 179 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 180 Thread::wait(100);
jstephens78 19:6d9bee043ede 181 myShiftbrite.RGB(0,200,0);
jstephens78 19:6d9bee043ede 182 Thread::wait(100);
jstephens78 19:6d9bee043ede 183 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 184 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 185 Thread::wait(100);
jstephens78 19:6d9bee043ede 186 myShiftbrite.RGB(0,200,0);
jstephens78 19:6d9bee043ede 187 Thread::wait(100);
jstephens78 19:6d9bee043ede 188 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 189 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 190 Thread::wait(100);
jstephens78 19:6d9bee043ede 191 myShiftbrite.RGB(0,200,0);
jstephens78 19:6d9bee043ede 192 Thread::wait(100);
jstephens78 19:6d9bee043ede 193 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 194 myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 195
jstephens78 19:6d9bee043ede 196 } */
jstephens78 19:6d9bee043ede 197
jstephens78 19:6d9bee043ede 198 /* Speaker Code
jstephens78 19:6d9bee043ede 199 void PlayStartSound()
jstephens78 19:6d9bee043ede 200 {
jstephens78 19:6d9bee043ede 201 mySpeaker.PlayNote(500.0,0.05,0.025);
jstephens78 19:6d9bee043ede 202 mySpeaker.PlayNote(600.0,0.05,0.025);
jstephens78 19:6d9bee043ede 203 mySpeaker.PlayNote(700.0,0.05,0.025);
jstephens78 19:6d9bee043ede 204 mySpeaker.PlayNote(800.0,0.05,0.025);
jstephens78 19:6d9bee043ede 205 mySpeaker.PlayNote(900.0,0.05,0.025);
jstephens78 19:6d9bee043ede 206 mySpeaker.PlayNote(1000.0,0.05,0.025);
jstephens78 19:6d9bee043ede 207 mySpeaker.PlayNote(1100.0,0.05,0.025);
jstephens78 19:6d9bee043ede 208 mySpeaker.PlayNote(1200.0,0.05,0.025);
jstephens78 19:6d9bee043ede 209 mySpeaker.PlayNote(600.0,0.05,0.025);
jstephens78 19:6d9bee043ede 210 mySpeaker.PlayNote(700.0,0.05,0.025);
jstephens78 19:6d9bee043ede 211 mySpeaker.PlayNote(800.0,0.05,0.025);
jstephens78 19:6d9bee043ede 212 mySpeaker.PlayNote(900.0,0.05,0.025);
jstephens78 19:6d9bee043ede 213 mySpeaker.PlayNote(1000.0,0.05,0.025);
jstephens78 19:6d9bee043ede 214 mySpeaker.PlayNote(1100.0,0.05,0.025);
jstephens78 19:6d9bee043ede 215 mySpeaker.PlayNote(1200.0,0.05,0.025);
jstephens78 19:6d9bee043ede 216 mySpeaker.PlayNote(1300.0,0.05,0.025);
jstephens78 19:6d9bee043ede 217 mySpeaker.PlayNote(700.0,0.05,0.025);
jstephens78 19:6d9bee043ede 218 mySpeaker.PlayNote(800.0,0.05,0.025);
jstephens78 19:6d9bee043ede 219 mySpeaker.PlayNote(900.0,0.05,0.025);
jstephens78 19:6d9bee043ede 220 mySpeaker.PlayNote(1000.0,0.05,0.025);
jstephens78 19:6d9bee043ede 221 mySpeaker.PlayNote(1100.0,0.05,0.025);
jstephens78 19:6d9bee043ede 222 mySpeaker.PlayNote(1200.0,0.05,0.025);
jstephens78 19:6d9bee043ede 223 mySpeaker.PlayNote(1300.0,0.05,0.025);
jstephens78 19:6d9bee043ede 224 mySpeaker.PlayNote(1400.0,0.05,0.025);
jstephens78 19:6d9bee043ede 225 }
jstephens78 19:6d9bee043ede 226
jstephens78 19:6d9bee043ede 227 void PlayOverSound()
jstephens78 19:6d9bee043ede 228 {
jstephens78 19:6d9bee043ede 229 mySpeaker.PlayNote(1400.0,0.05,0.025);
jstephens78 19:6d9bee043ede 230 mySpeaker.PlayNote(1300.0,0.05,0.025);
jstephens78 19:6d9bee043ede 231 mySpeaker.PlayNote(1200.0,0.05,0.025);
jstephens78 19:6d9bee043ede 232 mySpeaker.PlayNote(1100.0,0.05,0.025);
jstephens78 19:6d9bee043ede 233 mySpeaker.PlayNote(1000.0,0.05,0.025);
jstephens78 19:6d9bee043ede 234 mySpeaker.PlayNote(900.0,0.05,0.025);
jstephens78 19:6d9bee043ede 235 mySpeaker.PlayNote(800.0,0.05,0.025);
jstephens78 19:6d9bee043ede 236 mySpeaker.PlayNote(700.0,0.05,0.025);
jstephens78 19:6d9bee043ede 237 mySpeaker.PlayNote(1300.0,0.05,0.025);
jstephens78 19:6d9bee043ede 238 mySpeaker.PlayNote(1200.0,0.05,0.025);
jstephens78 19:6d9bee043ede 239 mySpeaker.PlayNote(1100.0,0.05,0.025);
jstephens78 19:6d9bee043ede 240 mySpeaker.PlayNote(1000.0,0.05,0.025);
jstephens78 19:6d9bee043ede 241 mySpeaker.PlayNote(900.0,0.05,0.025);
jstephens78 19:6d9bee043ede 242 mySpeaker.PlayNote(800.0,0.05,0.025);
jstephens78 19:6d9bee043ede 243 mySpeaker.PlayNote(700.0,0.05,0.025);
jstephens78 19:6d9bee043ede 244 mySpeaker.PlayNote(600.0,0.05,0.025);
jstephens78 19:6d9bee043ede 245 mySpeaker.PlayNote(1200.0,0.05,0.025);
jstephens78 19:6d9bee043ede 246 mySpeaker.PlayNote(1100.0,0.05,0.025);
jstephens78 19:6d9bee043ede 247 mySpeaker.PlayNote(1000.0,0.05,0.025);
jstephens78 19:6d9bee043ede 248 mySpeaker.PlayNote(900.0,0.05,0.025);
jstephens78 19:6d9bee043ede 249 mySpeaker.PlayNote(800.0,0.05,0.025);
jstephens78 19:6d9bee043ede 250 mySpeaker.PlayNote(700.0,0.05,0.025);
jstephens78 19:6d9bee043ede 251 mySpeaker.PlayNote(600.0,0.05,0.025);
jstephens78 19:6d9bee043ede 252 mySpeaker.PlayNote(500.0,0.05,0.025);
jstephens78 19:6d9bee043ede 253 }
jstephens78 19:6d9bee043ede 254
jstephens78 19:6d9bee043ede 255 void PlayClearSound()
jstephens78 19:6d9bee043ede 256 {
jstephens78 19:6d9bee043ede 257 mySpeaker.PlayNote(900.0,0.2,0.025);
jstephens78 19:6d9bee043ede 258 mySpeaker.PlayNote(1000.0,0.2,0.025);
jstephens78 19:6d9bee043ede 259 mySpeaker.PlayNote(1100.0,0.2,0.025);
jstephens78 19:6d9bee043ede 260 mySpeaker.PlayNote(1000.0,0.2,0.025);
jstephens78 19:6d9bee043ede 261 mySpeaker.PlayNote(9000.0,0.2,0.025);
jstephens78 19:6d9bee043ede 262 } */
jstephens78 19:6d9bee043ede 263
jstephens78 19:6d9bee043ede 264 int RandomGen(char range)
jstephens78 19:6d9bee043ede 265 {
jstephens78 19:6d9bee043ede 266 pc.printf("%c",range);
jstephens78 19:6d9bee043ede 267 while(!pc.readable()) wait(0.5);
jstephens78 19:6d9bee043ede 268 char buffer[4];
jstephens78 19:6d9bee043ede 269 pc.gets(buffer,4);
jstephens78 19:6d9bee043ede 270 int i = buffer[0]-'0';
jstephens78 19:6d9bee043ede 271 return i;
jstephens78 19:6d9bee043ede 272 }
jstephens78 19:6d9bee043ede 273
jstephens78 19:6d9bee043ede 274 void tetrisGame(void)
jstephens78 19:6d9bee043ede 275 {
jstephens78 19:6d9bee043ede 276 //hardware setup // FIX
jstephens78 19:6d9bee043ede 277 LEFT_KEY.mode(PullUp);
jstephens78 19:6d9bee043ede 278 RIGHT_KEY.mode(PullUp);
jstephens78 19:6d9bee043ede 279 ROTATE_KEY.mode(PullUp);
jstephens78 19:6d9bee043ede 280 DOWN_KEY.mode(PullUp);
jstephens78 19:6d9bee043ede 281
jstephens78 19:6d9bee043ede 282 LEFT_KEY.attach_deasserted(&input_left);
jstephens78 19:6d9bee043ede 283 RIGHT_KEY.attach_deasserted(&input_right);
jstephens78 19:6d9bee043ede 284 ROTATE_KEY.attach_deasserted(&input_rotate);
jstephens78 19:6d9bee043ede 285 DOWN_KEY.attach_deasserted(&input_down);
jstephens78 19:6d9bee043ede 286
jstephens78 19:6d9bee043ede 287 LEFT_KEY.setSampleFrequency();
jstephens78 19:6d9bee043ede 288 RIGHT_KEY.setSampleFrequency();
jstephens78 19:6d9bee043ede 289 ROTATE_KEY.setSampleFrequency();
jstephens78 19:6d9bee043ede 290 DOWN_KEY.setSampleFrequency(); // FIX
jstephens78 19:6d9bee043ede 291 uLCD.baudrate(3000000);
jstephens78 19:6d9bee043ede 292
jstephens78 20:73e4f12277bd 293 while (true) {
jstephens78 20:73e4f12277bd 294 Thread::wait(200);
jstephens78 20:73e4f12277bd 295 }
jstephens78 20:73e4f12277bd 296
jstephens78 19:6d9bee043ede 297 //myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 298 //myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 299
jstephens78 19:6d9bee043ede 300 /* SD card used for Startup Image
jstephens78 19:6d9bee043ede 301 sd.disk_initialize(); // ? might need to delete
jstephens78 19:6d9bee043ede 302 uLCD.media_init();
jstephens78 19:6d9bee043ede 303 uLCD.set_sector_address(0x001D, 0x7801);
jstephens78 19:6d9bee043ede 304 uLCD.display_image(0,0);*/
jstephens78 19:6d9bee043ede 305
jstephens78 19:6d9bee043ede 306 /*textLCD.cls();
jstephens78 19:6d9bee043ede 307 textLCD.locate(0,0);
jstephens78 19:6d9bee043ede 308 textLCD.printf("Waiting for PC...");*/
jstephens78 19:6d9bee043ede 309
jstephens78 19:6d9bee043ede 310 pc.baud(9600);
jstephens78 19:6d9bee043ede 311 pc.format(8,SerialBase::None,1);
jstephens78 19:6d9bee043ede 312 pc.printf("0");
jstephens78 19:6d9bee043ede 313 while(!pc.readable()) wait(0.5);
jstephens78 19:6d9bee043ede 314 char buffer[4];
jstephens78 19:6d9bee043ede 315 pc.gets(buffer,4);
jstephens78 19:6d9bee043ede 316 /*
jstephens78 19:6d9bee043ede 317 //wait for game start
jstephens78 19:6d9bee043ede 318 textLCD.cls();
jstephens78 19:6d9bee043ede 319 textLCD.locate(0,0);
jstephens78 19:6d9bee043ede 320 textLCD.printf("TETRIS READY!!");
jstephens78 19:6d9bee043ede 321 textLCD.locate(0,1);
jstephens78 19:6d9bee043ede 322 textLCD.printf("PRESS ANY KEY...");
jstephens78 19:6d9bee043ede 323 while(!gameStarted) wait(0.5);
jstephens78 19:6d9bee043ede 324 PlayStartSound();
jstephens78 19:6d9bee043ede 325 textLCD.cls();
jstephens78 19:6d9bee043ede 326 textLCD.printf("Starting game now...");
jstephens78 19:6d9bee043ede 327 wait(2);
jstephens78 19:6d9bee043ede 328 textLCD.cls();
jstephens78 19:6d9bee043ede 329 textLCD.locate(0,0);
jstephens78 19:6d9bee043ede 330 textLCD.printf("Points");
jstephens78 19:6d9bee043ede 331 textLCD.locate(0,1);
jstephens78 19:6d9bee043ede 332 textLCD.printf("Cleared Line");*/
jstephens78 19:6d9bee043ede 333
jstephens78 19:6d9bee043ede 334 //Thread t1(GameStartLight);
jstephens78 19:6d9bee043ede 335 //game classes init
jstephens78 19:6d9bee043ede 336 bool isGameOver = false;
jstephens78 19:6d9bee043ede 337 int mScreenHeight = 128;
jstephens78 19:6d9bee043ede 338 Pieces mPieces;
jstephens78 19:6d9bee043ede 339 Board mBoard (&mPieces, mScreenHeight);
jstephens78 19:6d9bee043ede 340 int a = RandomGen('a');
jstephens78 19:6d9bee043ede 341 int b = RandomGen('b');
jstephens78 19:6d9bee043ede 342 int c = RandomGen('a');
jstephens78 19:6d9bee043ede 343 int d = RandomGen('b');
jstephens78 19:6d9bee043ede 344 Game mGame (&mBoard, &mPieces, mScreenHeight, &uLCD,a,b,c,d);
jstephens78 19:6d9bee043ede 345
jstephens78 19:6d9bee043ede 346
jstephens78 19:6d9bee043ede 347 // ----- Main Loop -----
jstephens78 19:6d9bee043ede 348 int prevX=0;
jstephens78 19:6d9bee043ede 349 int prevY=0;
jstephens78 19:6d9bee043ede 350 int prevPiece=-1;
jstephens78 19:6d9bee043ede 351 int prevRot=0;
jstephens78 19:6d9bee043ede 352 Timer timer;
jstephens78 19:6d9bee043ede 353 timer.start();
jstephens78 19:6d9bee043ede 354 key_input=0;
jstephens78 19:6d9bee043ede 355 bool needErase = false;
jstephens78 19:6d9bee043ede 356 uLCD.cls();
jstephens78 19:6d9bee043ede 357 while (1)
jstephens78 19:6d9bee043ede 358 {
jstephens78 19:6d9bee043ede 359 if(isGameOver)
jstephens78 19:6d9bee043ede 360 {
jstephens78 19:6d9bee043ede 361 wait(1);
jstephens78 19:6d9bee043ede 362 continue;
jstephens78 19:6d9bee043ede 363 }
jstephens78 19:6d9bee043ede 364 // ----- Draw ----
jstephens78 19:6d9bee043ede 365 if(needErase)
jstephens78 19:6d9bee043ede 366 {
jstephens78 19:6d9bee043ede 367 mGame.ErasePiece(prevX,prevY,prevPiece,prevRot);
jstephens78 19:6d9bee043ede 368 needErase=false;
jstephens78 19:6d9bee043ede 369 }
jstephens78 19:6d9bee043ede 370 mGame.DrawScene();
jstephens78 19:6d9bee043ede 371
jstephens78 19:6d9bee043ede 372 prevX=mGame.mPosX;
jstephens78 19:6d9bee043ede 373 prevY=mGame.mPosY;
jstephens78 19:6d9bee043ede 374 prevPiece=mGame.mPiece;
jstephens78 19:6d9bee043ede 375 prevRot=mGame.mRotation;
jstephens78 19:6d9bee043ede 376
jstephens78 19:6d9bee043ede 377 // ----- Input -----
jstephens78 19:6d9bee043ede 378 switch (key_input)
jstephens78 19:6d9bee043ede 379 {
jstephens78 19:6d9bee043ede 380 case (2): //right
jstephens78 19:6d9bee043ede 381 {
jstephens78 19:6d9bee043ede 382 if (mBoard.IsPossibleMovement (mGame.mPosX + 1, mGame.mPosY, mGame.mPiece, mGame.mRotation))
jstephens78 19:6d9bee043ede 383 {mGame.mPosX++;needErase=true;}
jstephens78 19:6d9bee043ede 384 break;
jstephens78 19:6d9bee043ede 385 }
jstephens78 19:6d9bee043ede 386
jstephens78 19:6d9bee043ede 387 case (1): //left
jstephens78 19:6d9bee043ede 388 {
jstephens78 19:6d9bee043ede 389 if (mBoard.IsPossibleMovement (mGame.mPosX - 1, mGame.mPosY, mGame.mPiece, mGame.mRotation))
jstephens78 19:6d9bee043ede 390 {mGame.mPosX--;needErase=true;}
jstephens78 19:6d9bee043ede 391 break;
jstephens78 19:6d9bee043ede 392 }
jstephens78 19:6d9bee043ede 393
jstephens78 19:6d9bee043ede 394 case (4)://down
jstephens78 19:6d9bee043ede 395 {
jstephens78 19:6d9bee043ede 396 // Check collision from up to down
jstephens78 19:6d9bee043ede 397 while (mBoard.IsPossibleMovement(mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation)) { mGame.mPosY++; }
jstephens78 19:6d9bee043ede 398 needErase=true;
jstephens78 19:6d9bee043ede 399 mBoard.StorePiece (mGame.mPosX, mGame.mPosY - 1, mGame.mPiece, mGame.mRotation);
jstephens78 19:6d9bee043ede 400 mGame.AddPoints(SinglePiecePoints);
jstephens78 19:6d9bee043ede 401 int linesDeleted = mBoard.DeletePossibleLines ();
jstephens78 19:6d9bee043ede 402 if(linesDeleted>0)
jstephens78 19:6d9bee043ede 403 {
jstephens78 19:6d9bee043ede 404 mGame.AddClearedLines(linesDeleted);
jstephens78 19:6d9bee043ede 405 mGame.AddPoints(LineClearPoints*linesDeleted);
jstephens78 19:6d9bee043ede 406 //Thread t1(FlashLight);
jstephens78 19:6d9bee043ede 407 //PlayClearSound();
jstephens78 19:6d9bee043ede 408 clear_board();
jstephens78 19:6d9bee043ede 409 }
jstephens78 19:6d9bee043ede 410 //!!! UpdateGameStatus(mGame.GetPoints(),mGame.GetClearedLines());
jstephens78 19:6d9bee043ede 411
jstephens78 19:6d9bee043ede 412 if (mBoard.IsGameOver())
jstephens78 19:6d9bee043ede 413 {
jstephens78 19:6d9bee043ede 414 isGameOver=true;
jstephens78 19:6d9bee043ede 415 uLCD.cls();
jstephens78 19:6d9bee043ede 416
jstephens78 19:6d9bee043ede 417 // FIX add Game Over mechanic
jstephens78 19:6d9bee043ede 418
jstephens78 19:6d9bee043ede 419 //uLCD.media_init();
jstephens78 19:6d9bee043ede 420 //uLCD.set_sector_address(0x001D, 0x7842);
jstephens78 19:6d9bee043ede 421 //uLCD.display_image(0,0);
jstephens78 19:6d9bee043ede 422 //Thread t2(GameOverLight);
jstephens78 19:6d9bee043ede 423 //PlayOverSound();
jstephens78 19:6d9bee043ede 424
jstephens78 19:6d9bee043ede 425 }
jstephens78 19:6d9bee043ede 426
jstephens78 19:6d9bee043ede 427 if(!isGameOver)
jstephens78 19:6d9bee043ede 428 {
jstephens78 19:6d9bee043ede 429 mGame.CreateNewPiece(RandomGen('a'),RandomGen('b'));
jstephens78 19:6d9bee043ede 430 clear_next_piece();
jstephens78 19:6d9bee043ede 431 }
jstephens78 19:6d9bee043ede 432 break;
jstephens78 19:6d9bee043ede 433 }
jstephens78 19:6d9bee043ede 434
jstephens78 19:6d9bee043ede 435 case (3)://rotate
jstephens78 19:6d9bee043ede 436 {
jstephens78 19:6d9bee043ede 437 if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY, mGame.mPiece, (mGame.mRotation + 1) % 4))
jstephens78 19:6d9bee043ede 438 {mGame.mRotation = (mGame.mRotation + 1) % 4;needErase=true;}
jstephens78 19:6d9bee043ede 439 break;
jstephens78 19:6d9bee043ede 440 }
jstephens78 19:6d9bee043ede 441
jstephens78 19:6d9bee043ede 442 case (0):{break;}
jstephens78 19:6d9bee043ede 443 }
jstephens78 19:6d9bee043ede 444 key_input = 0;
jstephens78 19:6d9bee043ede 445
jstephens78 19:6d9bee043ede 446 // ----- Vertical movement -----
jstephens78 19:6d9bee043ede 447
jstephens78 19:6d9bee043ede 448 if(timer.read_ms()>WAIT_TIME)
jstephens78 19:6d9bee043ede 449 {
jstephens78 19:6d9bee043ede 450 needErase=true;
jstephens78 19:6d9bee043ede 451 if(!isGameOver)
jstephens78 19:6d9bee043ede 452 {
jstephens78 19:6d9bee043ede 453 if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY + 1, mGame.mPiece, mGame.mRotation))
jstephens78 19:6d9bee043ede 454 {
jstephens78 19:6d9bee043ede 455 mGame.mPosY++;
jstephens78 19:6d9bee043ede 456 }
jstephens78 19:6d9bee043ede 457 else
jstephens78 19:6d9bee043ede 458 {
jstephens78 19:6d9bee043ede 459 mBoard.StorePiece (mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation);
jstephens78 19:6d9bee043ede 460 mGame.AddPoints(SinglePiecePoints);
jstephens78 19:6d9bee043ede 461 int linesDeleted = mBoard.DeletePossibleLines ();
jstephens78 19:6d9bee043ede 462 if(linesDeleted>0)
jstephens78 19:6d9bee043ede 463 {
jstephens78 19:6d9bee043ede 464 mGame.AddClearedLines(linesDeleted);
jstephens78 19:6d9bee043ede 465 mGame.AddPoints(LineClearPoints*linesDeleted);
jstephens78 19:6d9bee043ede 466 //Thread t1(FlashLight);
jstephens78 19:6d9bee043ede 467 //PlayClearSound();
jstephens78 19:6d9bee043ede 468 clear_board();
jstephens78 19:6d9bee043ede 469 }
jstephens78 19:6d9bee043ede 470 //!!! UpdateGameStatus(mGame.GetPoints(),mGame.GetClearedLines());
jstephens78 19:6d9bee043ede 471
jstephens78 19:6d9bee043ede 472 if (mBoard.IsGameOver())
jstephens78 19:6d9bee043ede 473 {
jstephens78 19:6d9bee043ede 474 isGameOver=true;
jstephens78 19:6d9bee043ede 475 uLCD.cls();
jstephens78 19:6d9bee043ede 476
jstephens78 19:6d9bee043ede 477 // FIX add Game Over mechanic
jstephens78 19:6d9bee043ede 478
jstephens78 19:6d9bee043ede 479 //uLCD.media_init();
jstephens78 19:6d9bee043ede 480 //uLCD.set_sector_address(0x001D, 0x7842);
jstephens78 19:6d9bee043ede 481 //uLCD.display_image(0,0);
jstephens78 19:6d9bee043ede 482 //Thread t2(GameOverLight);
jstephens78 19:6d9bee043ede 483 //PlayOverSound();
jstephens78 19:6d9bee043ede 484 }
jstephens78 19:6d9bee043ede 485
jstephens78 19:6d9bee043ede 486 if(!isGameOver)
jstephens78 19:6d9bee043ede 487 {
jstephens78 19:6d9bee043ede 488 mGame.CreateNewPiece(RandomGen('a'),RandomGen('b'));
jstephens78 19:6d9bee043ede 489 clear_next_piece();
jstephens78 19:6d9bee043ede 490 }
jstephens78 19:6d9bee043ede 491 }
jstephens78 19:6d9bee043ede 492 }
jstephens78 19:6d9bee043ede 493 timer.reset();
jstephens78 19:6d9bee043ede 494 }
jstephens78 19:6d9bee043ede 495 wait(0.1);
jstephens78 19:6d9bee043ede 496 }
jstephens78 19:6d9bee043ede 497 }