Karten auf Decks verteilen

  • Guten Tag,

    Leider finde ich den Fehler nicht , warum ein Teil meines Frontendcodes nicht abgespielt wird.

    Ich programmiere ein Kartenspiel(Replit):

    Es geht darum, dass die Karten vom Stapel (.stapel) nicht an die Decks verteilt werden. Im Kern ist das Problem dass der Frontend-Code nicht richtig abgespielt wird. Die F12 Konsole zeigt auch keine eingerichteten Logs bezüglich dieses Parts. Hat jemand Tipps, Tricks wie ich trotzdem die Fehlerquelle weiter eingrenzen kann zumindest ? ich bin schon seid über 48 h dran und drehe mich mit Perplexity im Kreis. So langsam ist es echt zermürbend.


    Hier ist der Codeauszug:

    let aktuelleRunde = 1;
    const maxRunden = 4;
    const austeilVorgaengeProRunde = 3; // 3 Austeilvorgänge pro Runde

    document.addEventListener("DOMContentLoaded", () => {
    console.log("DOM vollständig geladen, Listener läuft");
    const button = document.getElementById("karten-austeilen");
    const stapel = document.querySelector(".stapel");

    const deckspieler1_1 = document.getElementById("deckspieler1_1");
    const deckspieler1_2 = document.getElementById("deckspieler1_2");
    const deckspieler2_1 = document.getElementById("deckspieler2_1");
    const deckspieler2_2 = document.getElementById("deckspieler2_2");

    // Check, ob alle wichtigen Elemente vorhanden sind
    if (!button || !stapel || !deckspieler1_1 || !deckspieler1_2 || !deckspieler2_1 || !deckspieler2_2) {
    console.error("Wichtige Elemente fehlen im DOM!");
    console.log("button:", button);
    console.log("stapel:", stapel);
    console.log("deckspieler1_1:", deckspieler1_1);
    console.log("deckspieler1_2:", deckspieler1_2);
    console.log("deckspieler2_1:", deckspieler2_1);
    console.log("deckspieler2_2:", deckspieler2_2);
    return;
    }

    function karteAusteilen(zielDeck) {
    const karte = stapel.firstElementChild;
    if (karte) {
    zielDeck.appendChild(karte);
    console.log(`Karte aus Stapel an ${zielDeck.id} ausgeteilt.`);
    } else {
    console.warn("Keine Karten mehr im Stapel zum Austeilen.");
    }
    }

    button.addEventListener("click", () => {
    console.log(`Button geklickt. Starte Runde ${aktuelleRunde}...`);
    button.disabled = true; // Button deaktivieren, Mehrfachklick verhindern

    console.log("Karten im Stapel vor Austeilen:", stapel.children.length);

    for (let i = 0; i < austeilVorgaengeProRunde; i++) {
    if (aktuelleRunde === 1 || aktuelleRunde === 3) {
    // Runden 1 & 3
    karteAusteilen(deckspieler1_1);
    karteAusteilen(deckspieler1_2);
    karteAusteilen(deckspieler2_1);
    } else if (aktuelleRunde === 2 || aktuelleRunde === 4) {
    // Runden 2 & 4
    karteAusteilen(deckspieler2_1);
    karteAusteilen(deckspieler2_2);
    karteAusteilen(deckspieler1_2);
    } else {
    console.warn("Unbekannte Runde:", aktuelleRunde);
    }
    }

    console.log("Karten im Stapel nach Austeilen:", stapel.children.length);
    console.log(`Runde ${aktuelleRunde} abgeschlossen.`);

    // Rundenummer erhöhen und zyklisch zurücksetzen
    aktuelleRunde++;
    if (aktuelleRunde > maxRunden) {
    aktuelleRunde = 1;
    console.log("Rundenzähler wurde zurückgesetzt.");
    }

    button.disabled = false; // Button wieder aktivieren
    console.log(`Bereit für die nächste Runde: ${aktuelleRunde}`);
    });
    });

    ||

  • Hallo tacodek und willkommen im Forum!

    Wenn Du Code postest, benutze bitte Codetags, das Symbol <> in der Werkzeugleiste oben. In deinem Fall wurden manche Zeichenfolgen in Smilies umgewandelt.

    Dann ist es, wenn man den Fehler finden will, am einfachsten, wenn man eine Testdatei anlegt. Dafür fehlt aber das HTML. Poste das bitte ebenfalls.

  • Hallo tacodek und willkommen im Forum!

    Wenn Du Code postest, benutze bitte Codetags, das Symbol <> in der Werkzeugleiste oben. In deinem Fall wurden manche Zeichenfolgen in Smilies umgewandelt.

    Dann ist es, wenn man den Fehler finden will, am einfachsten, wenn man eine Testdatei anlegt. Dafür fehlt aber das HTML. Poste das bitte ebenfalls.

    meinen sie eine txt datei wo ich frontend und html rein kopiere ?

  • Ja, das hilft schon Mal weiter, die Buttons etc. sind da. Allerdings fehlt der Kern der Sache, nämlich der Stapel. Das div ist leer und wird wahrscheinlich durch den GET-Request gefüllt. Um testen zu können habe ich es rasch von Hand mit 10 Elementen gefüllt:

    Damit funktioniert jedoch das Geben der Karten einwandfrei, 3 x 3 werden auf die Spieler verteilt und eine bleibt im Stapel.

    Das kann ich mir jetzt nur so erklären, dass der originale Stapel bei dir anders aussieht. Poste doch auch mal das HTML des Stapels aus der Quelltextansicht des Browsers.

  • Danke für deine schnelle Antwort. Jetzt lassen sich auf einmal doch die Karten austeilen, es lag wohl an der Reihenfolge der Codeabfolge. Ich fülle die Kind Elemente von Stapel mit Script generierten IMG-Tags, weil ich die Vorderseiten der Karten aus dem Backend erst ausliefere(damit niemand auf die Idee kommt über Element untersuchen zu schummeln).

    Hast du eine Idee wie ich den Code am besten sagen kann im welchen Bereich noch Runde 1 von 4 Runden (4 Leben jeder Spieler) ist?

    Die KI hat mir gesagt, dass ich pro aus teil klick messen könnte welche Runde gerade ist. Und den Button dann bis zur nächsten runde sperre. Das klingt mir aber irgendwie zu unüblich und nicht als Best Practise. Wie würdest du das machen ?

  • Zitat

    Jetzt lassen sich auf einmal doch die Karten austeilen, es lag wohl an der Reihenfolge der Codeabfolge. Ich fülle die Kind Elemente von Stapel mit Script generierten IMG-Tags, weil ich die Vorderseiten der Karten aus dem Backend erst ausliefere(damit niemand auf die Idee kommt über Element untersuchen zu schummeln).

    Vollständig verstehe ich das nicht aber ich vermute: Du zeigst erst nur die Rückseiten der Karten an und lädst die Vorderseiten dann mit Ajax nach. Allerdings finde ich das nicht in dem Code, den Du angehängt hattest. Aber wenn Du etwas nachlädst findet das fast immer asynchron statt und das kann zu Problemen führen. Hast Du das Spiel schon online? Es wäre hilfreich, wenn man es sich in Aktion ansehen könnte.

  • Zitat

    Hast du eine Idee wie ich den Code am besten sagen kann im welchen Bereich noch Runde 1 von 4 Runden (4 Leben jeder Spieler) ist?

    Die KI hat mir gesagt, dass ich pro aus teil klick messen könnte welche Runde gerade ist. Und den Button dann bis zur nächsten runde sperre. Das klingt mir aber irgendwie zu unüblich und nicht als Best Practise. Wie würdest du das machen ?

    Das verstehe ich jetzt nicht, vermutlich weil ich das Spiel und die Regeln nicht kenne. Kannst Du es genauer erklären?

  • Das verstehe ich jetzt nicht, vermutlich weil ich das Spiel und die Regeln nicht kenne. Kannst Du es genauer erklären?

    ist ein simples Skatspiel zum rein kommen . Ich will wenn spieler1 auf button ansehen drückt seine karten einsehen kann. Ich arbeite mit Perplexity KI der mir codes vorschlägt die ich aber auch nachvollziehe. Leider funktioniert es aber nicht. der button ist nicht klickbar. ich finde schon wieder seid heute morgen einfach nicht den fehler zumal konsole auch nichts sagt. wie gehst du in solchen fällen vor?

  • Zitat

    wie gehst du in solchen fällen vor?

    Bist Du schon mit den Entwicklerwerkzeugen deines Browser vertraut? Vor allem der Debugger wäre bei JS sehr hilfreich. Du kannst damit den Ablauf des Skripts verfolgen, Variablen ansehen etc. ohne jedes Mal Ausgaben mit console.log einbauen zu müssen.

  • PS: Wenn ich mir deinen Code ansehe, finde ich nur einen Eventlistener für den Button für das Austeilen. Keinen für das Aufdecken und auch keinen für das Mischen. Du musst die noch hinzu fügen.

  • Ich hatte den da noch nicht programmiert. Hier ist der Code Auszug. das letzte }); schließt das DOM Loaded ganz am Anfang meines Frontend. Also der Fehler müsste in diesem Ausschnitt liegen, da der Rest technisch funktioniert auch wenn nicht alle Console.Logs (EntwicklertoolKonsole) angezeigt werden.

    Ich frage mich auch welche Checklist ich bei solchen Fehlern durchgehen müsste. Ich habe nach Reihenfolge der Lade Inhalte geschaut und IDs und Klassen kontrolliert.

  • Zitat

    Ich frage mich auch welche Checklist ich bei solchen Fehlern durchgehen müsste.

    Dafür gibt es keine generelle Regel. Man muss sich das abhängig vom Fehler, der auftritt, überlegen.

    Zitat

    IDs und Klassen kontrolliert.

    Das habe ich auch gemacht und bemerkt, dass das Element "deck-container" mit getElementById ermittelt wird, im HTML steht dies jedoch als Klasse.

  • Ich sitze nun seid Dienstag wieder fest. Ich habe zwei Buttons. Einen um Deck1 aufzudecken und einen um Deck2 aufzudecken. Bei Button2 werden die 3 verdeckten Karten perfekt aufgedeckt. Bei Button 1 allerdings werden nur zwei sichtbar. Es existieren wirklich 3 Karten innerhalb des Decks und auch innerhalb des deckContainers in die die Karten beim Anklicken der Buttons hineinwandern. Allerdings sind nur 2 Karten sichtbar. Ich verstehe das nicht.

    Ich habe den Code jetzt sogar erstmals abgekürzt, sodass die Buttons unabhängig der Spielerrolle anklickbar sind etc. aber mir fällt nichts auf.

    Kannst du mir bitte helfen? Anbei ist der Code auschnitt und Bild zum Zustand.

    Klicken auf Ansehen(Deck1):

    image.png

    Klicken auf Ansehen Deck2:

    image.png

  • Im Moment ist meine Zeit ein wenig knapp, vielleicht findet sich jemand anders und nimmt sich des Problems an.

    Wie schon geschrieben wäre es am besten wenn Du das online stellen könntest. Hast Du überhaupt Webspace?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!