From dc3f3be276cc2a27342cbb474edb9142b5529e01 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Charlotte=20Borge=20Hunsk=C3=A5r?= <charlbhu@stud.ntnu.no>
Date: Tue, 29 Mar 2022 21:12:24 +0200
Subject: [PATCH] Added O12 handout code

---
 O12/TetrisWindow.cpp | 48 +++++++++++++++++++++++++++++
 O12/TetrisWindow.h   | 19 ++++++++++++
 O12/Tetromino.cpp    | 72 ++++++++++++++++++++++++++++++++++++++++++++
 O12/Tetromino.h      | 22 ++++++++++++++
 O12/main.cpp         | 13 ++++++++
 5 files changed, 174 insertions(+)
 create mode 100644 O12/TetrisWindow.cpp
 create mode 100644 O12/TetrisWindow.h
 create mode 100644 O12/Tetromino.cpp
 create mode 100644 O12/Tetromino.h
 create mode 100644 O12/main.cpp

diff --git a/O12/TetrisWindow.cpp b/O12/TetrisWindow.cpp
new file mode 100644
index 0000000..31dbfda
--- /dev/null
+++ b/O12/TetrisWindow.cpp
@@ -0,0 +1,48 @@
+#include "TetrisWindow.h"
+
+
+void TetrisWindow::run() {
+    unsigned int framesSinceLastTetronimoMove = 0;
+    const unsigned int framesPerTetronimoMove = 20;
+
+    while(!should_close()) { 
+        framesSinceLastTetronimoMove++;
+        if(framesSinceLastTetronimoMove >= framesPerTetronimoMove) {
+            framesSinceLastTetronimoMove = 0;
+            /********************************************************/
+            //Kall moveTetrominoDown() her
+            /********************************************************/
+        }
+        handleInput();
+        
+        /********************************************************/
+        //Kall draw-funksjonene her
+        /********************************************************/
+
+        next_frame();
+    }
+}
+
+
+void TetrisWindow::handleInput() {
+
+    static bool lastZKeyState = false;
+    static bool lastUpKeyState = false;
+
+    bool currentZKeyState = is_key_down(KeyboardKey::Z);
+    bool currentUpKeyState = is_key_down(KeyboardKey::UP);
+
+    
+    if(currentZKeyState && !lastZKeyState) {
+        cout << "Hello from z\n";
+    }
+
+    if(currentUpKeyState && !lastUpKeyState) {
+        cout << "Hello from up\n";
+    }
+
+
+    lastZKeyState = currentZKeyState;
+    lastUpKeyState = currentUpKeyState;
+}
+
diff --git a/O12/TetrisWindow.h b/O12/TetrisWindow.h
new file mode 100644
index 0000000..33ee07f
--- /dev/null
+++ b/O12/TetrisWindow.h
@@ -0,0 +1,19 @@
+#pragma once
+#include "AnimationWindow.h"
+#include "Tetromino.h"
+#include "GUI.h"
+#include <atomic>
+
+class TetrisWindow : public AnimationWindow {
+
+public:
+    TetrisWindow();
+    void run();
+    
+
+
+private:
+
+    void handleInput();
+
+};
diff --git a/O12/Tetromino.cpp b/O12/Tetromino.cpp
new file mode 100644
index 0000000..a536bf2
--- /dev/null
+++ b/O12/Tetromino.cpp
@@ -0,0 +1,72 @@
+#include "Tetromino.h"
+    
+const map<TetrominoType, vector<vector<int>>> initialMatrixMap {
+
+    {
+    TetrominoType::J,
+        {
+        {0, 0, 0},
+        {1, 1, 1},
+        {0, 0, 1}
+        }
+    },
+    { 
+    TetrominoType::L, 
+        {
+        {0, 0, 0},
+        {1, 1, 1},
+        {1, 0, 0}
+        }
+    },
+    {
+    TetrominoType::I, 
+        {
+        //Denne er representert som en 6x6 matrise for å få en bedre rotasjonsfunksjonalitet
+        {0, 0, 1, 0, 0, 0},
+        {0, 0, 1, 0, 0, 0},
+        {0, 0, 1, 0, 0, 0},
+        {0, 0, 1, 0, 0, 0},
+        {0, 0, 0, 0, 0, 0},
+        {0, 0, 0, 0, 0, 0}
+        }
+    }
+};
+
+Tetromino::Tetromino(Point startingPoint, TetrominoType tetType) : 
+topLeftCorner{startingPoint}
+{
+
+}
+
+void Tetromino::rotateCounterClockwise() {
+    //Første rotasjon, med hensyn på diagonalen
+    for(int row = 0; row < matrixSize; row++){
+        for(int column = 0; column < row; column++){
+            std::swap(blockMatrix[row][column], blockMatrix[column][row]);
+        }
+    }
+
+    //Andre rotasjon, med hensyn på den midtre raden
+    for(int row = 0; row < matrixSize/2; row++){
+        for(int column = 0; column < matrixSize; column++){
+            std::swap(blockMatrix[row][column], blockMatrix[matrixSize-row-1][column]);
+            
+        }
+    }
+}
+
+void Tetromino::rotateClockwise() {
+    //Første rotasjon, med hensyn på diagonalen
+    for(int row = 0; row < matrixSize; row++){
+        for(int column = 0; column < row; column++){
+            std::swap(blockMatrix[row][column], blockMatrix[column][row]);
+        }
+    }
+     
+    //Andre rotasjon, med hensyn på den midtre kolonnen
+    for(int row = 0; row < matrixSize; row++){
+        for(int column = 0; column < matrixSize/2; column++){
+            std::swap(blockMatrix[row][column], blockMatrix[row][matrixSize-column-1]);
+        }
+    }
+}
diff --git a/O12/Tetromino.h b/O12/Tetromino.h
new file mode 100644
index 0000000..4e9a1a1
--- /dev/null
+++ b/O12/Tetromino.h
@@ -0,0 +1,22 @@
+#pragma once
+#include "Graph.h"
+
+
+enum class TetrominoType{J, L, T, S, Z, O, I, NONE};
+
+class Tetromino {
+public:
+    static constexpr int blockSize {30};
+
+    Tetromino(Point startingPoint, TetrominoType tetType);
+    
+    void rotateClockwise();
+    void rotateCounterClockwise();
+
+
+   
+private: 
+    int matrixSize;
+    Point topLeftCorner;
+    vector<vector<TetrominoType>> blockMatrix;
+};  
diff --git a/O12/main.cpp b/O12/main.cpp
new file mode 100644
index 0000000..6db3218
--- /dev/null
+++ b/O12/main.cpp
@@ -0,0 +1,13 @@
+#include "Tetromino.h"
+#include "TetrisWindow.h"
+
+
+
+int main()
+{
+	/********************************************************/
+		//Opprett vindu her
+    /********************************************************/
+        //kall run på det her
+	return 0;
+}
-- 
GitLab