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 @@
-
+
+
+
@@ -53,28 +55,32 @@
- {
- "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