From 33e70cbf410a8fea3c537f76f3115239790e951e Mon Sep 17 00:00:00 2001 From: laemmerzahlkr91200 Date: Sun, 14 Dec 2025 16:52:55 +0100 Subject: [PATCH] Big Bugfix --- src/testmain.cpp | 163 ++++++++++++++++++++++++++++++++++++++++ windows/libgamematrix.a | Bin 0 -> 11182 bytes 2 files changed, 163 insertions(+) create mode 100644 src/testmain.cpp create mode 100644 windows/libgamematrix.a diff --git a/src/testmain.cpp b/src/testmain.cpp new file mode 100644 index 0000000..0e2ac11 --- /dev/null +++ b/src/testmain.cpp @@ -0,0 +1,163 @@ +#include "gamecube.h" +#include +#include +//Funktion innitGame + //Anzahl der Paare(pairCount*2) +void innitGame() +{ + + +} +// ----------------------------------------------------------- +// 3D Memory Game – Hauptprogramm +// ----------------------------------------------------------- +int main() +{ + + + //NEU Counter + int counter = 0; + + + // Zufall initialisieren + srand(time(NULL)); + + // Fenster und Kamera + InitWindow(800, 600, "3D Memory Game with Matrix3D Library"); + SetTargetFPS(60); + + Camera3D camera{}; + camera.position = {6.0f, 6.0f, 6.0f}; + camera.target = {0.0f, 0.0f, 0.0f}; + camera.up = {0.0f, 1.0f, 0.0f}; + camera.fovy = 45.0f; + camera.projection = CAMERA_PERSPECTIVE; + + + + + // Nur 3 Farben für 3 Paare <---------------------------------------------------------- + Color colors[] = { RED, GREEN, BLUE }; + + // 6 Karten-Positionen im 3x2 Raster + std::vector positions = {{-2, 0, -2}, {0, 0, -2}, {2, 0, -2},{-2, 0, 0}, {0, 0, 0}, {2, 0, 0}}; + + // Farben doppelt in einen Pool legen und mischen + std::vector colorPool; + for (int i = 0; i < 3; i++) + { + colorPool.push_back(colors[i]); + colorPool.push_back(colors[i]); + } + + // Fisher-Yates Shuffle mit rand() + for (int i = colorPool.size() - 1; i > 0; --i) + { + int j = rand() % (i + 1); // Zufallsindex von 0 bis i + std::swap(colorPool[i], colorPool[j]); + } + + // Karten/Würfel erstellen + std::vector cubes; + for (int i = 0; i < 6; i++) + cubes.emplace_back(positions[i], colorPool[i]); //<------------------------------------------------------------ + + + + + + + gamecube* first = nullptr; + gamecube* second = nullptr; + float flipSpeed = 5.0f; // Drehgeschwindigkeit + bool gameWon = false; + + // ----------------------------------------------------------- + // Hauptspielschleife + // ----------------------------------------------------------- + while (!WindowShouldClose()) + { + // Klick-Erkennung + if (!gameWon && IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) + { + //Neu Counter + counter++; + + Vector2 mouse = GetMousePosition(); + + for (auto &c : cubes) + { + if (!c.IsFlipped() && !c.IsMatched()) + { + Vector2 screenPos = GetWorldToScreen({c.GetPosition().x, c.GetPosition().y, c.GetPosition().z}, camera); + + if (fabs(mouse.x - screenPos.x) < 40 && fabs(mouse.y - screenPos.y) < 40) + c.FlipForward(); + } + } + } + + // Animation aller Würfel + for (auto &c : cubes) + { + c.Update(flipSpeed); + + // Sobald ein Würfel vollständig umgedreht ist → merken + if (c.IsFlipped() && !c.IsMatched()) + { + if (!first) first = &c; + else if (!second && &c != first) second = &c; + } + } + + // Matching-Logik + if (first && second) + { + //counter hier macht umdrehungen + + Color col1 = first->GetColor(); + Color col2 = second->GetColor(); + + if (col1.r == col2.r && col1.g == col2.g && col1.b == col2.b) + { + first->SetMatched(true); + second->SetMatched(true); + } + else + { + first->FlipBackward(); + second->FlipBackward(); + } + + + first = second = nullptr; + } + + // Gewinnprüfung + if (!gameWon) + gameWon = std::all_of(cubes.begin(), cubes.end(), [](const gamecube &c){ return c.IsMatched(); }); + + // ----------------------------------------------------------- + // Zeichnen + // ----------------------------------------------------------- + BeginDrawing(); + ClearBackground(RAYWHITE); + BeginMode3D(camera); + + for (auto &c : cubes) + c.Draw(); + + EndMode3D(); + if (gameWon) + DrawText("Congrats! You found all pairs!", 150, 260, 30, DARKBLUE); + else + DrawText("Flip 2 cubes - find matching pairs!", 10, 10, 20, DARKGRAY); + //Neu Counter + DrawText(TextFormat("Counter: %i",counter/2),10,40,20,DARKGRAY); //counter//2 da sonst doppelt + + EndDrawing(); + } + + CloseWindow(); + return 0; +} \ No newline at end of file diff --git a/windows/libgamematrix.a b/windows/libgamematrix.a new file mode 100644 index 0000000000000000000000000000000000000000..8b4ca5a581cb93a9c538e3c827a85be4c9bf692e GIT binary patch literal 11182 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 COcw