Sound update

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

Committer:
jsanchez307
Date:
Wed Dec 07 23:12:12 2022 +0000
Revision:
23:214c0c828d98
Parent:
22:601e6f9077e4
Child:
26:163d7ca8c42d
Tetris and Hockey updated for Nav_Switch myNav

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jstephens78 19:6d9bee043ede 1 #include "mbed.h"
jsanchez307 23:214c0c828d98 2 //#include "uLCD_4DGL.h"
jstephens78 19:6d9bee043ede 3 #include "Game.h"
jsanchez307 23:214c0c828d98 4 #include "globals.h"
jsanchez307 23:214c0c828d98 5 //#include "Nav_Switch.h"
jstephens78 19:6d9bee043ede 6
jsanchez307 23:214c0c828d98 7 //uLCD_4DGL uLCD(p13, p14, p30);
jsanchez307 23:214c0c828d98 8 //Nav_Switch myNav(p20, p16, p17, p15, p19); // pins(up, down, left, right, fire)
jstephens78 19:6d9bee043ede 9
jstephens78 19:6d9bee043ede 10 int SinglePiecePoints = 50;
jstephens78 19:6d9bee043ede 11 int LineClearPoints = 200;
jstephens78 19:6d9bee043ede 12 int key_input = 0;
jstephens78 19:6d9bee043ede 13 bool gameStarted = false;
jstephens78 19:6d9bee043ede 14 void input_left() // FIX
jstephens78 19:6d9bee043ede 15 {
jstephens78 19:6d9bee043ede 16 if(!gameStarted)
jstephens78 19:6d9bee043ede 17 { gameStarted=true;
jstephens78 19:6d9bee043ede 18 return;
jstephens78 19:6d9bee043ede 19 }
jstephens78 19:6d9bee043ede 20 key_input = 1;
jstephens78 19:6d9bee043ede 21 }
jstephens78 19:6d9bee043ede 22
jstephens78 19:6d9bee043ede 23 void input_right()
jstephens78 19:6d9bee043ede 24 {
jstephens78 19:6d9bee043ede 25 if(!gameStarted)
jstephens78 19:6d9bee043ede 26 { gameStarted=true;
jstephens78 19:6d9bee043ede 27 return;
jstephens78 19:6d9bee043ede 28 }
jstephens78 19:6d9bee043ede 29 key_input = 2;
jstephens78 19:6d9bee043ede 30 }
jstephens78 19:6d9bee043ede 31
jstephens78 19:6d9bee043ede 32 void input_rotate()
jstephens78 19:6d9bee043ede 33 {
jstephens78 19:6d9bee043ede 34 if(!gameStarted)
jstephens78 19:6d9bee043ede 35 { gameStarted=true;
jstephens78 19:6d9bee043ede 36 return;
jstephens78 19:6d9bee043ede 37 }
jstephens78 19:6d9bee043ede 38 key_input = 3;
jstephens78 19:6d9bee043ede 39 }
jstephens78 19:6d9bee043ede 40
jstephens78 19:6d9bee043ede 41 void input_down()
jstephens78 19:6d9bee043ede 42 {
jstephens78 19:6d9bee043ede 43 if(!gameStarted)
jstephens78 19:6d9bee043ede 44 { gameStarted=true;
jstephens78 19:6d9bee043ede 45 return;
jstephens78 19:6d9bee043ede 46 }
jstephens78 19:6d9bee043ede 47 key_input=4;
jstephens78 19:6d9bee043ede 48 }
jstephens78 19:6d9bee043ede 49
jstephens78 19:6d9bee043ede 50 void clear_board()
jstephens78 19:6d9bee043ede 51 {
jstephens78 19:6d9bee043ede 52 uLCD.filled_rectangle(20,0,79,128,0);
jstephens78 19:6d9bee043ede 53 }
jstephens78 19:6d9bee043ede 54
jstephens78 19:6d9bee043ede 55 void clear_next_piece()
jstephens78 19:6d9bee043ede 56 {
jstephens78 19:6d9bee043ede 57 uLCD.filled_rectangle(92,20,122,50,0);
jstephens78 19:6d9bee043ede 58 }
jstephens78 19:6d9bee043ede 59
jsanchez307 22:601e6f9077e4 60 void UpdateGameStatus(int points) // used to include int lines
jstephens78 19:6d9bee043ede 61 {
jsanchez307 22:601e6f9077e4 62 uLCD.locate(13,12);
jsanchez307 22:601e6f9077e4 63 uLCD.printf("Score");
jsanchez307 22:601e6f9077e4 64 uLCD.locate(13,13);
jsanchez307 22:601e6f9077e4 65 uLCD.printf("%d",points);
jstephens78 19:6d9bee043ede 66 }
jstephens78 19:6d9bee043ede 67
jstephens78 19:6d9bee043ede 68
jsanchez307 22:601e6f9077e4 69 /*int RandomGen(char range)
jstephens78 19:6d9bee043ede 70 {
jstephens78 19:6d9bee043ede 71 pc.printf("%c",range);
jstephens78 19:6d9bee043ede 72 while(!pc.readable()) wait(0.5);
jstephens78 19:6d9bee043ede 73 char buffer[4];
jstephens78 19:6d9bee043ede 74 pc.gets(buffer,4);
jstephens78 19:6d9bee043ede 75 int i = buffer[0]-'0';
jstephens78 19:6d9bee043ede 76 return i;
jsanchez307 22:601e6f9077e4 77 }*/
jstephens78 19:6d9bee043ede 78
jsanchez307 22:601e6f9077e4 79 void tetrisGame()
jstephens78 19:6d9bee043ede 80 {
jsanchez307 23:214c0c828d98 81 PRINTF("POINT 1");
jsanchez307 23:214c0c828d98 82 while (game1 == false) {
jsanchez307 23:214c0c828d98 83
jsanchez307 23:214c0c828d98 84 PRINTF("[TETRIS] Idle\r\n");
jsanchez307 23:214c0c828d98 85 Thread::wait(500);
jsanchez307 23:214c0c828d98 86 }
jsanchez307 23:214c0c828d98 87
jsanchez307 22:601e6f9077e4 88 /*while(1){
jsanchez307 22:601e6f9077e4 89 uLCD.printf("test");
jsanchez307 22:601e6f9077e4 90 }*/
jsanchez307 22:601e6f9077e4 91
jsanchez307 22:601e6f9077e4 92
jsanchez307 22:601e6f9077e4 93
jsanchez307 22:601e6f9077e4 94 /*if (myNav.up()) input_rotate();
jsanchez307 22:601e6f9077e4 95 if (myNav.down()) input_down();;
jsanchez307 22:601e6f9077e4 96 if (myNav.left()) input_left();
jsanchez307 22:601e6f9077e4 97 if (myNav.right()) input_right();;
jsanchez307 22:601e6f9077e4 98 //check mouse left button click*/ // FIXQ
jsanchez307 22:601e6f9077e4 99 //if (myNav.fire()) input_down; // FIX, CAN ADD MENU FUNCTIONALITY
jsanchez307 22:601e6f9077e4 100
jstephens78 19:6d9bee043ede 101
jsanchez307 22:601e6f9077e4 102
jsanchez307 22:601e6f9077e4 103 uLCD.text_width(2);
jsanchez307 22:601e6f9077e4 104 uLCD.text_height(2);
jsanchez307 22:601e6f9077e4 105 uLCD.color(WHITE);
jsanchez307 22:601e6f9077e4 106 uLCD.printf("TETRIS");
jsanchez307 22:601e6f9077e4 107 wait(2);
jsanchez307 22:601e6f9077e4 108
jstephens78 19:6d9bee043ede 109 uLCD.baudrate(3000000);
jstephens78 19:6d9bee043ede 110
jstephens78 20:73e4f12277bd 111
jsanchez307 22:601e6f9077e4 112 /*pc.baud(9600);
jstephens78 19:6d9bee043ede 113 pc.format(8,SerialBase::None,1);
jstephens78 19:6d9bee043ede 114 pc.printf("0");
jstephens78 19:6d9bee043ede 115 while(!pc.readable()) wait(0.5);
jstephens78 19:6d9bee043ede 116 char buffer[4];
jsanchez307 22:601e6f9077e4 117 pc.gets(buffer,4);*/
jsanchez307 22:601e6f9077e4 118
jsanchez307 22:601e6f9077e4 119
jstephens78 19:6d9bee043ede 120 bool isGameOver = false;
jstephens78 19:6d9bee043ede 121 int mScreenHeight = 128;
jstephens78 19:6d9bee043ede 122 Pieces mPieces;
jstephens78 19:6d9bee043ede 123 Board mBoard (&mPieces, mScreenHeight);
jsanchez307 22:601e6f9077e4 124 int a = 1; // RandomGen('a')
jsanchez307 22:601e6f9077e4 125 int b = 2;
jsanchez307 22:601e6f9077e4 126 int c = 3;
jsanchez307 22:601e6f9077e4 127 int d = 4;
jstephens78 19:6d9bee043ede 128 Game mGame (&mBoard, &mPieces, mScreenHeight, &uLCD,a,b,c,d);
jstephens78 19:6d9bee043ede 129
jstephens78 19:6d9bee043ede 130
jstephens78 19:6d9bee043ede 131 // ----- Main Loop -----
jstephens78 19:6d9bee043ede 132 int prevX=0;
jstephens78 19:6d9bee043ede 133 int prevY=0;
jstephens78 19:6d9bee043ede 134 int prevPiece=-1;
jstephens78 19:6d9bee043ede 135 int prevRot=0;
jstephens78 19:6d9bee043ede 136 Timer timer;
jstephens78 19:6d9bee043ede 137 timer.start();
jstephens78 19:6d9bee043ede 138 key_input=0;
jstephens78 19:6d9bee043ede 139 bool needErase = false;
jstephens78 19:6d9bee043ede 140 uLCD.cls();
jsanchez307 22:601e6f9077e4 141
jsanchez307 22:601e6f9077e4 142
jsanchez307 22:601e6f9077e4 143 int piece = 0;
jsanchez307 22:601e6f9077e4 144 int rotate = 0;
jsanchez307 22:601e6f9077e4 145
jsanchez307 22:601e6f9077e4 146 UpdateGameStatus(mGame.GetPoints());
jsanchez307 22:601e6f9077e4 147
jstephens78 19:6d9bee043ede 148 while (1)
jstephens78 19:6d9bee043ede 149 {
jsanchez307 23:214c0c828d98 150 PRINTF("POINT 2");
jsanchez307 23:214c0c828d98 151 // Wait until the game starts
jsanchez307 23:214c0c828d98 152 while (game1 == false) {
jsanchez307 23:214c0c828d98 153
jsanchez307 23:214c0c828d98 154 PRINTF("[TETRIS] Idle\r\n");
jsanchez307 23:214c0c828d98 155 Thread::wait(500);
jsanchez307 23:214c0c828d98 156 }
jsanchez307 23:214c0c828d98 157
jsanchez307 22:601e6f9077e4 158 if (myNav.up()) input_rotate();
jsanchez307 22:601e6f9077e4 159 if (myNav.down()) input_down();;
jsanchez307 22:601e6f9077e4 160 if (myNav.left()) input_left();
jsanchez307 22:601e6f9077e4 161 if (myNav.right()) input_right();;
jsanchez307 22:601e6f9077e4 162 //if (myNav.fire()) input_down; // FIX, CAN ADD MENU FUNCTIONALITY
jsanchez307 22:601e6f9077e4 163
jstephens78 19:6d9bee043ede 164 if(isGameOver)
jstephens78 19:6d9bee043ede 165 {
jstephens78 19:6d9bee043ede 166 wait(1);
jsanchez307 22:601e6f9077e4 167 uLCD.cls();
jsanchez307 22:601e6f9077e4 168 uLCD.text_width(2);
jsanchez307 22:601e6f9077e4 169 uLCD.text_height(2);
jsanchez307 22:601e6f9077e4 170 uLCD.printf("GAME OVER");
jsanchez307 22:601e6f9077e4 171 while(1);
jstephens78 19:6d9bee043ede 172 }
jstephens78 19:6d9bee043ede 173 // ----- Draw ----
jstephens78 19:6d9bee043ede 174 if(needErase)
jstephens78 19:6d9bee043ede 175 {
jstephens78 19:6d9bee043ede 176 mGame.ErasePiece(prevX,prevY,prevPiece,prevRot);
jstephens78 19:6d9bee043ede 177 needErase=false;
jstephens78 19:6d9bee043ede 178 }
jstephens78 19:6d9bee043ede 179 mGame.DrawScene();
jstephens78 19:6d9bee043ede 180
jstephens78 19:6d9bee043ede 181 prevX=mGame.mPosX;
jstephens78 19:6d9bee043ede 182 prevY=mGame.mPosY;
jstephens78 19:6d9bee043ede 183 prevPiece=mGame.mPiece;
jstephens78 19:6d9bee043ede 184 prevRot=mGame.mRotation;
jsanchez307 22:601e6f9077e4 185
jstephens78 19:6d9bee043ede 186 // ----- Input -----
jstephens78 19:6d9bee043ede 187 switch (key_input)
jstephens78 19:6d9bee043ede 188 {
jstephens78 19:6d9bee043ede 189 case (2): //right
jstephens78 19:6d9bee043ede 190 {
jstephens78 19:6d9bee043ede 191 if (mBoard.IsPossibleMovement (mGame.mPosX + 1, mGame.mPosY, mGame.mPiece, mGame.mRotation))
jstephens78 19:6d9bee043ede 192 {mGame.mPosX++;needErase=true;}
jstephens78 19:6d9bee043ede 193 break;
jstephens78 19:6d9bee043ede 194 }
jstephens78 19:6d9bee043ede 195
jstephens78 19:6d9bee043ede 196 case (1): //left
jstephens78 19:6d9bee043ede 197 {
jstephens78 19:6d9bee043ede 198 if (mBoard.IsPossibleMovement (mGame.mPosX - 1, mGame.mPosY, mGame.mPiece, mGame.mRotation))
jstephens78 19:6d9bee043ede 199 {mGame.mPosX--;needErase=true;}
jstephens78 19:6d9bee043ede 200 break;
jstephens78 19:6d9bee043ede 201 }
jstephens78 19:6d9bee043ede 202
jstephens78 19:6d9bee043ede 203 case (4)://down
jstephens78 19:6d9bee043ede 204 {
jstephens78 19:6d9bee043ede 205 // Check collision from up to down
jstephens78 19:6d9bee043ede 206 while (mBoard.IsPossibleMovement(mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation)) { mGame.mPosY++; }
jstephens78 19:6d9bee043ede 207 needErase=true;
jstephens78 19:6d9bee043ede 208 mBoard.StorePiece (mGame.mPosX, mGame.mPosY - 1, mGame.mPiece, mGame.mRotation);
jstephens78 19:6d9bee043ede 209 mGame.AddPoints(SinglePiecePoints);
jstephens78 19:6d9bee043ede 210 int linesDeleted = mBoard.DeletePossibleLines ();
jstephens78 19:6d9bee043ede 211 if(linesDeleted>0)
jstephens78 19:6d9bee043ede 212 {
jstephens78 19:6d9bee043ede 213 mGame.AddClearedLines(linesDeleted);
jstephens78 19:6d9bee043ede 214 mGame.AddPoints(LineClearPoints*linesDeleted);
jstephens78 19:6d9bee043ede 215 //Thread t1(FlashLight);
jstephens78 19:6d9bee043ede 216 //PlayClearSound();
jstephens78 19:6d9bee043ede 217 clear_board();
jstephens78 19:6d9bee043ede 218 }
jsanchez307 22:601e6f9077e4 219 UpdateGameStatus(mGame.GetPoints()); // FIX
jstephens78 19:6d9bee043ede 220
jstephens78 19:6d9bee043ede 221 if (mBoard.IsGameOver())
jstephens78 19:6d9bee043ede 222 {
jstephens78 19:6d9bee043ede 223 isGameOver=true;
jstephens78 19:6d9bee043ede 224 uLCD.cls();
jstephens78 19:6d9bee043ede 225
jstephens78 19:6d9bee043ede 226 }
jstephens78 19:6d9bee043ede 227
jstephens78 19:6d9bee043ede 228 if(!isGameOver)
jstephens78 19:6d9bee043ede 229 {
jsanchez307 22:601e6f9077e4 230 mGame.CreateNewPiece(piece,rotate);
jsanchez307 22:601e6f9077e4 231 clear_next_piece();
jsanchez307 22:601e6f9077e4 232
jsanchez307 22:601e6f9077e4 233 piece++;
jsanchez307 22:601e6f9077e4 234 rotate++;
jsanchez307 22:601e6f9077e4 235
jsanchez307 22:601e6f9077e4 236 if (piece==7) piece = 0;
jsanchez307 22:601e6f9077e4 237 if (rotate==4) rotate = 0;
jstephens78 19:6d9bee043ede 238 }
jstephens78 19:6d9bee043ede 239 break;
jstephens78 19:6d9bee043ede 240 }
jstephens78 19:6d9bee043ede 241
jstephens78 19:6d9bee043ede 242 case (3)://rotate
jstephens78 19:6d9bee043ede 243 {
jstephens78 19:6d9bee043ede 244 if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY, mGame.mPiece, (mGame.mRotation + 1) % 4))
jstephens78 19:6d9bee043ede 245 {mGame.mRotation = (mGame.mRotation + 1) % 4;needErase=true;}
jstephens78 19:6d9bee043ede 246 break;
jstephens78 19:6d9bee043ede 247 }
jstephens78 19:6d9bee043ede 248
jstephens78 19:6d9bee043ede 249 case (0):{break;}
jstephens78 19:6d9bee043ede 250 }
jstephens78 19:6d9bee043ede 251 key_input = 0;
jstephens78 19:6d9bee043ede 252
jstephens78 19:6d9bee043ede 253 // ----- Vertical movement -----
jsanchez307 22:601e6f9077e4 254
jstephens78 19:6d9bee043ede 255 if(timer.read_ms()>WAIT_TIME)
jstephens78 19:6d9bee043ede 256 {
jstephens78 19:6d9bee043ede 257 needErase=true;
jstephens78 19:6d9bee043ede 258 if(!isGameOver)
jstephens78 19:6d9bee043ede 259 {
jstephens78 19:6d9bee043ede 260 if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY + 1, mGame.mPiece, mGame.mRotation))
jstephens78 19:6d9bee043ede 261 {
jstephens78 19:6d9bee043ede 262 mGame.mPosY++;
jstephens78 19:6d9bee043ede 263 }
jstephens78 19:6d9bee043ede 264 else
jstephens78 19:6d9bee043ede 265 {
jstephens78 19:6d9bee043ede 266 mBoard.StorePiece (mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation);
jstephens78 19:6d9bee043ede 267 mGame.AddPoints(SinglePiecePoints);
jstephens78 19:6d9bee043ede 268 int linesDeleted = mBoard.DeletePossibleLines ();
jstephens78 19:6d9bee043ede 269 if(linesDeleted>0)
jstephens78 19:6d9bee043ede 270 {
jstephens78 19:6d9bee043ede 271 mGame.AddClearedLines(linesDeleted);
jstephens78 19:6d9bee043ede 272 mGame.AddPoints(LineClearPoints*linesDeleted);
jstephens78 19:6d9bee043ede 273 //Thread t1(FlashLight);
jstephens78 19:6d9bee043ede 274 //PlayClearSound();
jstephens78 19:6d9bee043ede 275 clear_board();
jstephens78 19:6d9bee043ede 276 }
jsanchez307 22:601e6f9077e4 277 UpdateGameStatus(mGame.GetPoints());
jstephens78 19:6d9bee043ede 278
jstephens78 19:6d9bee043ede 279 if (mBoard.IsGameOver())
jstephens78 19:6d9bee043ede 280 {
jstephens78 19:6d9bee043ede 281 isGameOver=true;
jstephens78 19:6d9bee043ede 282 uLCD.cls();
jstephens78 19:6d9bee043ede 283 }
jstephens78 19:6d9bee043ede 284
jstephens78 19:6d9bee043ede 285 if(!isGameOver)
jstephens78 19:6d9bee043ede 286 {
jsanchez307 22:601e6f9077e4 287 mGame.CreateNewPiece(piece,rotate);
jsanchez307 22:601e6f9077e4 288 clear_next_piece(); // 0-6 Pieces, 0-3 rotations^^
jsanchez307 22:601e6f9077e4 289 piece++;
jsanchez307 22:601e6f9077e4 290 rotate++;
jsanchez307 22:601e6f9077e4 291
jsanchez307 22:601e6f9077e4 292 if (piece==7) piece = 0;
jsanchez307 22:601e6f9077e4 293 if (rotate==4) rotate = 0;
jstephens78 19:6d9bee043ede 294 }
jstephens78 19:6d9bee043ede 295 }
jstephens78 19:6d9bee043ede 296 }
jstephens78 19:6d9bee043ede 297 timer.reset();
jstephens78 19:6d9bee043ede 298 }
jstephens78 19:6d9bee043ede 299 wait(0.1);
jstephens78 19:6d9bee043ede 300 }
jstephens78 19:6d9bee043ede 301 }