Bare Boned Tetris

Dependencies:   4DGL-uLCD-SE mbed-rtos mbed

Revision:
0:75c1f1878803
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 22 00:06:53 2014 +0000
@@ -0,0 +1,171 @@
+#include "mbed.h"
+#include "rtos.h"
+#include "uLCD_4DGL.h"
+
+//Objects
+uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
+DigitalIn pb_L(p21);        //left pb
+DigitalIn pb_R(p29);        //right pb
+DigitalIn pb_D(p25);        //down pb
+
+
+
+/////////////////////////////////////////////////////////////////////SHAPES////////////////////////////////////////////////////
+// Square Shape
+struct Rect{
+    int x1,y1,x2,y2;    // rectangle positions
+    float fx1 , fy1, fx2, fy2, vx, vy; // change in positions and rate of change
+};
+
+int mat[18][10]={};
+int y,x;
+int col;
+void arrayclear(){
+    for(x=0;x<10;x++)
+        {
+            for (y=0;y<18;y++)
+                mat[x][y]=0;
+        }    
+        }
+// L Shape = 2 piece rectangle
+struct L{
+    int x1, y1, x2, y2;     //first piece of L
+    int x3, y3, x4, y4;     //second piece of L
+    float fx1, fy1, fx2, fy2, fx3, fy3, fx4, fy4;
+    float vx, vy; 
+};
+    
+// Z Shape = 3 piece rectangle
+struct Z{
+    int x1, y1, x2, y2;     //first piece of Z
+    int x3, y3, x4, y4;     //second piece of Z
+    int x5, y5, x6, y6;     //third piece of Z
+    float fx1, fy1, fx2, fy2, fx3, fy3, fx4, fy4, fx5, fy5, fx6, fy6;
+    float vx, vy;
+};
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+//void drawShapes(int shape);
+//void test();
+void matrixread()
+{
+    int i,j;
+    for(i=0;i<10;i++)
+        {
+            for (j=0;j<18;j++)
+                if (mat[j][i]==1)
+                    {
+                        uLCD.filled_rectangle(i*7, j*7, i*7+6, j*7+6, BLUE);
+                    }
+                else if (mat[j][i]==2)
+                    {
+                        uLCD.filled_rectangle(i*7, j*7, i*7+6, j*7+6, BLACK);
+                    }    
+        }    
+}
+void bottomrowdelete()
+{
+    int count1,hot,coding;
+    for(count1=0;count1<10;count1++)
+    {
+        mat[17][count1]=2;
+    }
+    int f,u;
+
+    matrixread();
+        for(f=0;f<10;f++)
+        {
+            for (u=0;u<17;u++)
+            {
+                if(mat[u][f]==1)
+                {
+                    mat[u][f]=2;
+                    mat[u+1][f]=1;   
+                }
+            }
+        }
+}
+void checkbottom()
+{   
+    int count;
+    int check;
+    check=1;
+    for(count=0;count<10;count++)
+    {
+        if(mat[17][count]!=1)
+            check=0;
+    }
+    if(check==1)
+        bottomrowdelete();
+}
+void start()
+{   
+    col=5;
+    mat[0][col]=1  ;
+    checkbottom();
+}
+
+
+void updatePos(Rect s)
+{
+        //update square position
+        s.fx1 += s.vx;
+        s.fx2 += s.vx;
+        s.fy1 += s.vy;
+        s.fy2 += s.vy;
+        s.x1 = (int)s.fx1;
+        s.x2 = (int)s.fx2;
+        s.y1 = (int)s.fy1;
+        s.y2 = (int)s.fy2;
+}
+        
+Rect s = { 60, 10, 75, 25, 60.0, 10.0, 75.0, 25.0, 0.0, 0.05};        
+
+int main()
+{   
+    
+    arrayclear();
+    
+    //set inputs to pullup
+    pb_L.mode(PullUp);
+    pb_R.mode(PullUp);
+    pb_D.mode(PullUp);
+
+    //set up backgrd
+    uLCD.baudrate(3000000); 
+    uLCD.background_color(BLACK);
+    uLCD.cls();
+    int qi,nick,quack,stop;
+    qi=0;
+    while(1)
+    {
+        if(stop==1)
+        {
+            qi=0;
+            stop=0;
+            start();
+        }
+        if(!pb_R && pb_L ) 
+        {
+            mat[qi][col]=2;
+            col--;
+            mat[qi][col]=1;
+        }
+        else if(!pb_L && pb_R) 
+        {
+            mat[qi][col]=2;
+            col++;
+            mat[qi][col]=1;
+        }
+        else
+        {
+            mat[qi][col]=2;
+            qi++;
+            mat[qi][col]=1;
+        }
+        if(qi==17||mat[qi+1][col]==1) stop=1;
+        matrixread();
+    }
+
+}
+