Sound update

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

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;
                     }
                 }
             }