Sound update
Dependencies: 4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed
Diff: tetris/tetris.cpp
- Revision:
- 22:601e6f9077e4
- Parent:
- 20:73e4f12277bd
- Child:
- 23:214c0c828d98
--- a/tetris/tetris.cpp Tue Dec 06 22:09:51 2022 +0000 +++ b/tetris/tetris.cpp Tue Dec 06 22:48:35 2022 +0000 @@ -1,25 +1,10 @@ -#include "tetris.h" -#include "globals.h" - #include "mbed.h" +#include "uLCD_4DGL.h" #include "Game.h" -#include "PinDetect.h" -//#include "Speaker.h" -//#include "TextLCD.h" -//#include "Shiftbrite.h" -//#include "SDFileSystem.h" -//#include "wave_player.h" -#include "rtos.h" +#include "Nav_Switch.h" -//TextLCD textLCD(p26, p25, p24, p23, p22, p15); -//Speaker mySpeaker(p21); -//Shiftbrite myShiftbrite(p9, p10, p11, p12, p13); -//SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card - -PinDetect LEFT_KEY(p16); // need to use NavSwitch for this -PinDetect RIGHT_KEY(p19); -PinDetect ROTATE_KEY(p17); -PinDetect DOWN_KEY(p30); +uLCD_4DGL uLCD(p13, p14, p30); +Nav_Switch myNav(p19, p16, p17, p15, p18); // pins(up, down, left, right, fire) int SinglePiecePoints = 50; int LineClearPoints = 200; @@ -32,8 +17,6 @@ return; } key_input = 1; - //mySpeaker.PlayNote(400.0,0.05,0.025); - //mySpeaker.PlayNote(500.0,0.05,0.025); } void input_right() @@ -43,8 +26,6 @@ return; } key_input = 2; - //mySpeaker.PlayNote(400.0,0.05,0.025); - //mySpeaker.PlayNote(500.0,0.05,0.025); } void input_rotate() @@ -54,10 +35,6 @@ return; } key_input = 3; - /*mySpeaker.PlayNote(600.0,0.05,0.025); - mySpeaker.PlayNote(700.0,0.05,0.025); - mySpeaker.PlayNote(800.0,0.05,0.025); - mySpeaker.PlayNote(900.0,0.05,0.025);*/ } void input_down() @@ -67,10 +44,6 @@ return; } key_input=4; - /*mySpeaker.PlayNote(500.0,0.05,0.025); - mySpeaker.PlayNote(1500.0,0.05,0.025); - mySpeaker.PlayNote(500.0,0.05,0.025); - mySpeaker.PlayNote(1500.0,0.05,0.025);*/ } void clear_board() @@ -83,185 +56,16 @@ uLCD.filled_rectangle(92,20,122,50,0); } -/* -void UpdateGameStatus(int points,int lines) -{ - textLCD.locate(7,0); - textLCD.printf("%d",points); - textLCD.locate(13,1); - textLCD.printf("%d",lines); -}*/ - -/* ShiftBright Code -void FlashLight(void const *args) -{ - myShiftbrite.RGB(0,0,0); - myShiftbrite.RGB(0,0,0); - - myShiftbrite.RGB(0,0,42); - myShiftbrite.RGB(0,0,42); - Thread::wait(100); - - - myShiftbrite.RGB(0,0,0); - myShiftbrite.RGB(0,42,0); - Thread::wait(100); - - myShiftbrite.RGB(0,0,42); - myShiftbrite.RGB(0,0,42); - Thread::wait(100); - - myShiftbrite.RGB(0,0,0); - myShiftbrite.RGB(0,0,0); -} - -void GameOverLight(void const *args) +void UpdateGameStatus(int points) // used to include int lines { - - myShiftbrite.RGB(0,0,0); - myShiftbrite.RGB(0,0,0); - - myShiftbrite.RGB(0,0,200); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,200); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,200); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,200); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,200); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,200); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,200); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,200); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,200); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,200); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); + uLCD.locate(13,12); + uLCD.printf("Score"); + uLCD.locate(13,13); + uLCD.printf("%d",points); } -void GameStartLight(void const *args) -{ - - myShiftbrite.RGB(0,0,0); - myShiftbrite.RGB(0,0,0); - - myShiftbrite.RGB(0,200,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,200,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,200,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,200,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - myShiftbrite.RGB(0,0,0); - Thread::wait(100); - myShiftbrite.RGB(0,200,0); - Thread::wait(100); - myShiftbrite.RGB(0,0,0); - myShiftbrite.RGB(0,0,0); - -} */ -/* Speaker Code -void PlayStartSound() -{ - mySpeaker.PlayNote(500.0,0.05,0.025); - mySpeaker.PlayNote(600.0,0.05,0.025); - mySpeaker.PlayNote(700.0,0.05,0.025); - mySpeaker.PlayNote(800.0,0.05,0.025); - mySpeaker.PlayNote(900.0,0.05,0.025); - mySpeaker.PlayNote(1000.0,0.05,0.025); - mySpeaker.PlayNote(1100.0,0.05,0.025); - mySpeaker.PlayNote(1200.0,0.05,0.025); - mySpeaker.PlayNote(600.0,0.05,0.025); - mySpeaker.PlayNote(700.0,0.05,0.025); - mySpeaker.PlayNote(800.0,0.05,0.025); - mySpeaker.PlayNote(900.0,0.05,0.025); - mySpeaker.PlayNote(1000.0,0.05,0.025); - mySpeaker.PlayNote(1100.0,0.05,0.025); - mySpeaker.PlayNote(1200.0,0.05,0.025); - mySpeaker.PlayNote(1300.0,0.05,0.025); - mySpeaker.PlayNote(700.0,0.05,0.025); - mySpeaker.PlayNote(800.0,0.05,0.025); - mySpeaker.PlayNote(900.0,0.05,0.025); - mySpeaker.PlayNote(1000.0,0.05,0.025); - mySpeaker.PlayNote(1100.0,0.05,0.025); - mySpeaker.PlayNote(1200.0,0.05,0.025); - mySpeaker.PlayNote(1300.0,0.05,0.025); - mySpeaker.PlayNote(1400.0,0.05,0.025); -} - -void PlayOverSound() -{ - mySpeaker.PlayNote(1400.0,0.05,0.025); - mySpeaker.PlayNote(1300.0,0.05,0.025); - mySpeaker.PlayNote(1200.0,0.05,0.025); - mySpeaker.PlayNote(1100.0,0.05,0.025); - mySpeaker.PlayNote(1000.0,0.05,0.025); - mySpeaker.PlayNote(900.0,0.05,0.025); - mySpeaker.PlayNote(800.0,0.05,0.025); - mySpeaker.PlayNote(700.0,0.05,0.025); - mySpeaker.PlayNote(1300.0,0.05,0.025); - mySpeaker.PlayNote(1200.0,0.05,0.025); - mySpeaker.PlayNote(1100.0,0.05,0.025); - mySpeaker.PlayNote(1000.0,0.05,0.025); - mySpeaker.PlayNote(900.0,0.05,0.025); - mySpeaker.PlayNote(800.0,0.05,0.025); - mySpeaker.PlayNote(700.0,0.05,0.025); - mySpeaker.PlayNote(600.0,0.05,0.025); - mySpeaker.PlayNote(1200.0,0.05,0.025); - mySpeaker.PlayNote(1100.0,0.05,0.025); - mySpeaker.PlayNote(1000.0,0.05,0.025); - mySpeaker.PlayNote(900.0,0.05,0.025); - mySpeaker.PlayNote(800.0,0.05,0.025); - mySpeaker.PlayNote(700.0,0.05,0.025); - mySpeaker.PlayNote(600.0,0.05,0.025); - mySpeaker.PlayNote(500.0,0.05,0.025); -} - -void PlayClearSound() -{ - mySpeaker.PlayNote(900.0,0.2,0.025); - mySpeaker.PlayNote(1000.0,0.2,0.025); - mySpeaker.PlayNote(1100.0,0.2,0.025); - mySpeaker.PlayNote(1000.0,0.2,0.025); - mySpeaker.PlayNote(9000.0,0.2,0.025); -} */ - -int RandomGen(char range) +/*int RandomGen(char range) { pc.printf("%c",range); while(!pc.readable()) wait(0.5); @@ -269,78 +73,55 @@ pc.gets(buffer,4); int i = buffer[0]-'0'; return i; -} +}*/ -void tetrisGame(void) +void tetrisGame() { - //hardware setup // FIX - LEFT_KEY.mode(PullUp); - RIGHT_KEY.mode(PullUp); - ROTATE_KEY.mode(PullUp); - DOWN_KEY.mode(PullUp); + /*while(1){ + uLCD.printf("test"); + }*/ + + + - LEFT_KEY.attach_deasserted(&input_left); - RIGHT_KEY.attach_deasserted(&input_right); - ROTATE_KEY.attach_deasserted(&input_rotate); - DOWN_KEY.attach_deasserted(&input_down); + /*if (myNav.up()) input_rotate(); + if (myNav.down()) input_down();; + if (myNav.left()) input_left(); + if (myNav.right()) input_right();; + //check mouse left button click*/ // FIXQ + //if (myNav.fire()) input_down; // FIX, CAN ADD MENU FUNCTIONALITY + - LEFT_KEY.setSampleFrequency(); - RIGHT_KEY.setSampleFrequency(); - ROTATE_KEY.setSampleFrequency(); - DOWN_KEY.setSampleFrequency(); // FIX + + uLCD.text_width(2); + uLCD.text_height(2); + uLCD.color(WHITE); + uLCD.printf("TETRIS"); + wait(2); + uLCD.baudrate(3000000); - while (true) { - Thread::wait(200); - } - //myShiftbrite.RGB(0,0,0); - //myShiftbrite.RGB(0,0,0); - - /* SD card used for Startup Image - sd.disk_initialize(); // ? might need to delete - uLCD.media_init(); - uLCD.set_sector_address(0x001D, 0x7801); - uLCD.display_image(0,0);*/ - - /*textLCD.cls(); - textLCD.locate(0,0); - textLCD.printf("Waiting for PC...");*/ - - pc.baud(9600); + /*pc.baud(9600); pc.format(8,SerialBase::None,1); pc.printf("0"); while(!pc.readable()) wait(0.5); char buffer[4]; - pc.gets(buffer,4); - /* - //wait for game start - textLCD.cls(); - textLCD.locate(0,0); - textLCD.printf("TETRIS READY!!"); - textLCD.locate(0,1); - textLCD.printf("PRESS ANY KEY..."); - while(!gameStarted) wait(0.5); - PlayStartSound(); - textLCD.cls(); - textLCD.printf("Starting game now..."); - wait(2); - textLCD.cls(); - textLCD.locate(0,0); - textLCD.printf("Points"); - textLCD.locate(0,1); - textLCD.printf("Cleared Line");*/ + pc.gets(buffer,4);*/ + + - //Thread t1(GameStartLight); - //game classes init + + + bool isGameOver = false; int mScreenHeight = 128; Pieces mPieces; Board mBoard (&mPieces, mScreenHeight); - int a = RandomGen('a'); - int b = RandomGen('b'); - int c = RandomGen('a'); - int d = RandomGen('b'); + int a = 1; // RandomGen('a') + int b = 2; + int c = 3; + int d = 4; Game mGame (&mBoard, &mPieces, mScreenHeight, &uLCD,a,b,c,d); @@ -354,12 +135,31 @@ key_input=0; bool needErase = false; uLCD.cls(); + + + + int piece = 0; + int rotate = 0; + + UpdateGameStatus(mGame.GetPoints()); + while (1) { + if (myNav.up()) input_rotate(); + if (myNav.down()) input_down();; + if (myNav.left()) input_left(); + if (myNav.right()) input_right();; + //check mouse left button click // FIXQ + //if (myNav.fire()) input_down; // FIX, CAN ADD MENU FUNCTIONALITY + if(isGameOver) { wait(1); - continue; + uLCD.cls(); + uLCD.text_width(2); + uLCD.text_height(2); + uLCD.printf("GAME OVER"); + while(1); } // ----- Draw ---- if(needErase) @@ -373,7 +173,7 @@ prevY=mGame.mPosY; prevPiece=mGame.mPiece; prevRot=mGame.mRotation; - + // ----- Input ----- switch (key_input) { @@ -407,27 +207,25 @@ //PlayClearSound(); clear_board(); } - //!!! UpdateGameStatus(mGame.GetPoints(),mGame.GetClearedLines()); + UpdateGameStatus(mGame.GetPoints()); // FIX if (mBoard.IsGameOver()) { isGameOver=true; uLCD.cls(); - // FIX add Game Over mechanic - - //uLCD.media_init(); - //uLCD.set_sector_address(0x001D, 0x7842); - //uLCD.display_image(0,0); - //Thread t2(GameOverLight); - //PlayOverSound(); - } if(!isGameOver) { - mGame.CreateNewPiece(RandomGen('a'),RandomGen('b')); - clear_next_piece(); + mGame.CreateNewPiece(piece,rotate); + clear_next_piece(); + + piece++; + rotate++; + + if (piece==7) piece = 0; + if (rotate==4) rotate = 0; } break; } @@ -444,7 +242,7 @@ key_input = 0; // ----- Vertical movement ----- - + if(timer.read_ms()>WAIT_TIME) { needErase=true; @@ -467,26 +265,23 @@ //PlayClearSound(); clear_board(); } - //!!! UpdateGameStatus(mGame.GetPoints(),mGame.GetClearedLines()); + UpdateGameStatus(mGame.GetPoints()); if (mBoard.IsGameOver()) { isGameOver=true; uLCD.cls(); - - // FIX add Game Over mechanic - - //uLCD.media_init(); - //uLCD.set_sector_address(0x001D, 0x7842); - //uLCD.display_image(0,0); - //Thread t2(GameOverLight); - //PlayOverSound(); } if(!isGameOver) { - mGame.CreateNewPiece(RandomGen('a'),RandomGen('b')); - clear_next_piece(); + mGame.CreateNewPiece(piece,rotate); + clear_next_piece(); // 0-6 Pieces, 0-3 rotations^^ + piece++; + rotate++; + + if (piece==7) piece = 0; + if (rotate==4) rotate = 0; } } }