Sound update

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

Committer:
jstephens78
Date:
Sun Dec 04 23:31:28 2022 +0000
Revision:
19:6d9bee043ede
Child:
20:73e4f12277bd
Tetris compiles now

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 19:6d9bee043ede 293 //myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 294 //myShiftbrite.RGB(0,0,0);
jstephens78 19:6d9bee043ede 295
jstephens78 19:6d9bee043ede 296 /* SD card used for Startup Image
jstephens78 19:6d9bee043ede 297 sd.disk_initialize(); // ? might need to delete
jstephens78 19:6d9bee043ede 298 uLCD.media_init();
jstephens78 19:6d9bee043ede 299 uLCD.set_sector_address(0x001D, 0x7801);
jstephens78 19:6d9bee043ede 300 uLCD.display_image(0,0);*/
jstephens78 19:6d9bee043ede 301
jstephens78 19:6d9bee043ede 302 /*textLCD.cls();
jstephens78 19:6d9bee043ede 303 textLCD.locate(0,0);
jstephens78 19:6d9bee043ede 304 textLCD.printf("Waiting for PC...");*/
jstephens78 19:6d9bee043ede 305
jstephens78 19:6d9bee043ede 306 pc.baud(9600);
jstephens78 19:6d9bee043ede 307 pc.format(8,SerialBase::None,1);
jstephens78 19:6d9bee043ede 308 pc.printf("0");
jstephens78 19:6d9bee043ede 309 while(!pc.readable()) wait(0.5);
jstephens78 19:6d9bee043ede 310 char buffer[4];
jstephens78 19:6d9bee043ede 311 pc.gets(buffer,4);
jstephens78 19:6d9bee043ede 312 /*
jstephens78 19:6d9bee043ede 313 //wait for game start
jstephens78 19:6d9bee043ede 314 textLCD.cls();
jstephens78 19:6d9bee043ede 315 textLCD.locate(0,0);
jstephens78 19:6d9bee043ede 316 textLCD.printf("TETRIS READY!!");
jstephens78 19:6d9bee043ede 317 textLCD.locate(0,1);
jstephens78 19:6d9bee043ede 318 textLCD.printf("PRESS ANY KEY...");
jstephens78 19:6d9bee043ede 319 while(!gameStarted) wait(0.5);
jstephens78 19:6d9bee043ede 320 PlayStartSound();
jstephens78 19:6d9bee043ede 321 textLCD.cls();
jstephens78 19:6d9bee043ede 322 textLCD.printf("Starting game now...");
jstephens78 19:6d9bee043ede 323 wait(2);
jstephens78 19:6d9bee043ede 324 textLCD.cls();
jstephens78 19:6d9bee043ede 325 textLCD.locate(0,0);
jstephens78 19:6d9bee043ede 326 textLCD.printf("Points");
jstephens78 19:6d9bee043ede 327 textLCD.locate(0,1);
jstephens78 19:6d9bee043ede 328 textLCD.printf("Cleared Line");*/
jstephens78 19:6d9bee043ede 329
jstephens78 19:6d9bee043ede 330 //Thread t1(GameStartLight);
jstephens78 19:6d9bee043ede 331 //game classes init
jstephens78 19:6d9bee043ede 332 bool isGameOver = false;
jstephens78 19:6d9bee043ede 333 int mScreenHeight = 128;
jstephens78 19:6d9bee043ede 334 Pieces mPieces;
jstephens78 19:6d9bee043ede 335 Board mBoard (&mPieces, mScreenHeight);
jstephens78 19:6d9bee043ede 336 int a = RandomGen('a');
jstephens78 19:6d9bee043ede 337 int b = RandomGen('b');
jstephens78 19:6d9bee043ede 338 int c = RandomGen('a');
jstephens78 19:6d9bee043ede 339 int d = RandomGen('b');
jstephens78 19:6d9bee043ede 340 Game mGame (&mBoard, &mPieces, mScreenHeight, &uLCD,a,b,c,d);
jstephens78 19:6d9bee043ede 341
jstephens78 19:6d9bee043ede 342
jstephens78 19:6d9bee043ede 343 // ----- Main Loop -----
jstephens78 19:6d9bee043ede 344 int prevX=0;
jstephens78 19:6d9bee043ede 345 int prevY=0;
jstephens78 19:6d9bee043ede 346 int prevPiece=-1;
jstephens78 19:6d9bee043ede 347 int prevRot=0;
jstephens78 19:6d9bee043ede 348 Timer timer;
jstephens78 19:6d9bee043ede 349 timer.start();
jstephens78 19:6d9bee043ede 350 key_input=0;
jstephens78 19:6d9bee043ede 351 bool needErase = false;
jstephens78 19:6d9bee043ede 352 uLCD.cls();
jstephens78 19:6d9bee043ede 353 while (1)
jstephens78 19:6d9bee043ede 354 {
jstephens78 19:6d9bee043ede 355 if(isGameOver)
jstephens78 19:6d9bee043ede 356 {
jstephens78 19:6d9bee043ede 357 wait(1);
jstephens78 19:6d9bee043ede 358 continue;
jstephens78 19:6d9bee043ede 359 }
jstephens78 19:6d9bee043ede 360 // ----- Draw ----
jstephens78 19:6d9bee043ede 361 if(needErase)
jstephens78 19:6d9bee043ede 362 {
jstephens78 19:6d9bee043ede 363 mGame.ErasePiece(prevX,prevY,prevPiece,prevRot);
jstephens78 19:6d9bee043ede 364 needErase=false;
jstephens78 19:6d9bee043ede 365 }
jstephens78 19:6d9bee043ede 366 mGame.DrawScene();
jstephens78 19:6d9bee043ede 367
jstephens78 19:6d9bee043ede 368 prevX=mGame.mPosX;
jstephens78 19:6d9bee043ede 369 prevY=mGame.mPosY;
jstephens78 19:6d9bee043ede 370 prevPiece=mGame.mPiece;
jstephens78 19:6d9bee043ede 371 prevRot=mGame.mRotation;
jstephens78 19:6d9bee043ede 372
jstephens78 19:6d9bee043ede 373 // ----- Input -----
jstephens78 19:6d9bee043ede 374 switch (key_input)
jstephens78 19:6d9bee043ede 375 {
jstephens78 19:6d9bee043ede 376 case (2): //right
jstephens78 19:6d9bee043ede 377 {
jstephens78 19:6d9bee043ede 378 if (mBoard.IsPossibleMovement (mGame.mPosX + 1, mGame.mPosY, mGame.mPiece, mGame.mRotation))
jstephens78 19:6d9bee043ede 379 {mGame.mPosX++;needErase=true;}
jstephens78 19:6d9bee043ede 380 break;
jstephens78 19:6d9bee043ede 381 }
jstephens78 19:6d9bee043ede 382
jstephens78 19:6d9bee043ede 383 case (1): //left
jstephens78 19:6d9bee043ede 384 {
jstephens78 19:6d9bee043ede 385 if (mBoard.IsPossibleMovement (mGame.mPosX - 1, mGame.mPosY, mGame.mPiece, mGame.mRotation))
jstephens78 19:6d9bee043ede 386 {mGame.mPosX--;needErase=true;}
jstephens78 19:6d9bee043ede 387 break;
jstephens78 19:6d9bee043ede 388 }
jstephens78 19:6d9bee043ede 389
jstephens78 19:6d9bee043ede 390 case (4)://down
jstephens78 19:6d9bee043ede 391 {
jstephens78 19:6d9bee043ede 392 // Check collision from up to down
jstephens78 19:6d9bee043ede 393 while (mBoard.IsPossibleMovement(mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation)) { mGame.mPosY++; }
jstephens78 19:6d9bee043ede 394 needErase=true;
jstephens78 19:6d9bee043ede 395 mBoard.StorePiece (mGame.mPosX, mGame.mPosY - 1, mGame.mPiece, mGame.mRotation);
jstephens78 19:6d9bee043ede 396 mGame.AddPoints(SinglePiecePoints);
jstephens78 19:6d9bee043ede 397 int linesDeleted = mBoard.DeletePossibleLines ();
jstephens78 19:6d9bee043ede 398 if(linesDeleted>0)
jstephens78 19:6d9bee043ede 399 {
jstephens78 19:6d9bee043ede 400 mGame.AddClearedLines(linesDeleted);
jstephens78 19:6d9bee043ede 401 mGame.AddPoints(LineClearPoints*linesDeleted);
jstephens78 19:6d9bee043ede 402 //Thread t1(FlashLight);
jstephens78 19:6d9bee043ede 403 //PlayClearSound();
jstephens78 19:6d9bee043ede 404 clear_board();
jstephens78 19:6d9bee043ede 405 }
jstephens78 19:6d9bee043ede 406 //!!! UpdateGameStatus(mGame.GetPoints(),mGame.GetClearedLines());
jstephens78 19:6d9bee043ede 407
jstephens78 19:6d9bee043ede 408 if (mBoard.IsGameOver())
jstephens78 19:6d9bee043ede 409 {
jstephens78 19:6d9bee043ede 410 isGameOver=true;
jstephens78 19:6d9bee043ede 411 uLCD.cls();
jstephens78 19:6d9bee043ede 412
jstephens78 19:6d9bee043ede 413 // FIX add Game Over mechanic
jstephens78 19:6d9bee043ede 414
jstephens78 19:6d9bee043ede 415 //uLCD.media_init();
jstephens78 19:6d9bee043ede 416 //uLCD.set_sector_address(0x001D, 0x7842);
jstephens78 19:6d9bee043ede 417 //uLCD.display_image(0,0);
jstephens78 19:6d9bee043ede 418 //Thread t2(GameOverLight);
jstephens78 19:6d9bee043ede 419 //PlayOverSound();
jstephens78 19:6d9bee043ede 420
jstephens78 19:6d9bee043ede 421 }
jstephens78 19:6d9bee043ede 422
jstephens78 19:6d9bee043ede 423 if(!isGameOver)
jstephens78 19:6d9bee043ede 424 {
jstephens78 19:6d9bee043ede 425 mGame.CreateNewPiece(RandomGen('a'),RandomGen('b'));
jstephens78 19:6d9bee043ede 426 clear_next_piece();
jstephens78 19:6d9bee043ede 427 }
jstephens78 19:6d9bee043ede 428 break;
jstephens78 19:6d9bee043ede 429 }
jstephens78 19:6d9bee043ede 430
jstephens78 19:6d9bee043ede 431 case (3)://rotate
jstephens78 19:6d9bee043ede 432 {
jstephens78 19:6d9bee043ede 433 if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY, mGame.mPiece, (mGame.mRotation + 1) % 4))
jstephens78 19:6d9bee043ede 434 {mGame.mRotation = (mGame.mRotation + 1) % 4;needErase=true;}
jstephens78 19:6d9bee043ede 435 break;
jstephens78 19:6d9bee043ede 436 }
jstephens78 19:6d9bee043ede 437
jstephens78 19:6d9bee043ede 438 case (0):{break;}
jstephens78 19:6d9bee043ede 439 }
jstephens78 19:6d9bee043ede 440 key_input = 0;
jstephens78 19:6d9bee043ede 441
jstephens78 19:6d9bee043ede 442 // ----- Vertical movement -----
jstephens78 19:6d9bee043ede 443
jstephens78 19:6d9bee043ede 444 if(timer.read_ms()>WAIT_TIME)
jstephens78 19:6d9bee043ede 445 {
jstephens78 19:6d9bee043ede 446 needErase=true;
jstephens78 19:6d9bee043ede 447 if(!isGameOver)
jstephens78 19:6d9bee043ede 448 {
jstephens78 19:6d9bee043ede 449 if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY + 1, mGame.mPiece, mGame.mRotation))
jstephens78 19:6d9bee043ede 450 {
jstephens78 19:6d9bee043ede 451 mGame.mPosY++;
jstephens78 19:6d9bee043ede 452 }
jstephens78 19:6d9bee043ede 453 else
jstephens78 19:6d9bee043ede 454 {
jstephens78 19:6d9bee043ede 455 mBoard.StorePiece (mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation);
jstephens78 19:6d9bee043ede 456 mGame.AddPoints(SinglePiecePoints);
jstephens78 19:6d9bee043ede 457 int linesDeleted = mBoard.DeletePossibleLines ();
jstephens78 19:6d9bee043ede 458 if(linesDeleted>0)
jstephens78 19:6d9bee043ede 459 {
jstephens78 19:6d9bee043ede 460 mGame.AddClearedLines(linesDeleted);
jstephens78 19:6d9bee043ede 461 mGame.AddPoints(LineClearPoints*linesDeleted);
jstephens78 19:6d9bee043ede 462 //Thread t1(FlashLight);
jstephens78 19:6d9bee043ede 463 //PlayClearSound();
jstephens78 19:6d9bee043ede 464 clear_board();
jstephens78 19:6d9bee043ede 465 }
jstephens78 19:6d9bee043ede 466 //!!! UpdateGameStatus(mGame.GetPoints(),mGame.GetClearedLines());
jstephens78 19:6d9bee043ede 467
jstephens78 19:6d9bee043ede 468 if (mBoard.IsGameOver())
jstephens78 19:6d9bee043ede 469 {
jstephens78 19:6d9bee043ede 470 isGameOver=true;
jstephens78 19:6d9bee043ede 471 uLCD.cls();
jstephens78 19:6d9bee043ede 472
jstephens78 19:6d9bee043ede 473 // FIX add Game Over mechanic
jstephens78 19:6d9bee043ede 474
jstephens78 19:6d9bee043ede 475 //uLCD.media_init();
jstephens78 19:6d9bee043ede 476 //uLCD.set_sector_address(0x001D, 0x7842);
jstephens78 19:6d9bee043ede 477 //uLCD.display_image(0,0);
jstephens78 19:6d9bee043ede 478 //Thread t2(GameOverLight);
jstephens78 19:6d9bee043ede 479 //PlayOverSound();
jstephens78 19:6d9bee043ede 480 }
jstephens78 19:6d9bee043ede 481
jstephens78 19:6d9bee043ede 482 if(!isGameOver)
jstephens78 19:6d9bee043ede 483 {
jstephens78 19:6d9bee043ede 484 mGame.CreateNewPiece(RandomGen('a'),RandomGen('b'));
jstephens78 19:6d9bee043ede 485 clear_next_piece();
jstephens78 19:6d9bee043ede 486 }
jstephens78 19:6d9bee043ede 487 }
jstephens78 19:6d9bee043ede 488 }
jstephens78 19:6d9bee043ede 489 timer.reset();
jstephens78 19:6d9bee043ede 490 }
jstephens78 19:6d9bee043ede 491 wait(0.1);
jstephens78 19:6d9bee043ede 492 }
jstephens78 19:6d9bee043ede 493 }