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