diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..ed8527b --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Prog3B \ No newline at end of file diff --git a/.idea/Prog3B_Anke.iml b/.idea/Prog3B_Anke.iml new file mode 100644 index 0000000..f08604b --- /dev/null +++ b/.idea/Prog3B_Anke.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..0b76fe5 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..1be49a0 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index c7f78c3..8d9ec78 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -26,7 +26,9 @@ - + + + - { - "keyToString": { - "CMake Application.Prog3B.executor": "Run", - "RunOnceActivity.RadMigrateCodeStyle": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true", - "RunOnceActivity.cidr.known.project.marker": "true", - "RunOnceActivity.git.unshallow": "true", - "RunOnceActivity.readMode.enableVisualFormatting": "true", - "RunOnceActivity.west.config.association.type.startup.service": "true", - "cf.first.check.clang-format": "false", - "cidr.known.project.marker": "true", - "last_opened_file_path": "C:/Users/aksai/CLionProjects/Prog3B_Anke1", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "preferences.keymap", - "vue.rearranger.settings.migration": "true" + +}]]> @@ -86,6 +92,11 @@ @@ -96,6 +107,7 @@ 1763378940554 + @@ -135,7 +147,7 @@ file://$PROJECT_DIR$/CMakeLists.txt - 11 + 10 diff --git a/CMakeLists.txt b/CMakeLists.txt index 15b11b2..9549766 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,35 +1,44 @@ cmake_minimum_required(VERSION 3.28) project(Prog3B) + set(EXECUTABLE_NAME Prog3B) - -# Generate compile_commands.json -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_CXX_STANDARD 20) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -# Set the default build type if not specified +# Default build type if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) endif() +# Quell- und Header-Dateien set(SRC_FILES - ${CMAKE_CURRENT_LIST_DIR}/main.cpp - ${CMAKE_CURRENT_LIST_DIR}/gamecube.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/main.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/gamecube.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/gamematrix.cpp ) +#automatisch hinzufügen +file(GLOB SRC_FILES "${CMAKE_CURRENT_LIST_DIR}/src/*.cpp") set(INCLUDE_DIRS - ${CMAKE_CURRENT_LIST_DIR}/linux + ${CMAKE_CURRENT_LIST_DIR}/includes + ${CMAKE_CURRENT_LIST_DIR}/raylib ) +# Executable erstellen add_executable(${EXECUTABLE_NAME} ${SRC_FILES}) -target_include_directories(${EXECUTABLE_NAME} PRIVATE ${INCLUDE_DIRS}) -target_link_libraries(${EXECUTABLE_NAME} PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/linux/libgamematrix.a - ${CMAKE_CURRENT_LIST_DIR}/linux/libraylib.a -) -# Checks if OSX and links appropriate frameworks (Only required on MacOS) -if (APPLE) - target_link_libraries(Prog3B "-framework IOKit") - target_link_libraries(Prog3B "-framework Cocoa") - target_link_libraries(Prog3B "-framework OpenGL") +# Include-Verzeichnisse hinzufügen +target_include_directories(${EXECUTABLE_NAME} PRIVATE ${INCLUDE_DIRS}) + + +# Nur noch raylib und systemabhängige Libraries linken +#target_link_libraries(${EXECUTABLE_NAME} PRIVATE + # ${CMAKE_CURRENT_LIST_DIR}/windows/libraylib.a + # winmm + +# MacOS Frameworks (falls benötigt) +if(APPLE) + target_link_libraries(${EXECUTABLE_NAME} PRIVATE "-framework IOKit") + target_link_libraries(${EXECUTABLE_NAME} PRIVATE "-framework Cocoa") + target_link_libraries(${EXECUTABLE_NAME} PRIVATE "-framework OpenGL") endif() diff --git a/gamecube.h b/includes/gamecube.h similarity index 99% rename from gamecube.h rename to includes/gamecube.h index bbe0028..7626ba5 100644 --- a/gamecube.h +++ b/includes/gamecube.h @@ -31,4 +31,7 @@ private: bool flippingForward = false; bool flippingBackward = false; float rotation = 0.0f; + + + }; \ No newline at end of file diff --git a/gamematrix.h b/includes/gamematrix.h similarity index 87% rename from gamematrix.h rename to includes/gamematrix.h index 7a644d6..846683d 100644 --- a/gamematrix.h +++ b/includes/gamematrix.h @@ -16,4 +16,8 @@ public: // Verschiebung static std::array,4> translate(const std::array& pos); + + + //Einheitsmatrix + static std::array,4> identity(); }; diff --git a/raylib/raylib b/raylib/raylib new file mode 160000 index 0000000..d860112 --- /dev/null +++ b/raylib/raylib @@ -0,0 +1 @@ +Subproject commit d8601121da44b993f2893e9afd51b85105c6e698 diff --git a/gamecube.cpp b/src/gamecube.cpp similarity index 70% rename from gamecube.cpp rename to src/gamecube.cpp index 6848d50..280fcbb 100644 --- a/gamecube.cpp +++ b/src/gamecube.cpp @@ -1,16 +1,27 @@ #include "gamecube.h" +// Konstanten für Rotation und Matrixgröße +constexpr float ROTATION_HALF = 90.0f; +constexpr float ROTATION_FULL = 180.0f; + + +// Standardfarben +const Color DEFAULT_COLOR = GRAY; +const Color WIRES_COLOR = BLACK; + + gamecube::gamecube(const Vec3 &pos, Color col) : position(pos), color(col) {} +// ✅ Klar strukturierte Funktion void gamecube::Update(float flipSpeed) { if (flippingForward) { rotation += flipSpeed; - if (rotation >= 180.0f) + if (rotation >= ROTATION_FULL) // ⚠️ Magic Number { - rotation = 180.0f; + rotation = ROTATION_FULL; // ⚠️ Magic Number flippingForward = false; flipped = true; } @@ -30,7 +41,7 @@ void gamecube::Update(float flipSpeed) void gamecube::FlipForward() { flippingForward = true; } void gamecube::FlipBackward() { flippingBackward = true; } -bool gamecube::IsFlipped() const { return flipped; } +bool gamecube::IsFlipped() const { return flipped; } // ✅ Getter sauber, const korrekt bool gamecube::IsMatched() const { return matched; } void gamecube::SetMatched(bool m) { matched = m; } @@ -52,12 +63,12 @@ void gamecube::Draw() const f[j * 4 + i] = model[i][j]; rlMultMatrixf(f); - if (rotation < 90.0f) - DrawCube({0,0,0}, 1,1,1, GRAY); + if (rotation < ROTATION_HALF) // ⚠️ Magic Number + DrawCube({0,0,0}, 1,1,1, DEFAULT_COLOR); else DrawCube({0,0,0}, 1,1,1, color); - DrawCubeWires({0,0,0}, 1,1,1, BLACK); + DrawCubeWires({0,0,0}, 1,1,1,WIRES_COLOR); rlPopMatrix(); } diff --git a/src/gamematrix.cpp b/src/gamematrix.cpp new file mode 100644 index 0000000..ecfb682 --- /dev/null +++ b/src/gamematrix.cpp @@ -0,0 +1,75 @@ +#include "gamematrix.h" +#include +#include + +// Matrix Multiplikation +std::array,4> gameMatrix::matmul( + const std::array,4>& A, + const std::array,4>& B) +{ + std::array,4> result = {0}; + + for (int i = 0; i < 4; ++i) + for (int j = 0; j < 4; ++j) + { + result[i][j] = 0.0; + for (int k = 0; k < 4; ++k) + result[i][j] += A[i][k] * B[k][j]; + } + + return result; +} + +// Rotationsmatrix +std::array,4> gameMatrix::rot3D(double angle_deg, char axis) +{ + double angle_rad = angle_deg * M_PI / 180.0; + double c = std::cos(angle_rad); + double s = std::sin(angle_rad); + + std::array,4> R = identity(); + + switch (axis) + { + case 'x': case 'X': + R[1][1] = c; R[1][2] = -s; + R[2][1] = s; R[2][2] = c; + break; + + case 'y': case 'Y': + R[0][0] = c; R[0][2] = s; + R[2][0] = -s; R[2][2] = c; + break; + + case 'z': case 'Z': + R[0][0] = c; R[0][1] = -s; + R[1][0] = s; R[1][1] = c; + break; + + default: + throw std::invalid_argument("Invalid axis for rotation (use x, y, or z)"); + } + + return R; +} + +// Translation +std::array,4> gameMatrix::translate(const std::array& pos) +{ + std::array,4> T = identity(); + + T[0][3] = pos[0]; + T[1][3] = pos[1]; + T[2][3] = pos[2]; + + return T; +} + +// Einheitsmatrix-Matrix +std::array,4> gameMatrix::identity() +{ + std::array,4> I = {0}; + for (int i = 0; i < 4; ++i) + I[i][i] = 1.0; + return I; +} diff --git a/main.cpp b/src/main.cpp similarity index 99% rename from main.cpp rename to src/main.cpp index 287251d..8957343 100644 --- a/main.cpp +++ b/src/main.cpp @@ -1,4 +1,4 @@ -#include "gamecube.h" +#include "../includes/gamecube.h" #include #include diff --git a/wuerfelmemory.exe b/wuerfelmemory.exe new file mode 100644 index 0000000..21ab703 Binary files /dev/null and b/wuerfelmemory.exe differ