Sound update
Dependencies: 4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed
tetris/tetris.cpp@20:73e4f12277bd, 22 months ago (annotated)
- 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?
User | Revision | Line number | New 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 | } |