diff --git a/src/main.cpp b/src/main.cpp index 8957343..e6d8b51 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,12 +1,21 @@ -#include "../includes/gamecube.h" +#include "gamecube.h" #include #include +#include +#include // ----------------------------------------------------------- -// 3D Memory Game – Hauptprogramm +// 3D Memory Game – Hauptprogramm mit flexibler Paaranzahl // ----------------------------------------------------------- int main() { + // ✅ Schritt 1: Anzahl der Paare eingeben + int numPairs; + std::cout << "Geben Sie die Anzahl der Paare ein (2-10): "; + std::cin >> numPairs; + if(numPairs < 2) numPairs = 2; + if(numPairs > 10) numPairs = 10; + // Zufall initialisieren srand(time(NULL)); @@ -21,37 +30,42 @@ int main() camera.fovy = 45.0f; camera.projection = CAMERA_PERSPECTIVE; - // Nur 3 Farben für 3 Paare - Color colors[] = { RED, GREEN, BLUE }; + // Farben generieren (maximal 10 Farben) + Color baseColors[10] = { RED, GREEN, BLUE, ORANGE, PURPLE, GOLD, PINK, BROWN, SKYBLUE, LIME }; + std::vector colors(baseColors, baseColors + numPairs); - // 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}}; + // Positionen dynamisch berechnen (Raster 3 Spalten) + std::vector positions; + for (int i = 0; i < numPairs*2; ++i) + positions.push_back({ float(i % 3) * 2 - 2, 0, float(i / 3) * 2 - 2 }); // Farben doppelt in einen Pool legen und mischen std::vector colorPool; - for (int i = 0; i < 3; i++) + for (int i = 0; i < numPairs; 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 + int j = rand() % (i + 1); std::swap(colorPool[i], colorPool[j]); } // Karten/Würfel erstellen std::vector cubes; - for (int i = 0; i < 6; i++) + for (int i = 0; i < numPairs*2; i++) cubes.emplace_back(positions[i], colorPool[i]); gamecube* first = nullptr; gamecube* second = nullptr; - float flipSpeed = 5.0f; // Drehgeschwindigkeit + float flipSpeed = 5.0f; bool gameWon = false; + + + // ----------------------------------------------------------- // Hauptspielschleife // ----------------------------------------------------------- @@ -90,6 +104,8 @@ int main() // Matching-Logik if (first && second) { + + Color col1 = first->GetColor(); Color col2 = second->GetColor(); @@ -104,9 +120,10 @@ int main() second->FlipBackward(); } - first = second = nullptr; + first = second = nullptr; // Zurücksetzen für den nächsten Versuch } + // Gewinnprüfung if (!gameWon) gameWon = std::all_of(cubes.begin(), cubes.end(), [](const gamecube &c){ return c.IsMatched(); }); @@ -128,6 +145,8 @@ int main() else DrawText("Flip 2 cubes - find matching pairs!", 10, 10, 20, DARKGRAY); + + EndDrawing(); }