Compare commits

..

No commits in common. "d9abb1cfe9a030e0b09005b36d2d452424e903ad" and "b7b87e725817433d9a6b6a38c4861b422d108f48" have entirely different histories.

6 changed files with 76 additions and 199 deletions

View File

@ -1,23 +1,70 @@
cmake_minimum_required(VERSION 3.15)
cmake_minimum_required(VERSION 3.16)
project(Prog3B)
set(CMAKE_CXX_STANDARD 17)
# === Basis-Konfiguration ===
set(EXECUTABLE_NAME Prog3B)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include(FetchContent)
# Default-Build-Type (falls nicht angegeben)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif()
FetchContent_Declare(
raylib
GIT_REPOSITORY https://github.com/raysan5/raylib.git
GIT_TAG 5.0
# === Quell- und Header-Dateien ===
set(SRC_FILES
${CMAKE_CURRENT_LIST_DIR}/main.cpp
${CMAKE_CURRENT_LIST_DIR}/gamecube.cpp
)
FetchContent_MakeAvailable(raylib)
add_executable(Prog3B
main.cpp
gamecube.cpp
gamematrix.cpp
set(INCLUDE_DIRS
${CMAKE_CURRENT_LIST_DIR}/mac_arm
${CMAKE_CURRENT_LIST_DIR}/raylib
)
target_include_directories(Prog3B PRIVATE .)
target_link_libraries(Prog3B raylib)
# === Betriebssystem automatisch erkennen ===
if(WIN32)
set(OS_DIR "windows")
elseif(APPLE)
# Prüfen, ob ARM oder x86
execute_process(
COMMAND uname -m
OUTPUT_VARIABLE ARCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(ARCH STREQUAL "arm64")
set(OS_DIR "mac_arm")
else()
set(OS_DIR "mac_x86")
endif()
elseif(UNIX)
set(OS_DIR "linux")
else()
message(FATAL_ERROR "Unbekanntes Betriebssystem!")
endif()
# === Executable erstellen ===
add_executable(${EXECUTABLE_NAME} ${SRC_FILES})
target_include_directories(${EXECUTABLE_NAME} PRIVATE ${INCLUDE_DIRS})
# === Bibliotheken verlinken ===
target_link_libraries(${EXECUTABLE_NAME} PRIVATE
${CMAKE_CURRENT_LIST_DIR}/${OS_DIR}/libgamematrix.a
${CMAKE_CURRENT_LIST_DIR}/${OS_DIR}/libraylib.a
)
# Windows: zusätzliche Systemlib
if(WIN32)
target_link_libraries(${EXECUTABLE_NAME} PRIVATE winmm)
endif()
# macOS: Frameworks
if(APPLE)
target_link_libraries(${EXECUTABLE_NAME} PRIVATE
"-framework IOKit"
"-framework Cocoa"
"-framework OpenGL"
)
endif()

View File

@ -1,66 +0,0 @@
========================================================
GANTT-CHART Projekt gamematrix (C++ Library)
Rolle: Projektleiter
========================================================
Gesamtdauer: 90 Minuten
Vorgehensmodell: Wasserfall
Datum: 03.11.2025
Teammitglieder: (getBereturntrue)
--------------------------------------------------------
Legende:
█ = aktive Arbeitszeit
░ = Unterstützung / Wartezeit / Review
--------------------------------------------------------
Zeit: 0 10 20 30 40 50 60 70 80 90
|----|----|----|----|----|----|----|----|----|
--------------------------------------------------------
1. ANFORDERUNGSANALYSE (010 min)
--------------------------------------------------------
Projektleiter ██████████
Architekt ████░░░░░░
Entwickler ░░░░░░░░░░
Tester ███░░░░░░░
--------------------------------------------------------
2. DESIGN / ENTWURF (1020 min)
--------------------------------------------------------
Architekt ████████████
Projektleiter ███░░░░░░░░░
Entwickler ░░░░░░░░░░░░
Tester ███░░░░░░░░░
--------------------------------------------------------
3. IMPLEMENTIERUNG (2050 min)
--------------------------------------------------------
Entwickler ████████████████████████
Projektleiter ███░░░░░░░░░░░░░░░░░░░░
Architekt ░░░░░░░░░░░░░░░░░░░░░░░
Tester ██░░░░░░░░░░░░░░░░░░░░░
--------------------------------------------------------
4. TESTEN & VALIDIERUNG (5070 min)
--------------------------------------------------------
Tester ███████████████
Entwickler ███░░░░░░░░░░░░
Projektleiter ██░░░░░░░░░░░░░
Architekt ░░░░░░░░░░░░░░
--------------------------------------------------------
5. ABSCHLUSS / DOKUMENTATION (7090 min)
--------------------------------------------------------
Projektleiter ██████████████
Architekt ██░░░░░░░░░░░░
Entwickler ██░░░░░░░░░░░░
Tester ██░░░░░░░░░░░░
--------------------------------------------------------
Ergebnisse:
- Anforderungen abgeschlossen
- Design & Architektur dokumentiert
- Funktionen implementiert und getestet
- Merge & Abschlussdokumentation fertig
========================================================

View File

@ -1,59 +0,0 @@
========================================================
Projekt: gamematrix (C++ Library)
Rolle: Projektleiter
Datei: requirements.txt
Datum: 03.11.2025
Team: getBereturntrue(3 Personen)
========================================================
# ----------------------------
# 1. Projektziel
# ----------------------------
Ziel: Entwicklung einer C++-Bibliothek für 3D-Transformationen (4x4-Matrizen)
zur späteren Nutzung über pybind11 in Python sowie Integration in das
bestehende Spielprojekt. Bereitstellung von Funktionen für Translation,
Rotation und Matrixmultiplikation im 3D-Raum.
# ----------------------------
# 2. Funktionale Anforderungen
# ----------------------------
| Funktion | Eingabe | Ausgabe | Kurzbeschreibung |
|---------------|------------------------------------|-----------------------|----------------------------------------|
| matmul | 4x4 Matrix A, 4x4 Matrix B | 4x4 Matrix | Multiplikation zweier 4x4 Matrizen |
| translate | 3D Vektor (x,y,z) | 4x4 Matrix | Erzeugt Translationsmatrix |
| rot3D | Winkel in °, Rotationsachse (x/y/z)| 4x4 Matrix | Rotationsmatrix um Achse |
| identity | --- | 4x4 Matrix | Identitätsmatrix zurückgeben |
| apply | Matrix, Vec3 | Vec3 | Vektor mit Transformationsmatrix transformieren |
# ----------------------------
# 3. Nicht-funktionale Anforderungen
# ----------------------------
- Lesbarkeit & Wartbarkeit (klarer Namespace, Header-Trennung)
- Ausführung in Echtzeit-Spielumgebung (gute Performance)
- Kompatibilität mit pybind11
- Keine dynamische Speicherallokation innerhalb der Matrixoperationen
# ----------------------------
# 4. Annahmen / Einschränkungen
# ----------------------------
- Alle Matrizen im homogenen Format 4x4
- Winkelangabe in Grad
- Datentyp double
- Koordinatensystem: Rechtshändig
# ----------------------------
# 5. Abnahmekriterien
# ----------------------------
- Beispiel-Transformationen funktionieren korrekt
- Unit-Tests für alle Funktionen bestehen
- Vergleich mit bekannten Resultaten (z. B. 90°-Rotation)
- Bibliothek lässt sich erfolgreich in Python binden
========================================================
Hinweis:
Diese Datei wird vom Projektleiter gepflegt.
========================================================

View File

@ -14,7 +14,7 @@ void gamecube::Update(float flipSpeed)
flippingForward = false;
flipped = true;
}
}// test
}
else if (flippingBackward)
{
rotation -= flipSpeed;
@ -27,8 +27,8 @@ void gamecube::Update(float flipSpeed)
}
}
void gamecube::FlipForward() { flippingForward = true; }
void gamecube::FlipBackward() { flippingBackward = true; }
void gamecube::FlipForward() { flippingForward = true; }
void gamecube::FlipBackward() { flippingBackward = true; }
bool gamecube::IsFlipped() const { return flipped; }
bool gamecube::IsMatched() const { return matched; }
@ -38,15 +38,18 @@ void gamecube::Draw() const
{
rlPushMatrix();
// Matrizen für Rotation und Translation erzeugen
auto matrix_a = gameMatrix::translate({ position.x, position.y, position.z});
auto matrix_b = gameMatrix::rot3D(rotation, 'y');
// Matrizen multiplizieren (Translation * Rotation)
auto model = gameMatrix::matmul(matrix_a, matrix_b);
// transform for raylib matrix
float f[16];
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
f[j * 4 + i] = model[i][j];
rlMultMatrixf(f);
if (rotation < 90.0f)
@ -59,5 +62,5 @@ void gamecube::Draw() const
rlPopMatrix();
}
Vec3 gamecube::GetPosition() const { return position; }
float gamecube::GetRotationY() const { return rotation; }
Vec3 gamecube::GetPosition() const { return position; }
float gamecube::GetRotationY() const { return rotation; }

View File

@ -3,24 +3,22 @@
#include "raylib.h"
#include <rlgl.h>
struct Vec3 {
struct Vec3
{
float x, y, z;
};
class gamecube {
class gamecube
{
public:
gamecube(const Vec3 &pos, Color col);
void Update(float flipSpeed);
void FlipForward();
void FlipBackward();
bool IsFlipped() const;
bool IsMatched() const;
void SetMatched(bool m);
void Draw() const;
Vec3 GetPosition() const;
float GetRotationY() const;
Color GetColor() const { return color; }
@ -28,12 +26,9 @@ public:
private:
Vec3 position;
Color color;
bool flipped = false;
bool matched = false;
bool flippingForward = false;
bool flippingBackward = false;
float rotation = 0.0f;
};
};

View File

@ -1,43 +0,0 @@
#include "gamematrix.h"
std::array<std::array<double,4>,4> gameMatrix::matmul(
const std::array<std::array<double,4>,4>& A,
const std::array<std::array<double,4>,4>& B)
{
std::array<std::array<double,4>,4> R = {};
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
for(int k=0;k<4;k++)
R[i][j] += A[i][k] * B[k][j];
return R;
}
std::array<std::array<double,4>,4> gameMatrix::rot3D(double angle_deg, char axis)
{
double a = angle_deg * M_PI / 180.0;
double c = cos(a);
double s = sin(a);
std::array<std::array<double,4>,4> M = {0};
M[3][3] = 1;
M[axis == 'x'][axis == 'y'] = 1; // init identity axis
if(axis == 'x') M = {{{1,0,0,0},{0,c,-s,0},{0,s,c,0},{0,0,0,1}}};
if(axis == 'y') M = {{{c,0,s,0},{0,1,0,0},{-s,0,c,0},{0,0,0,1}}};
if(axis == 'z') M = {{{c,-s,0,0},{s,c,0,0},{0,0,1,0},{0,0,0,1}}};
return M;
}
std::array<std::array<double,4>,4> gameMatrix::translate(const std::array<double,3>& p)
{
return {{
{1,0,0,p[0]},
{0,1,0,p[1]},
{0,0,1,p[2]},
{0,0,0,1}
}};
}