4-Gewinnt Anfängerproblem

  • Ja das mit dem Code war alles durcheinander geschmissen da ich seit 2 Wochen versuche weiterzukommen und da schon so einiges ausprobiert habe...
    Das Problem ist nur ich MUSS das Projekt hinbekommen.
    Ich wüsste auch schon wie ich den Teil mit dem Gewinner und usw. löse nur weiß ich einfach nicht wie ich ein bestimmtes Feld ansprechen kann -> das ich z.B. $feld[0][3] den Wert 0 geben kann oder was anderes?!

    Tobse Ist es mit der von mir zuvor verwendeten Schleifen möglich? :?

  • nur weiß ich einfach nicht wie ich ein bestimmtes Feld ansprechen kann -> das ich z.B. $feld[0][3] den Wert 0 geben kann oder was anderes?!

    Ist jetzt nich dein Ernst????? Du wirst doch wohl wissen, wie man auf Variablen zugreifft? Bzw was ein Array ist, wenn du es schon verwendest.....

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Warnung!

    rambo, lerne die Grundlagen und und lass' dir nicht alles vorkauen. Außerdem findet man mit google einige Hinweise, wenn man sich denn mal drum bemühen würde. Alles in allem steht dieser Thread in Verbindung mit dem Crossposting, fehlende Grundlagen, mangelnde Eigeninitiative und in Anbetracht, dass es sich um Hausaufgaben handelt, kurz vor der Schließung.

  • rambo, wie alt bist du, wenn ich fragen darf?
    +und bis wann muss das projekt durch sein?
    und viel wichtiger, wieviel bist du/sind deine eltern bereit zu zahlen?
    konkrete angebote bitte per pn!

  • Jetzt mal ganz von Anfang an. Disclaimer: Ich hab deinen Code nicht angeschaut und bediene mich nur aus deinen Beispielen hier im Thread. Aber das problem muss anscheinend ganz unten angegangen werden, da dir wichtige Grundlagen fehlen und du seit Wochen ohne Fortschritt rumwerkelst.

    Erst ein mal das Spielfeld. Deine Idee mit der Matrix war gut, genau das ist ja ein Spielfeld, ein zweidimensionales Feld mit Punkten, welche durch 2 Koordinaten angegeben werden können. Deine Idee, den HTML-Code direkt in dem Spielfeld zu speichern hingegen war weniger sinnvoll, speichern müssen wir nur die Daten, das Markup sieht immer gleich aus.

    Ich arbeite hier mit funktionen, deshalb muss ich immer das Spielfeld als Parameter übergeben, das wird schnell umständlich, erspart dir aber das hantieren mit Klassen, was wohl noch nicht behandelt habt.

    Wir müssen also erkennen, ob ein Feld bereits besetzt wurde und wenn ja, welcher Spieler dort gesetzt hat. Dafür bestimmen wir 2 Konstanten, welche die Spieler darstellen. Noch nicht belegte Felder können mit false, 0, NULL oder sonst einem Wert der dir gefällt befüllt werden. Ich verwende in diesem Beispiel false.

    Unser Spielfeld sieht am Anfang eines Spiels also so aus:

    In PHP wird das Spielfeld, wie du schon selber herausgefunden hast, mittels zweier verschachtelten for-Schleifen aufgebaut.

    Um einen Stein zu setzen, müssen wir überprüfen, ob in der Spalte noch platz ist. Dazu schreiben wir 2 neue Funktionen. Eine, um zu überprüfen, ob auf einer Position schon ein Stein liegt, eine zweite, um den Stein auf die unterste freie Reihe zu setzen. Die checkPos-Funktion erhält ausserdem noch die Fähigkeit, auf einen bestimmten Spieler zu prüfen, das wird uns später bei der Auswertung eines Zuges nützlich sein.

    Das mal als kleiner Ansporn, wie dieses Problem angegangen werden kann. Es fehlt natürlich noch viel, um diesen Code zu einem funktionierenden Spiel zu machen, z.B. habe ich noch keine Funktion, die überprüft, ob ein Zug gewinnt. Die Darstellung und Speicherung der Daten sind getrennte Probleme, welche Separat behandelt werden sollten. Schau mal selbst, wie du damit klar kommst, sollte noch ein Problem auftauchen findet sich sicher Hilfe, versuch aber erst mal, selber dahinter zu kommen.

    Für die Darstellung habe ich dir noch eine kleine Funktion, welche eine Mögliche variante Zeigt, grundsätzlich solltest du aber HTML und PHP möglichst getrennt halten.

    Was die eigentliche Anwendung der Funktionen angeht, hier ein kleines Beispiel von 3 statisch programmierten Zügen, welche anschliessend angezeigt werden.

  • Vielen Dank lukasn für die super Erklärung aber leider habe ich das Problem heute gelöst aber sonst hätte mir deine Erklärung echt weitergeholfen!
    Und auch danke an Tobse und synaptic für die Hilfe auch wenn ich euch mit meinen "Crossposting" verärgert habe. (Bin aber trotzdem der Meinung das es nicht der Fall war, da es bei dem Thema um etwas leicht anderes ging und bereits paar Tage zuvor abgeschlossen war)

    Und zwar habe ich es mithilfe einer Datenbank gelöst, wo jede Zelle dann einen Wert hat der dann nachher mit SQL-Abfragen etc. eine class zugeteilt bekommt.

    Ich bin nun schonmal soweit das bei jedem Klick eine Zelle eine class bekommt, falls bereits eine vorhanden ist wird die darüber gefärbt usw.

    Nun habe ich allerdings 2 Probleme:

    1. Ich benutze wie von Tobse vorgeschlagen eine spielfeld.template.php und binde sie dann in die verarbeitung.php mit include ein.
    Wenn ich auf den Button klicke kommt beim ersten mal nichts... beim zweiten klick kommt dann das Ergebnis vom Klick davor!
    Das ganze kommt davon weil ich die Template include und dann die SQL-Abfragen mache. Die Template müsste also nochmal neugeladen werden
    Gibt es da eine elegante PHP Lösung? :)

    2.1 Da meine Zellen-Werte in einer DB gespeichert werden bleiben sie natürlich nach jedem Spiel erhalten. Nun habe ich eine Funktion eingebaut die eigentlich die ganze Spalte auf Knopfdruck zurück auf 0 setzen sollte allerdings funktioniert es nicht. Wenn ich den Code bei phpmyadmin als SQL-Befehl eingebe funktioniert er tadellos.

    Und ja die Funktion sollte auf den Button reagieren ( zumindest kann man echo 'test'; wiedergeben)

    PHP
    $sql = "UPDATE `spielfeld` SET `player`= '0'";
    mysql_query($sql);

    2.2 ein kleines mysql_query Problem mit dem Fehlercoder Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in D:\htdocs\pfad
    Aber erstmal muss 2.1 funnktionieren.

    Gruß rambo 5

    2 Mal editiert, zuletzt von rambo 5 (9. April 2013 um 20:18)

  • da sind wir wieder bei den basics, rambo.
    das was du in der datenbank speicherst, kannst du genauso in der session als array speichern oder meinetwegen auch serialisiert als string in einer txt-file.
    zu deinem anzeigeproblem.
    folgendes schema:
    1.) seitenaufbau
    2.) zug machen
    3.) zug verarbeiten
    4.) verarbeitung anzeigen

    1 und 2 machste beim ersten aufruf, die verarbeitung deines zuges benötigt einen erneutn seitenaufruf
    wenn du hier jetzt nich nach der verarbeitung die ausgabe machst bis deine siete zu ende geladen ist, brauchst du einen neuen aufruf, der deine änderungen dann anzeigt.

    und ich stell mir die frage, was machst du zur hölle an einer DB, wenn du nichtmal nen if von nem else unterscheiden kannst?