Sound update
Dependencies: 4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed
tetris/tetris.cpp@26:163d7ca8c42d, 22 months ago (annotated)
- Committer:
- jsanchez307
- Date:
- Thu Dec 08 02:12:14 2022 +0000
- Revision:
- 26:163d7ca8c42d
- Parent:
- 23:214c0c828d98
- Child:
- 27:a09981ebd532
No speaker. LED works for Tetris by going through RGB one at a time. LCD successfully clears the screen after Tetris is in Game Over and goes to the Menu.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jstephens78 | 19:6d9bee043ede | 1 | #include "mbed.h" |
jstephens78 | 19:6d9bee043ede | 2 | #include "Game.h" |
jsanchez307 | 23:214c0c828d98 | 3 | #include "globals.h" |
jstephens78 | 19:6d9bee043ede | 4 | |
jstephens78 | 19:6d9bee043ede | 5 | |
jstephens78 | 19:6d9bee043ede | 6 | int SinglePiecePoints = 50; |
jstephens78 | 19:6d9bee043ede | 7 | int LineClearPoints = 200; |
jstephens78 | 19:6d9bee043ede | 8 | int key_input = 0; |
jstephens78 | 19:6d9bee043ede | 9 | bool gameStarted = false; |
jsanchez307 | 26:163d7ca8c42d | 10 | void input_left() |
jstephens78 | 19:6d9bee043ede | 11 | { |
jstephens78 | 19:6d9bee043ede | 12 | if(!gameStarted) |
jstephens78 | 19:6d9bee043ede | 13 | { gameStarted=true; |
jstephens78 | 19:6d9bee043ede | 14 | return; |
jstephens78 | 19:6d9bee043ede | 15 | } |
jstephens78 | 19:6d9bee043ede | 16 | key_input = 1; |
jstephens78 | 19:6d9bee043ede | 17 | } |
jstephens78 | 19:6d9bee043ede | 18 | |
jstephens78 | 19:6d9bee043ede | 19 | void input_right() |
jstephens78 | 19:6d9bee043ede | 20 | { |
jstephens78 | 19:6d9bee043ede | 21 | if(!gameStarted) |
jstephens78 | 19:6d9bee043ede | 22 | { gameStarted=true; |
jstephens78 | 19:6d9bee043ede | 23 | return; |
jstephens78 | 19:6d9bee043ede | 24 | } |
jstephens78 | 19:6d9bee043ede | 25 | key_input = 2; |
jstephens78 | 19:6d9bee043ede | 26 | } |
jstephens78 | 19:6d9bee043ede | 27 | |
jstephens78 | 19:6d9bee043ede | 28 | void input_rotate() |
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 = 3; |
jstephens78 | 19:6d9bee043ede | 35 | } |
jstephens78 | 19:6d9bee043ede | 36 | |
jstephens78 | 19:6d9bee043ede | 37 | void input_down() |
jstephens78 | 19:6d9bee043ede | 38 | { |
jstephens78 | 19:6d9bee043ede | 39 | if(!gameStarted) |
jstephens78 | 19:6d9bee043ede | 40 | { gameStarted=true; |
jstephens78 | 19:6d9bee043ede | 41 | return; |
jstephens78 | 19:6d9bee043ede | 42 | } |
jstephens78 | 19:6d9bee043ede | 43 | key_input=4; |
jstephens78 | 19:6d9bee043ede | 44 | } |
jstephens78 | 19:6d9bee043ede | 45 | |
jsanchez307 | 26:163d7ca8c42d | 46 | void input_menu() |
jsanchez307 | 26:163d7ca8c42d | 47 | { |
jsanchez307 | 26:163d7ca8c42d | 48 | if(!gameStarted) |
jsanchez307 | 26:163d7ca8c42d | 49 | { gameStarted=true; |
jsanchez307 | 26:163d7ca8c42d | 50 | return; |
jsanchez307 | 26:163d7ca8c42d | 51 | } |
jsanchez307 | 26:163d7ca8c42d | 52 | key_input = 5; |
jsanchez307 | 26:163d7ca8c42d | 53 | } |
jsanchez307 | 26:163d7ca8c42d | 54 | |
jstephens78 | 19:6d9bee043ede | 55 | void clear_board() |
jstephens78 | 19:6d9bee043ede | 56 | { |
jstephens78 | 19:6d9bee043ede | 57 | uLCD.filled_rectangle(20,0,79,128,0); |
jstephens78 | 19:6d9bee043ede | 58 | } |
jstephens78 | 19:6d9bee043ede | 59 | |
jstephens78 | 19:6d9bee043ede | 60 | void clear_next_piece() |
jstephens78 | 19:6d9bee043ede | 61 | { |
jstephens78 | 19:6d9bee043ede | 62 | uLCD.filled_rectangle(92,20,122,50,0); |
jstephens78 | 19:6d9bee043ede | 63 | } |
jstephens78 | 19:6d9bee043ede | 64 | |
jsanchez307 | 22:601e6f9077e4 | 65 | void UpdateGameStatus(int points) // used to include int lines |
jstephens78 | 19:6d9bee043ede | 66 | { |
jsanchez307 | 22:601e6f9077e4 | 67 | uLCD.locate(13,12); |
jsanchez307 | 22:601e6f9077e4 | 68 | uLCD.printf("Score"); |
jsanchez307 | 22:601e6f9077e4 | 69 | uLCD.locate(13,13); |
jsanchez307 | 22:601e6f9077e4 | 70 | uLCD.printf("%d",points); |
jstephens78 | 19:6d9bee043ede | 71 | } |
jstephens78 | 19:6d9bee043ede | 72 | |
jstephens78 | 19:6d9bee043ede | 73 | |
jstephens78 | 19:6d9bee043ede | 74 | |
jsanchez307 | 22:601e6f9077e4 | 75 | void tetrisGame() |
jstephens78 | 19:6d9bee043ede | 76 | { |
jsanchez307 | 23:214c0c828d98 | 77 | PRINTF("POINT 1"); |
jsanchez307 | 23:214c0c828d98 | 78 | while (game1 == false) { |
jsanchez307 | 23:214c0c828d98 | 79 | |
jsanchez307 | 23:214c0c828d98 | 80 | PRINTF("[TETRIS] Idle\r\n"); |
jsanchez307 | 23:214c0c828d98 | 81 | Thread::wait(500); |
jsanchez307 | 23:214c0c828d98 | 82 | } |
jsanchez307 | 23:214c0c828d98 | 83 | |
jsanchez307 | 22:601e6f9077e4 | 84 | |
jsanchez307 | 22:601e6f9077e4 | 85 | uLCD.text_width(2); |
jsanchez307 | 22:601e6f9077e4 | 86 | uLCD.text_height(2); |
jsanchez307 | 22:601e6f9077e4 | 87 | uLCD.color(WHITE); |
jsanchez307 | 26:163d7ca8c42d | 88 | uLCD.locate(1,0); |
jsanchez307 | 22:601e6f9077e4 | 89 | uLCD.printf("TETRIS"); |
jsanchez307 | 22:601e6f9077e4 | 90 | wait(2); |
jsanchez307 | 22:601e6f9077e4 | 91 | |
jstephens78 | 19:6d9bee043ede | 92 | uLCD.baudrate(3000000); |
jstephens78 | 19:6d9bee043ede | 93 | |
jstephens78 | 20:73e4f12277bd | 94 | |
jstephens78 | 19:6d9bee043ede | 95 | bool isGameOver = false; |
jstephens78 | 19:6d9bee043ede | 96 | int mScreenHeight = 128; |
jstephens78 | 19:6d9bee043ede | 97 | Pieces mPieces; |
jstephens78 | 19:6d9bee043ede | 98 | Board mBoard (&mPieces, mScreenHeight); |
jsanchez307 | 22:601e6f9077e4 | 99 | int a = 1; // RandomGen('a') |
jsanchez307 | 22:601e6f9077e4 | 100 | int b = 2; |
jsanchez307 | 22:601e6f9077e4 | 101 | int c = 3; |
jsanchez307 | 22:601e6f9077e4 | 102 | int d = 4; |
jstephens78 | 19:6d9bee043ede | 103 | Game mGame (&mBoard, &mPieces, mScreenHeight, &uLCD,a,b,c,d); |
jstephens78 | 19:6d9bee043ede | 104 | |
jstephens78 | 19:6d9bee043ede | 105 | |
jstephens78 | 19:6d9bee043ede | 106 | // ----- Main Loop ----- |
jstephens78 | 19:6d9bee043ede | 107 | int prevX=0; |
jstephens78 | 19:6d9bee043ede | 108 | int prevY=0; |
jstephens78 | 19:6d9bee043ede | 109 | int prevPiece=-1; |
jstephens78 | 19:6d9bee043ede | 110 | int prevRot=0; |
jstephens78 | 19:6d9bee043ede | 111 | Timer timer; |
jstephens78 | 19:6d9bee043ede | 112 | timer.start(); |
jstephens78 | 19:6d9bee043ede | 113 | key_input=0; |
jstephens78 | 19:6d9bee043ede | 114 | bool needErase = false; |
jstephens78 | 19:6d9bee043ede | 115 | uLCD.cls(); |
jsanchez307 | 22:601e6f9077e4 | 116 | |
jsanchez307 | 22:601e6f9077e4 | 117 | |
jsanchez307 | 22:601e6f9077e4 | 118 | int piece = 0; |
jsanchez307 | 22:601e6f9077e4 | 119 | int rotate = 0; |
jsanchez307 | 22:601e6f9077e4 | 120 | |
jsanchez307 | 26:163d7ca8c42d | 121 | //float x = 0.0; |
jsanchez307 | 26:163d7ca8c42d | 122 | |
jsanchez307 | 26:163d7ca8c42d | 123 | Rgb = 1; |
jsanchez307 | 26:163d7ca8c42d | 124 | rGb = 0; |
jsanchez307 | 26:163d7ca8c42d | 125 | rgB = 0; |
jsanchez307 | 26:163d7ca8c42d | 126 | int count = 0; |
jsanchez307 | 26:163d7ca8c42d | 127 | |
jsanchez307 | 22:601e6f9077e4 | 128 | UpdateGameStatus(mGame.GetPoints()); |
jsanchez307 | 22:601e6f9077e4 | 129 | |
jstephens78 | 19:6d9bee043ede | 130 | while (1) |
jstephens78 | 19:6d9bee043ede | 131 | { |
jsanchez307 | 23:214c0c828d98 | 132 | PRINTF("POINT 2"); |
jsanchez307 | 23:214c0c828d98 | 133 | // Wait until the game starts |
jsanchez307 | 23:214c0c828d98 | 134 | while (game1 == false) { |
jsanchez307 | 23:214c0c828d98 | 135 | |
jsanchez307 | 23:214c0c828d98 | 136 | PRINTF("[TETRIS] Idle\r\n"); |
jsanchez307 | 23:214c0c828d98 | 137 | Thread::wait(500); |
jsanchez307 | 23:214c0c828d98 | 138 | } |
jsanchez307 | 23:214c0c828d98 | 139 | |
jsanchez307 | 22:601e6f9077e4 | 140 | if (myNav.up()) input_rotate(); |
jsanchez307 | 26:163d7ca8c42d | 141 | if (myNav.down()) input_down(); |
jsanchez307 | 22:601e6f9077e4 | 142 | if (myNav.left()) input_left(); |
jsanchez307 | 26:163d7ca8c42d | 143 | if (myNav.right()) input_right(); |
jsanchez307 | 26:163d7ca8c42d | 144 | //if (myNav.fire()) input_menu(); |
jsanchez307 | 22:601e6f9077e4 | 145 | |
jstephens78 | 19:6d9bee043ede | 146 | if(isGameOver) |
jstephens78 | 19:6d9bee043ede | 147 | { |
jstephens78 | 19:6d9bee043ede | 148 | wait(1); |
jsanchez307 | 22:601e6f9077e4 | 149 | uLCD.cls(); |
jsanchez307 | 22:601e6f9077e4 | 150 | uLCD.text_width(2); |
jsanchez307 | 22:601e6f9077e4 | 151 | uLCD.text_height(2); |
jsanchez307 | 22:601e6f9077e4 | 152 | uLCD.printf("GAME OVER"); |
jsanchez307 | 26:163d7ca8c42d | 153 | wait(2); |
jsanchez307 | 26:163d7ca8c42d | 154 | uLCD.cls(); |
jsanchez307 | 26:163d7ca8c42d | 155 | |
jsanchez307 | 26:163d7ca8c42d | 156 | //isGameOver = false; |
jsanchez307 | 26:163d7ca8c42d | 157 | |
jsanchez307 | 26:163d7ca8c42d | 158 | Thread::wait(1000); |
jsanchez307 | 26:163d7ca8c42d | 159 | |
jsanchez307 | 26:163d7ca8c42d | 160 | mBoard.InitBoard(); |
jsanchez307 | 26:163d7ca8c42d | 161 | uLCD.cls(); |
jsanchez307 | 26:163d7ca8c42d | 162 | |
jsanchez307 | 26:163d7ca8c42d | 163 | mGame.points = 0; |
jsanchez307 | 26:163d7ca8c42d | 164 | count = 0; |
jsanchez307 | 26:163d7ca8c42d | 165 | |
jsanchez307 | 26:163d7ca8c42d | 166 | //mGame.InitGame(); |
jsanchez307 | 26:163d7ca8c42d | 167 | isGameOver = false; |
jsanchez307 | 26:163d7ca8c42d | 168 | |
jsanchez307 | 26:163d7ca8c42d | 169 | menu_flag = 0; |
jsanchez307 | 26:163d7ca8c42d | 170 | |
jsanchez307 | 26:163d7ca8c42d | 171 | game1 = false; |
jsanchez307 | 26:163d7ca8c42d | 172 | |
jsanchez307 | 26:163d7ca8c42d | 173 | |
jsanchez307 | 26:163d7ca8c42d | 174 | //mBoard.InitBoard(); |
jsanchez307 | 26:163d7ca8c42d | 175 | |
jsanchez307 | 26:163d7ca8c42d | 176 | //free(mPieces); |
jsanchez307 | 26:163d7ca8c42d | 177 | //free(mBoard); |
jsanchez307 | 26:163d7ca8c42d | 178 | //free(mGame); |
jsanchez307 | 26:163d7ca8c42d | 179 | |
jstephens78 | 19:6d9bee043ede | 180 | } |
jstephens78 | 19:6d9bee043ede | 181 | // ----- Draw ---- |
jstephens78 | 19:6d9bee043ede | 182 | if(needErase) |
jstephens78 | 19:6d9bee043ede | 183 | { |
jstephens78 | 19:6d9bee043ede | 184 | mGame.ErasePiece(prevX,prevY,prevPiece,prevRot); |
jstephens78 | 19:6d9bee043ede | 185 | needErase=false; |
jstephens78 | 19:6d9bee043ede | 186 | } |
jstephens78 | 19:6d9bee043ede | 187 | mGame.DrawScene(); |
jstephens78 | 19:6d9bee043ede | 188 | |
jstephens78 | 19:6d9bee043ede | 189 | prevX=mGame.mPosX; |
jstephens78 | 19:6d9bee043ede | 190 | prevY=mGame.mPosY; |
jstephens78 | 19:6d9bee043ede | 191 | prevPiece=mGame.mPiece; |
jstephens78 | 19:6d9bee043ede | 192 | prevRot=mGame.mRotation; |
jsanchez307 | 22:601e6f9077e4 | 193 | |
jstephens78 | 19:6d9bee043ede | 194 | // ----- Input ----- |
jstephens78 | 19:6d9bee043ede | 195 | switch (key_input) |
jstephens78 | 19:6d9bee043ede | 196 | { |
jstephens78 | 19:6d9bee043ede | 197 | case (2): //right |
jstephens78 | 19:6d9bee043ede | 198 | { |
jstephens78 | 19:6d9bee043ede | 199 | if (mBoard.IsPossibleMovement (mGame.mPosX + 1, mGame.mPosY, mGame.mPiece, mGame.mRotation)) |
jstephens78 | 19:6d9bee043ede | 200 | {mGame.mPosX++;needErase=true;} |
jstephens78 | 19:6d9bee043ede | 201 | break; |
jstephens78 | 19:6d9bee043ede | 202 | } |
jstephens78 | 19:6d9bee043ede | 203 | |
jstephens78 | 19:6d9bee043ede | 204 | case (1): //left |
jstephens78 | 19:6d9bee043ede | 205 | { |
jstephens78 | 19:6d9bee043ede | 206 | if (mBoard.IsPossibleMovement (mGame.mPosX - 1, mGame.mPosY, mGame.mPiece, mGame.mRotation)) |
jstephens78 | 19:6d9bee043ede | 207 | {mGame.mPosX--;needErase=true;} |
jstephens78 | 19:6d9bee043ede | 208 | break; |
jstephens78 | 19:6d9bee043ede | 209 | } |
jstephens78 | 19:6d9bee043ede | 210 | |
jstephens78 | 19:6d9bee043ede | 211 | case (4)://down |
jstephens78 | 19:6d9bee043ede | 212 | { |
jstephens78 | 19:6d9bee043ede | 213 | // Check collision from up to down |
jstephens78 | 19:6d9bee043ede | 214 | while (mBoard.IsPossibleMovement(mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation)) { mGame.mPosY++; } |
jstephens78 | 19:6d9bee043ede | 215 | needErase=true; |
jstephens78 | 19:6d9bee043ede | 216 | mBoard.StorePiece (mGame.mPosX, mGame.mPosY - 1, mGame.mPiece, mGame.mRotation); |
jstephens78 | 19:6d9bee043ede | 217 | mGame.AddPoints(SinglePiecePoints); |
jstephens78 | 19:6d9bee043ede | 218 | int linesDeleted = mBoard.DeletePossibleLines (); |
jstephens78 | 19:6d9bee043ede | 219 | if(linesDeleted>0) |
jstephens78 | 19:6d9bee043ede | 220 | { |
jstephens78 | 19:6d9bee043ede | 221 | mGame.AddClearedLines(linesDeleted); |
jstephens78 | 19:6d9bee043ede | 222 | mGame.AddPoints(LineClearPoints*linesDeleted); |
jstephens78 | 19:6d9bee043ede | 223 | clear_board(); |
jstephens78 | 19:6d9bee043ede | 224 | } |
jsanchez307 | 22:601e6f9077e4 | 225 | UpdateGameStatus(mGame.GetPoints()); // FIX |
jstephens78 | 19:6d9bee043ede | 226 | |
jstephens78 | 19:6d9bee043ede | 227 | if (mBoard.IsGameOver()) |
jstephens78 | 19:6d9bee043ede | 228 | { |
jstephens78 | 19:6d9bee043ede | 229 | isGameOver=true; |
jstephens78 | 19:6d9bee043ede | 230 | uLCD.cls(); |
jstephens78 | 19:6d9bee043ede | 231 | |
jstephens78 | 19:6d9bee043ede | 232 | } |
jstephens78 | 19:6d9bee043ede | 233 | |
jstephens78 | 19:6d9bee043ede | 234 | if(!isGameOver) |
jstephens78 | 19:6d9bee043ede | 235 | { |
jsanchez307 | 22:601e6f9077e4 | 236 | mGame.CreateNewPiece(piece,rotate); |
jsanchez307 | 22:601e6f9077e4 | 237 | clear_next_piece(); |
jsanchez307 | 22:601e6f9077e4 | 238 | |
jsanchez307 | 22:601e6f9077e4 | 239 | piece++; |
jsanchez307 | 22:601e6f9077e4 | 240 | rotate++; |
jsanchez307 | 22:601e6f9077e4 | 241 | |
jsanchez307 | 22:601e6f9077e4 | 242 | if (piece==7) piece = 0; |
jsanchez307 | 22:601e6f9077e4 | 243 | if (rotate==4) rotate = 0; |
jstephens78 | 19:6d9bee043ede | 244 | } |
jstephens78 | 19:6d9bee043ede | 245 | break; |
jstephens78 | 19:6d9bee043ede | 246 | } |
jstephens78 | 19:6d9bee043ede | 247 | |
jstephens78 | 19:6d9bee043ede | 248 | case (3)://rotate |
jstephens78 | 19:6d9bee043ede | 249 | { |
jstephens78 | 19:6d9bee043ede | 250 | if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY, mGame.mPiece, (mGame.mRotation + 1) % 4)) |
jstephens78 | 19:6d9bee043ede | 251 | {mGame.mRotation = (mGame.mRotation + 1) % 4;needErase=true;} |
jstephens78 | 19:6d9bee043ede | 252 | break; |
jstephens78 | 19:6d9bee043ede | 253 | } |
jstephens78 | 19:6d9bee043ede | 254 | |
jsanchez307 | 26:163d7ca8c42d | 255 | case (5)://menu |
jsanchez307 | 26:163d7ca8c42d | 256 | { |
jsanchez307 | 26:163d7ca8c42d | 257 | wait(1); |
jsanchez307 | 26:163d7ca8c42d | 258 | uLCD.cls(); |
jsanchez307 | 26:163d7ca8c42d | 259 | uLCD.text_width(2); |
jsanchez307 | 26:163d7ca8c42d | 260 | uLCD.text_height(2); |
jsanchez307 | 26:163d7ca8c42d | 261 | uLCD.printf("MENU"); |
jsanchez307 | 26:163d7ca8c42d | 262 | wait(2); |
jsanchez307 | 26:163d7ca8c42d | 263 | uLCD.cls(); |
jsanchez307 | 26:163d7ca8c42d | 264 | |
jsanchez307 | 26:163d7ca8c42d | 265 | Thread::wait(1000); // FIX? |
jsanchez307 | 26:163d7ca8c42d | 266 | |
jsanchez307 | 26:163d7ca8c42d | 267 | menu_flag = 0; |
jsanchez307 | 26:163d7ca8c42d | 268 | |
jsanchez307 | 26:163d7ca8c42d | 269 | game1 = false; // FIX? put after Thread::wait() |
jsanchez307 | 26:163d7ca8c42d | 270 | |
jsanchez307 | 26:163d7ca8c42d | 271 | |
jsanchez307 | 26:163d7ca8c42d | 272 | } |
jsanchez307 | 26:163d7ca8c42d | 273 | |
jstephens78 | 19:6d9bee043ede | 274 | case (0):{break;} |
jstephens78 | 19:6d9bee043ede | 275 | } |
jstephens78 | 19:6d9bee043ede | 276 | key_input = 0; |
jstephens78 | 19:6d9bee043ede | 277 | |
jstephens78 | 19:6d9bee043ede | 278 | // ----- Vertical movement ----- |
jsanchez307 | 22:601e6f9077e4 | 279 | |
jstephens78 | 19:6d9bee043ede | 280 | if(timer.read_ms()>WAIT_TIME) |
jstephens78 | 19:6d9bee043ede | 281 | { |
jstephens78 | 19:6d9bee043ede | 282 | needErase=true; |
jstephens78 | 19:6d9bee043ede | 283 | if(!isGameOver) |
jstephens78 | 19:6d9bee043ede | 284 | { |
jstephens78 | 19:6d9bee043ede | 285 | if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY + 1, mGame.mPiece, mGame.mRotation)) |
jstephens78 | 19:6d9bee043ede | 286 | { |
jstephens78 | 19:6d9bee043ede | 287 | mGame.mPosY++; |
jstephens78 | 19:6d9bee043ede | 288 | } |
jstephens78 | 19:6d9bee043ede | 289 | else |
jstephens78 | 19:6d9bee043ede | 290 | { |
jstephens78 | 19:6d9bee043ede | 291 | mBoard.StorePiece (mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation); |
jstephens78 | 19:6d9bee043ede | 292 | mGame.AddPoints(SinglePiecePoints); |
jstephens78 | 19:6d9bee043ede | 293 | int linesDeleted = mBoard.DeletePossibleLines (); |
jstephens78 | 19:6d9bee043ede | 294 | if(linesDeleted>0) |
jstephens78 | 19:6d9bee043ede | 295 | { |
jstephens78 | 19:6d9bee043ede | 296 | mGame.AddClearedLines(linesDeleted); |
jstephens78 | 19:6d9bee043ede | 297 | mGame.AddPoints(LineClearPoints*linesDeleted); |
jstephens78 | 19:6d9bee043ede | 298 | clear_board(); |
jstephens78 | 19:6d9bee043ede | 299 | } |
jsanchez307 | 22:601e6f9077e4 | 300 | UpdateGameStatus(mGame.GetPoints()); |
jstephens78 | 19:6d9bee043ede | 301 | |
jstephens78 | 19:6d9bee043ede | 302 | if (mBoard.IsGameOver()) |
jstephens78 | 19:6d9bee043ede | 303 | { |
jstephens78 | 19:6d9bee043ede | 304 | isGameOver=true; |
jstephens78 | 19:6d9bee043ede | 305 | uLCD.cls(); |
jstephens78 | 19:6d9bee043ede | 306 | } |
jstephens78 | 19:6d9bee043ede | 307 | |
jstephens78 | 19:6d9bee043ede | 308 | if(!isGameOver) |
jstephens78 | 19:6d9bee043ede | 309 | { |
jsanchez307 | 22:601e6f9077e4 | 310 | mGame.CreateNewPiece(piece,rotate); |
jsanchez307 | 22:601e6f9077e4 | 311 | clear_next_piece(); // 0-6 Pieces, 0-3 rotations^^ |
jsanchez307 | 22:601e6f9077e4 | 312 | piece++; |
jsanchez307 | 22:601e6f9077e4 | 313 | rotate++; |
jsanchez307 | 22:601e6f9077e4 | 314 | |
jsanchez307 | 22:601e6f9077e4 | 315 | if (piece==7) piece = 0; |
jsanchez307 | 22:601e6f9077e4 | 316 | if (rotate==4) rotate = 0; |
jstephens78 | 19:6d9bee043ede | 317 | } |
jstephens78 | 19:6d9bee043ede | 318 | } |
jstephens78 | 19:6d9bee043ede | 319 | } |
jstephens78 | 19:6d9bee043ede | 320 | timer.reset(); |
jstephens78 | 19:6d9bee043ede | 321 | } |
jstephens78 | 19:6d9bee043ede | 322 | wait(0.1); |
jsanchez307 | 26:163d7ca8c42d | 323 | |
jsanchez307 | 26:163d7ca8c42d | 324 | //get a new random number for PWM |
jsanchez307 | 26:163d7ca8c42d | 325 | //x = rand() / float(RAND_MAX); |
jsanchez307 | 26:163d7ca8c42d | 326 | //add some exponential brightness scaling |
jsanchez307 | 26:163d7ca8c42d | 327 | //for more of a fast flash effect |
jsanchez307 | 26:163d7ca8c42d | 328 | /*x = x*x*x; |
jsanchez307 | 26:163d7ca8c42d | 329 | Rgb = x; |
jsanchez307 | 26:163d7ca8c42d | 330 | rGb = x; |
jsanchez307 | 26:163d7ca8c42d | 331 | rgB = x; |
jsanchez307 | 26:163d7ca8c42d | 332 | //fast update rate for welding flashes |
jsanchez307 | 26:163d7ca8c42d | 333 | //Thread::wait(20); |
jsanchez307 | 26:163d7ca8c42d | 334 | //add a random pause between welds |
jsanchez307 | 26:163d7ca8c42d | 335 | if (rand() / float(RAND_MAX) > 0.95) { |
jsanchez307 | 26:163d7ca8c42d | 336 | Rgb = 0; |
jsanchez307 | 26:163d7ca8c42d | 337 | rGb = 0; |
jsanchez307 | 26:163d7ca8c42d | 338 | rgB = 0; |
jsanchez307 | 26:163d7ca8c42d | 339 | //Thread::wait(4000.0 * rand() / float(RAND_MAX)); |
jsanchez307 | 26:163d7ca8c42d | 340 | }*/ |
jsanchez307 | 26:163d7ca8c42d | 341 | if (count % 10 == 0) { |
jsanchez307 | 26:163d7ca8c42d | 342 | if (Rgb == 1) { |
jsanchez307 | 26:163d7ca8c42d | 343 | Rgb = 0; |
jsanchez307 | 26:163d7ca8c42d | 344 | rGb = 1; |
jsanchez307 | 26:163d7ca8c42d | 345 | rgB = 0; |
jsanchez307 | 26:163d7ca8c42d | 346 | } |
jsanchez307 | 26:163d7ca8c42d | 347 | |
jsanchez307 | 26:163d7ca8c42d | 348 | else if (rGb == 1) { |
jsanchez307 | 26:163d7ca8c42d | 349 | Rgb = 0; |
jsanchez307 | 26:163d7ca8c42d | 350 | rGb = 0; |
jsanchez307 | 26:163d7ca8c42d | 351 | rgB = 1; |
jsanchez307 | 26:163d7ca8c42d | 352 | } |
jsanchez307 | 26:163d7ca8c42d | 353 | else if (rgB == 1) { |
jsanchez307 | 26:163d7ca8c42d | 354 | Rgb = 1; |
jsanchez307 | 26:163d7ca8c42d | 355 | rGb = 0; |
jsanchez307 | 26:163d7ca8c42d | 356 | rgB = 0; |
jsanchez307 | 26:163d7ca8c42d | 357 | } else if (Rgb == 0) { |
jsanchez307 | 26:163d7ca8c42d | 358 | Rgb = 0; |
jsanchez307 | 26:163d7ca8c42d | 359 | rGb = 1; |
jsanchez307 | 26:163d7ca8c42d | 360 | rgB = 0; |
jsanchez307 | 26:163d7ca8c42d | 361 | } |
jsanchez307 | 26:163d7ca8c42d | 362 | } |
jsanchez307 | 26:163d7ca8c42d | 363 | |
jsanchez307 | 26:163d7ca8c42d | 364 | count++; |
jstephens78 | 19:6d9bee043ede | 365 | } |
jstephens78 | 19:6d9bee043ede | 366 | } |