From 0dd2df8b6d9c44e13bf7fb2e2fda29058f3090bf Mon Sep 17 00:00:00 2001
From: eabergen <eila.a.h.bergene@ntnu.no>
Date: Sun, 14 Apr 2024 11:05:41 +0200
Subject: [PATCH] Added handout files for O12

---
 .../_folder_Exercises/O12/TetrisWindow.cpp    | 48 +++++++++++++++++
 .../_folder_Exercises/O12/TetrisWindow.h      | 19 +++++++
 templates/_folder_Exercises/O12/Tetromino.cpp | 53 +++++++++++++++++++
 templates/_folder_Exercises/O12/Tetromino.h   | 23 ++++++++
 templates/_folder_Exercises/O12/main.cpp      | 13 +++++
 5 files changed, 156 insertions(+)
 create mode 100644 templates/_folder_Exercises/O12/TetrisWindow.cpp
 create mode 100644 templates/_folder_Exercises/O12/TetrisWindow.h
 create mode 100644 templates/_folder_Exercises/O12/Tetromino.cpp
 create mode 100644 templates/_folder_Exercises/O12/Tetromino.h
 create mode 100644 templates/_folder_Exercises/O12/main.cpp

diff --git a/templates/_folder_Exercises/O12/TetrisWindow.cpp b/templates/_folder_Exercises/O12/TetrisWindow.cpp
new file mode 100644
index 0000000..e65d3a6
--- /dev/null
+++ b/templates/_folder_Exercises/O12/TetrisWindow.cpp
@@ -0,0 +1,48 @@
+#include "TetrisWindow.h"
+#include <iostream>
+
+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) {
+        std::cout << "Hello from z\n";
+    }
+
+    if(currentUpKeyState && !lastUpKeyState) {
+        std::cout << "Hello from up\n";
+    }
+
+
+    lastZKeyState = currentZKeyState;
+    lastUpKeyState = currentUpKeyState;
+}
+
diff --git a/templates/_folder_Exercises/O12/TetrisWindow.h b/templates/_folder_Exercises/O12/TetrisWindow.h
new file mode 100644
index 0000000..08a627c
--- /dev/null
+++ b/templates/_folder_Exercises/O12/TetrisWindow.h
@@ -0,0 +1,19 @@
+#pragma once
+#include "AnimationWindow.h"
+#include "Tetromino.h"
+#include "widgets/TextInput.h"
+#include "widgets/Button.h"
+
+class TetrisWindow : public TDT4102::AnimationWindow {
+
+public:
+    TetrisWindow();
+    void run();
+    
+
+
+private:
+
+    void handleInput();
+
+};
\ No newline at end of file
diff --git a/templates/_folder_Exercises/O12/Tetromino.cpp b/templates/_folder_Exercises/O12/Tetromino.cpp
new file mode 100644
index 0000000..00d1f9d
--- /dev/null
+++ b/templates/_folder_Exercises/O12/Tetromino.cpp
@@ -0,0 +1,53 @@
+#include "Tetromino.h"
+#include <map>
+    
+const std::map<TetrominoType, std::vector<std::vector<int>>> initialMatrixMap {
+
+    {
+    TetrominoType::J,
+        {
+        {0, 0, 0},
+        {1, 1, 1},
+        {0, 0, 1}
+        }
+    }
+};
+
+Tetromino::Tetromino(TDT4102::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]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/templates/_folder_Exercises/O12/Tetromino.h b/templates/_folder_Exercises/O12/Tetromino.h
new file mode 100644
index 0000000..be746a9
--- /dev/null
+++ b/templates/_folder_Exercises/O12/Tetromino.h
@@ -0,0 +1,23 @@
+#pragma once
+#include "Point.h"
+#include <vector>
+
+
+enum class TetrominoType{J, L, T, S, Z, O, I, NONE};
+
+class Tetromino {
+public:
+    static constexpr int blockSize {30};
+
+    Tetromino(TDT4102::Point startingPoint, TetrominoType tetType);
+    
+    void rotateClockwise();
+    void rotateCounterClockwise();
+
+
+   
+private: 
+    int matrixSize;
+    TDT4102::Point topLeftCorner;
+    std::vector<std::vector<TetrominoType>> blockMatrix;
+};  
\ No newline at end of file
diff --git a/templates/_folder_Exercises/O12/main.cpp b/templates/_folder_Exercises/O12/main.cpp
new file mode 100644
index 0000000..6db3218
--- /dev/null
+++ b/templates/_folder_Exercises/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