Sound update
Dependencies: 4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed
Revision 22:601e6f9077e4, committed 19 months ago
- Comitter:
- jsanchez307
- Date:
- Tue Dec 06 22:48:35 2022 +0000
- Parent:
- 21:df9e8f45e14c
- Child:
- 23:214c0c828d98
- Commit message:
- Added working Tetris Game
Changed in this revision
--- a/globals.h Tue Dec 06 22:09:51 2022 +0000 +++ b/globals.h Tue Dec 06 22:48:35 2022 +0000 @@ -6,6 +6,7 @@ #include "SDFileSystem.h" #include "uLCD_4DGL.h" #include "bluefruit_controller.h" +#include "Nav_Switch.h" // Global state flags extern volatile bool game1; @@ -25,7 +26,7 @@ // Input controllers extern BluefruitController blue; -extern BusIn navSwitch; +//extern BusIn navSwitch; // Sournd + Lighting systems extern SDFileSystem sd;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tetris/Nav_Switch.h Tue Dec 06 22:48:35 2022 +0000
@@ -0,0 +1,57 @@
+#include "mbed.h"
+
+class Nav_Switch
+{
+public:
+ Nav_Switch(PinName up,PinName down,PinName left,PinName right,PinName fire);
+ int read();
+//boolean functions to test each switch
+ bool up();
+ bool down();
+ bool left();
+ bool right();
+ bool fire();
+//automatic read on RHS
+ operator int ();
+//index to any switch array style
+ bool operator[](int index) {
+ return _pins[index];
+ };
+private:
+ BusIn _pins;
+
+};
+Nav_Switch::Nav_Switch (PinName up,PinName down,PinName left,PinName right,PinName fire):
+ _pins(up, down, left, right, fire)
+{
+ _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise
+ wait(0.001); //delays just a bit for pullups to pull inputs high
+}
+inline bool Nav_Switch::up()
+{
+ return !(_pins[0]);
+}
+inline bool Nav_Switch::down()
+{
+ return !(_pins[1]);
+}
+inline bool Nav_Switch::left()
+{
+ return !(_pins[2]);
+}
+inline bool Nav_Switch::right()
+{
+ return !(_pins[3]);
+}
+inline bool Nav_Switch::fire()
+{
+ return !(_pins[4]);
+}
+inline int Nav_Switch::read()
+{
+ return _pins.read();
+}
+inline Nav_Switch::operator int ()
+{
+ return _pins.read();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tetris/main.cpp Tue Dec 06 22:48:35 2022 +0000
@@ -0,0 +1,292 @@
+#include "mbed.h"
+#include "uLCD_4DGL.h"
+#include "Game.h"
+#include "Nav_Switch.h"
+
+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;
+int key_input = 0;
+bool gameStarted = false;
+void input_left() // FIX
+{
+ if(!gameStarted)
+ { gameStarted=true;
+ return;
+ }
+ key_input = 1;
+}
+
+void input_right()
+{
+ if(!gameStarted)
+ { gameStarted=true;
+ return;
+ }
+ key_input = 2;
+}
+
+void input_rotate()
+{
+ if(!gameStarted)
+ { gameStarted=true;
+ return;
+ }
+ key_input = 3;
+}
+
+void input_down()
+{
+ if(!gameStarted)
+ { gameStarted=true;
+ return;
+ }
+ key_input=4;
+}
+
+void clear_board()
+{
+ uLCD.filled_rectangle(20,0,79,128,0);
+}
+
+void clear_next_piece()
+{
+ uLCD.filled_rectangle(92,20,122,50,0);
+}
+
+void UpdateGameStatus(int points) // used to include int lines
+{
+ uLCD.locate(13,12);
+ uLCD.printf("Score");
+ uLCD.locate(13,13);
+ uLCD.printf("%d",points);
+}
+
+
+/*int RandomGen(char range)
+{
+ pc.printf("%c",range);
+ while(!pc.readable()) wait(0.5);
+ char buffer[4];
+ pc.gets(buffer,4);
+ int i = buffer[0]-'0';
+ return i;
+}*/
+
+int main()
+{
+ /*while(1){
+ uLCD.printf("test");
+ }*/
+
+
+
+
+ /*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
+
+
+
+ uLCD.text_width(2);
+ uLCD.text_height(2);
+ uLCD.color(WHITE);
+ uLCD.printf("TETRIS");
+ wait(2);
+
+ uLCD.baudrate(3000000);
+
+
+ /*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);*/
+
+
+
+
+
+
+ bool isGameOver = false;
+ int mScreenHeight = 128;
+ Pieces mPieces;
+ Board mBoard (&mPieces, mScreenHeight);
+ int a = 1; // RandomGen('a')
+ int b = 2;
+ int c = 3;
+ int d = 4;
+ Game mGame (&mBoard, &mPieces, mScreenHeight, &uLCD,a,b,c,d);
+
+
+ // ----- Main Loop -----
+ int prevX=0;
+ int prevY=0;
+ int prevPiece=-1;
+ int prevRot=0;
+ Timer timer;
+ timer.start();
+ 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);
+ uLCD.cls();
+ uLCD.text_width(2);
+ uLCD.text_height(2);
+ uLCD.printf("GAME OVER");
+ while(1);
+ }
+ // ----- Draw ----
+ if(needErase)
+ {
+ mGame.ErasePiece(prevX,prevY,prevPiece,prevRot);
+ needErase=false;
+ }
+ mGame.DrawScene();
+
+ prevX=mGame.mPosX;
+ prevY=mGame.mPosY;
+ prevPiece=mGame.mPiece;
+ prevRot=mGame.mRotation;
+
+ // ----- Input -----
+ switch (key_input)
+ {
+ case (2): //right
+ {
+ if (mBoard.IsPossibleMovement (mGame.mPosX + 1, mGame.mPosY, mGame.mPiece, mGame.mRotation))
+ {mGame.mPosX++;needErase=true;}
+ break;
+ }
+
+ case (1): //left
+ {
+ if (mBoard.IsPossibleMovement (mGame.mPosX - 1, mGame.mPosY, mGame.mPiece, mGame.mRotation))
+ {mGame.mPosX--;needErase=true;}
+ break;
+ }
+
+ case (4)://down
+ {
+ // Check collision from up to down
+ while (mBoard.IsPossibleMovement(mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation)) { mGame.mPosY++; }
+ needErase=true;
+ mBoard.StorePiece (mGame.mPosX, mGame.mPosY - 1, mGame.mPiece, mGame.mRotation);
+ mGame.AddPoints(SinglePiecePoints);
+ int linesDeleted = mBoard.DeletePossibleLines ();
+ if(linesDeleted>0)
+ {
+ mGame.AddClearedLines(linesDeleted);
+ mGame.AddPoints(LineClearPoints*linesDeleted);
+ //Thread t1(FlashLight);
+ //PlayClearSound();
+ clear_board();
+ }
+ UpdateGameStatus(mGame.GetPoints()); // FIX
+
+ if (mBoard.IsGameOver())
+ {
+ isGameOver=true;
+ uLCD.cls();
+
+ }
+
+ if(!isGameOver)
+ {
+ mGame.CreateNewPiece(piece,rotate);
+ clear_next_piece();
+
+ piece++;
+ rotate++;
+
+ if (piece==7) piece = 0;
+ if (rotate==4) rotate = 0;
+ }
+ break;
+ }
+
+ case (3)://rotate
+ {
+ if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY, mGame.mPiece, (mGame.mRotation + 1) % 4))
+ {mGame.mRotation = (mGame.mRotation + 1) % 4;needErase=true;}
+ break;
+ }
+
+ case (0):{break;}
+ }
+ key_input = 0;
+
+ // ----- Vertical movement -----
+
+ if(timer.read_ms()>WAIT_TIME)
+ {
+ needErase=true;
+ if(!isGameOver)
+ {
+ if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY + 1, mGame.mPiece, mGame.mRotation))
+ {
+ mGame.mPosY++;
+ }
+ else
+ {
+ mBoard.StorePiece (mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation);
+ mGame.AddPoints(SinglePiecePoints);
+ int linesDeleted = mBoard.DeletePossibleLines ();
+ if(linesDeleted>0)
+ {
+ mGame.AddClearedLines(linesDeleted);
+ mGame.AddPoints(LineClearPoints*linesDeleted);
+ //Thread t1(FlashLight);
+ //PlayClearSound();
+ clear_board();
+ }
+ UpdateGameStatus(mGame.GetPoints());
+
+ if (mBoard.IsGameOver())
+ {
+ isGameOver=true;
+ uLCD.cls();
+ }
+
+ if(!isGameOver)
+ {
+ 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;
+ }
+ }
+ }
+ timer.reset();
+ }
+ wait(0.1);
+ }
+}
--- 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;
}
}
}