All there but errors need fixing

Dependencies:   mbed

Revision:
4:7ddd287a5d28
Parent:
3:522c6f850e91
Child:
5:53e021832adc
--- a/main.cpp	Sun May 24 11:18:33 2020 +0000
+++ b/main.cpp	Sun May 31 17:01:53 2020 +0000
@@ -16,93 +16,128 @@
 #include "N5110.h"
 #include "TetrisGame.h"
 
+// set defaults 
 #define TETROMINO_WIDTH 4
 #define TETROMINO_HEIGHT 4
+// #define TETROMINO_SIZE 4
+#define TETROMINO_SPEED 1
+#define HEIGHT 48
+#define WIDTH 84
+// STRUCTS //
 
 struct UserInput {
     Direction d;
     float mag;
 };
 
+// OBJECTS //
+
 N5110 lcd;
 Gamepad pad;
 TetrisGame tetris;
 
+// PROTOTYPES //
+
 void init();
 void update_game(UserInput input);
 void render();
 void welcome();
-
+void exit_game();
+void cancel_line();
+int score = 0;
 
 // int ScreenHeight = 84;
 // int ScreenWidth = 48;
-// string block[7] // store tetromino blocks as a w-string
 
-
-
-
-/* int Rotate(int px, int py, int r)
-{
-    int pi = 0;
-    switch (r % 4);
-    {
-        case 0: pi = py * 4 + px; // shape width = 4
-        break;
-        
-        case 1: pi = 12 + py - (px * 4); // rotates the shape by 90 degrees
-        break;
-        
-        case 2: pi = 15 - (py * 4) - px; // rotates the shape by 180 degrees
-        break; 
-        
-        case 3: pi = 3 - py + (px * 4); // rotates the shape by 270 degrees
-        break;
-        
-        }
-        return pi;
-    }
-*/
+// FUNCTIONS // 
 
 int main()
 {
-    int fps = 6;
+    int fps = 6; // 6 frames per second 
     
-    init();
-    welcome();
+    init(); // initialise and display welcome screen
+    welcome(); // wait for user to press start
+    
+    render(); // draw initial frame 
+    wait(1.0f/fps); // wait one frame period 
     
-    render();
-    wait(1.0f/fps);
-    
+// game loop
     while(1) {
-        tetris.read_input(pad);
+        tetris.read_input(pad); // read input 
         tetris.update(pad);
-        render();
-        wait(1.0f/fps);
-    }
+        //play_game(); // update game state 
+        render(); // render the display
+        wait(1.0f/fps); // wait one frame period 
+        break;
+        
+}
+}
+        
+void exit_game() {
+     lcd.clear();
+     lcd.printString(" GAME OVER ",0, 3);
+     lcd.refresh();
+     wait(10);
+     lcd.clear();
+     lcd.printString(" press RESET ",0,6);
+     lcd.refresh();
+     exit(1.0);
+}  
+
+    
+void cancel_line() {
+        int count;
+    for(int j=0; j<=46; j+=1) {
+    for(int i=0; i<=82; i++) {
+        if (lcd.getPixel(i,j)==0) {
+            count=0;
+            break;
+        } else if (lcd.getPixel(i,j)==1){
+            count ++;
+              }
+            }
+        if(count==83) {
+            count = 0;
+            lcd.drawLine(0,j,82,j,0); // clear line
+            score++;
+            for(int x=0; x<=82; x++) {
+                for(int y=j; y>=0; y--) {
+                    lcd.setPixel(x,y,false);
+                    lcd.setPixel(x,y+1);
+                    }
+                }
+            }
+        }
+    
+
 }
 
-void init()
-{
-    lcd.init();
-    padinit();
+
+// initialise classes and libraries
+void init() {
+    lcd.init(); // initialise lcd 
+    pad.init(); // initialise Gamepad
     
-    tetris.init(TETROMINO_WIDTH, TETROMINO_HEIGHT);
+    // initialise the game with correct tetromino sizes etc
+    tetris.init(0, WIDTH/2 - 2, HEIGHT, 1);
     
 }
 
-void render()
-{
-    lcd.clear();
-    tetris.draw(lcd);
-    lcd.refresh();
+void render() { // draws each frame on the lcd 
+
+    lcd.clear(); // clear screen
+    tetris.draw(lcd); // re-draw 
+    lcd.refresh(); // refresh screen
 }
 
+// welcome screen display
 void welcome() {
     
     lcd.printString("      TETRIS      ",0,1);
     lcd.printString("    Press Start   ",0,4);
     lcd.refresh();
     
+    // flash LEDs untile start button pressed
     while (pad.start_pressed() == false) {
         lcd.setContrast(pad.read_pot1());
         pad.leds_on();
@@ -110,4 +145,27 @@
         pad.leds_off();
         wait(0.1);
     }
-}
\ No newline at end of file
+}
+
+void check_tetromino_collisions()
+{
+    Vector2D tetromino_pos = _tetromino.get_pos();
+    Vector2D tetromino_velocity = _tetromino.get_velocity();
+
+    if (
+    (lcd.get_pixel(tetromino_pos.y + 4, tetromino_pos.x) = 1) || // not sure if it should be 4 or 5 ??? 
+    (lcd.get_pixel(tetromino_pos.y + 4, tetromino_pos.x + 1) = 1) || 
+    (lcd.get_pixel(tetromino_pos.y + 4, tetromino_pos.x + 2) = 1) ||
+    (lcd.get_pixel(tetromino_pos.y + 4, tetromino_pos.x + 3) = 1)
+    ) {
+        tetromino_velocity.x = 0;
+        
+        pad.tone(1000.0,0.1);
+        cancel_line();
+        
+        blocknumber ++ 
+        if (blocknumber > 4) { blocknumber = 0; }
+            
+        _tetromino.init(_number, WIDTH/2 - 2, HEIGHT, _speed); // break to loop back or keep this ??
+        
+}