Jay Balar / Mbed 2 deprecated 4180_Project_3

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

Committer:
jstephens78
Date:
Thu Dec 01 01:46:22 2022 +0000
Revision:
18:cf74968078ea
Parent:
15:e9f3b72b7486
merge

Who changed what in which revision?

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