ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
376
376
EMPFEHLEN
-
Bin gerade dabei ein Online-Browser-Spiel zu programmieren (keine Sorge, nicht sowas wie Galaxy Wars
) und stehe nun vor einem Problem.
Jedes mal, wenn der User eine Figur (bzw. Blase) auf dem Spielfeld anklickt, muss das Spielfeld neu berechnet werden. Dazu hab ich mir die Funktion "gen_gamefield()" geschrieben. Dort wird das Array, das in einer Session gespeichert wurde, eingelesen und die Daten werden überprüft.
Um das neue Spielfeld zu errechnen, müssen nun einige Blasen entfernt werden. Da es sich hierbei um eine rekurisve Funktion handeln wird, hab ich mir gedacht, dass ich diese Rechenschritte wiederrum in eine extra Funktion packe.
Die Daten werden also der Funktion "delete_bubbles()" übergeben. Das funktioniert auch noch, aber die Daten, die dort berechnet werden, werden nicht mehr an "gen_gamefield()" zurückgeben. Das heißt, das Spielfeld wird nicht aktualisiert!
Nun noch ein bisschen vom Code. Ich hoffe, damit könnt ihr mir sagen, woran das liegt.
Hinweis: bei "$gamefield" handelt es sich um ein zweidimensionales, nummerisches Array, das die Farbwerte der Blasen des Spielfeldes enthält.
Ihr könnt euch das Spiel gerne schonmal anschauen.
Wie ihr seht, wird immer nur die Blase entfernt, die angeklickt wird (weil der Befehl nicht in der delete_bubbles()-Funktion steht sondern in der gen_gamefield()-Funktion).
So und in "return $gamefield;" liegt, glaub ich, der Fehler, weil die Daten eben nicht zurückgegeben werden ...PHP-Code:<?php
function gen_gamefield() {
// Lade Array Daten
$gamefield = $_SESSION['Spieledaten'];
// Daten der angeklickten Blaße
$row = strip_tags($_GET['row']);
$col = strip_tags($_GET['col']);
$colour = strip_tags($_GET['colour']);
// ... es folgen weitere Befehle...
// Die Funktion die die umliegenen Blasen entfernen soll wird aufgerufen:
delete_bubbles($gamefield, $colour, $row, $col);
// ... es folgen weitere Befehle...
}
function delete_bubbles($gamefield, $colour, $row, $col) {
// ... es folgen Befehle um die umliegenen Blasen zu entfernen...
// Neu berechneten Daten (Spielfeld) werden zurückgegeben...
return $gamefield;
}
?>
Was ich bereits getestet habe:- Die Daten kommen korrekt bei der Funktion "delete_bubbles()" an.
- Die Funktion "delete_bubbles()", die das neue Spielfeld berechnen soll, funktioniert an sich ohne Fehler.
Sorry, dass das jetzt so lang wurde, aber ich glaub, die Erklärung war notwendig.
Danke,
cAm3eel.
-
Wie sieht denn der rekursive Aufruf von delete_bubbles aus? Vielleicht liegt der Fehler ja an der Stelle.
Außerdem wäre es vielleicht speicherschonender, das Spielfeld per Referenz zu übergeben.„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Bei der rekursiven Funktion bin ich noch gar net... erst mal muss die Funktion an sich laufen. (Wenn ich den Code der in "delete_bubbles()" steht ganz normal in die "gen_gamefield()" baue funktoniert alles, deshalb weis ich ja das in der Funktion an sich kein Fehler ist sondern einfach nur die Daten nicht zurückgegeben werden...
Zitat von Matthias Reitinger
Was genau meinst du mit "per Referenz zu übergeben"?
Danke,
cAm3eel.
-
Ein Beispiel zur Übergabe per Referenz:
Besonders sinnvoll bei der Übergabe größerer Datenstrukturen, da nicht bei jedem Aufruf eine Kopie angelegt werden muss, sondern nur eine Referenz übergeben wird.PHP-Code:<?php
function ohneReferenz($arg)
{
$arg = 42;
}
function mitReferenz(&$arg)
{
$arg = 42;
}
$var = 0;
ohneReferenz($var);
echo $var; // Ausgabe: 0
mitReferenz($var);
echo $var; // Ausgabe: 42
?>
Zum eigentlichen Problem: Sollte der Rückgabewert des Aufrufs delete_bubbles($gamefield, $colour, $row, $col); nicht in $gamefield gespeichert werden?„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Naja das ganze soll so funktionieren:
Zitat von Matthias Reitinger
Die Funktion delete_bubbles() wird in gen_gamefield() aufgerufen und der delete_bubbles() Funktion werden die Daten des Array $gamefield übergeben.
In delete_bubbles() wird das Array verändert (Datensätze gelöscht, verschoben usw.). Dann soll das Array zurück an die Funktion gen_gamefield() gesendet werden die dann das neue Spielfeld erstellt.
Danke übrigens für dein Beispiel. Um die Übergabe per Referenz werd ich mich kümmern sobald das eigentliche Problem gelöst ist.
cAm3eel.
-
Und genau das meinte ich mit meinem Hinweis. Meiner Meinung nach sollte es eher so aussehen:
Zitat von cAm3eel
PHP-Code:// Die Funktion die die umliegenen Blasen entfernen soll wird aufgerufen:
$gamefield = delete_bubbles($gamefield, $colour, $row, $col);
„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Da ham wers wieder: Kleiner Fehler große Wirkung

Es funktioniert, danke, super!
cAm3eel.
Ähnliche Themen
-
Länge des Response wird nicht richtig zurückgegeben
Von Johannes7146 im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 13.10.09, 09:33 -
Problem mit rekursiver Funktion: Array wird nicht zurückgegeben
Von tequito im Forum PHPAntworten: 4Letzter Beitrag: 04.05.08, 14:20 -
String wird nicht zurückgegeben
Von maxn im Forum PHPAntworten: 6Letzter Beitrag: 25.04.08, 09:31 -
[MySQL4] falls Zeile nicht gefunden wird, soll 0 zurückgegeben werden
Von Paula im Forum Relationale DatenbanksystemeAntworten: 5Letzter Beitrag: 01.12.06, 16:31 -
url wird von datenbank nicht richtig zurückgegeben.
Von glader im Forum PHPAntworten: 1Letzter Beitrag: 12.04.06, 22:36





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren