Counter + Variable added

Zähler und unterschiedliche Würfelmenge hinzugefügt
This commit is contained in:
2025-11-30 19:09:02 +01:00
parent 5e750e1ce7
commit c58afda0a7
22 changed files with 1444 additions and 983 deletions
+81 -22
View File
@@ -1,12 +1,76 @@
#include "gamecube.h"
#include <algorithm>
#include <ctime>
//Funktion innitGame
//Anzahl der Paare(pairCount*2)
void innitGame(int pairCount,
std::vector<gamecube> &cubes,
std::vector<Vec3> &positions )
{
cubes.clear();
positions.clear();
// Spielfeld grob quadratisch machen
int total = pairCount * 2;
int cols = ceil(sqrt(total));
int rows = (total + cols - 1) / cols;
float spacing = 2.2f;
// Dynamische Positionen erzeugen
for (int r = 0; r < rows; r++)
{
for (int c = 0; c < cols; c++)
{
if ((int)positions.size() < total)
{
positions.push_back({
(c - cols/2.0f) * spacing,
0,
(r - rows/2.0f) * spacing
});
}
}
}
// Colors erzeugen
std::vector<Color> colorPool;
colorPool.reserve(total);
for (int i = 0; i < pairCount; i++)
{
Color col = {
(unsigned char)(rand() % 256),
(unsigned char)(rand() % 256),
(unsigned char)(rand() % 256),
255
};
colorPool.push_back(col);
colorPool.push_back(col); // Paar
}
// Shuffle
for (int i = total - 1; i > 0; --i)
std::swap(colorPool[i], colorPool[rand() % (i + 1)]);
// Würfel erstellen
for (int i = 0; i < total; i++)
cubes.emplace_back(positions[i], colorPool[i]);
}
// -----------------------------------------------------------
// 3D Memory Game – Hauptprogramm
// -----------------------------------------------------------
int main()
{
//NEU Counter
int counter = 0;
// Zufall initialisieren
srand(time(NULL));
@@ -21,31 +85,19 @@ int main()
camera.fovy = 45.0f;
camera.projection = CAMERA_PERSPECTIVE;
// Nur 3 Farben für 3 Paare
Color colors[] = { RED, GREEN, BLUE };
// -------------------------------------------------------
// Spielvariablen
// -------------------------------------------------------
// Nur 3 Farben für 3 Paare
int pairCount = 6; // <-- vorerst fixe Anzahl
std::vector<Vec3> positions;
std::vector<gamecube> cubes;
// 6 Karten-Positionen im 3x2 Raster
std::vector<Vec3> positions = {{-2, 0, -2}, {0, 0, -2}, {2, 0, -2},{-2, 0, 0}, {0, 0, 0}, {2, 0, 0}};
innitGame(pairCount, cubes, positions);
// Farben doppelt in einen Pool legen und mischen
std::vector<Color> 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<gamecube> cubes;
for (int i = 0; i < 6; i++)
cubes.emplace_back(positions[i], colorPool[i]);
gamecube* first = nullptr;
gamecube* second = nullptr;
@@ -60,6 +112,9 @@ int main()
// Klick-Erkennung
if (!gameWon && IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{
//Neu Counter
counter++;
Vector2 mouse = GetMousePosition();
for (auto &c : cubes)
@@ -90,6 +145,8 @@ int main()
// Matching-Logik
if (first && second)
{
//counter hier macht umdrehungen
Color col1 = first->GetColor();
Color col2 = second->GetColor();
@@ -104,6 +161,7 @@ int main()
second->FlipBackward();
}
first = second = nullptr;
}
@@ -122,15 +180,16 @@ int main()
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;
}
}