diff --git a/templates/_folder_Exercises/O12/TetrisWindow.cpp b/templates/_folder_Exercises/O12/TetrisWindow.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e65d3a61c21b0cd0ac07136389d3bddd02bac8f8 --- /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 0000000000000000000000000000000000000000..08a627c687aa1e4ab92936c611004ea75899cc79 --- /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 0000000000000000000000000000000000000000..00d1f9dc1f4801985c0e279420b821b25f499f14 --- /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 0000000000000000000000000000000000000000..be746a9b1b9ba6978d7c6b8a59be1694e01b3403 --- /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 0000000000000000000000000000000000000000..6db321866e9c6a0804867c78e35cca36b53a61bf --- /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; +}