ZZZ bei Crash: Unterschied zwischen den Versionen
Zucker (Diskussion | Beiträge) |
Kili (Diskussion | Beiträge) (Bugfix/Vereinfachung) |
||
Zeile 89: | Zeile 89: | ||
[http://www.zuckerimnetz.de/karo/karopapier_singleplayer.zip karopapier_singleplayer.zip] | [http://www.zuckerimnetz.de/karo/karopapier_singleplayer.zip karopapier_singleplayer.zip] | ||
Da drinn ist auch irgendwo sowas versteckt | Da drinn ist auch irgendwo sowas versteckt | ||
+ | |||
+ | |||
+ | Kili: vorhin schon im Forum verlinkt, aber sicherheitshalber noch mal hier: Bugfix (erzeugte Crashzuege mitzaehlen) und Aufraeumarbeiten (das $walker-Zeugs wird nicht benoetigt): | ||
+ | |||
+ | #... | ||
+ | $maxmoves=mysql_num_rows($res); | ||
+ | $i=$aussetzen; | ||
+ | while ($maxmoves>0 && $i>=0) | ||
+ | { | ||
+ | $row=mysql_fetch_array($res); | ||
+ | if ($row[crash]==1) | ||
+ | { | ||
+ | $i=$i+$aussetzen+1; | ||
+ | } | ||
+ | $i--; | ||
+ | $maxmoves--; | ||
+ | } | ||
+ | #... | ||
+ | |||
[[Category:Bisschen OpenSource]] | [[Category:Bisschen OpenSource]] |
Version vom 12. Dezember 2010, 16:46 Uhr
Da der (zugegebenermaßen evtl. etwas kompliziert programmierte) Algorithmus zur Bestimmung der Zurücksetzposition offenbar einen Bug hat, gibt's hier mal meinen "original"-Source code und danach eine korrektur bzw. Anmerkungen von Quabla.
Ich stell's hier jetzt mal zur Diskussion und möge sich die Community an diesem Stück Code beweisen :-D
if ($possibles==0) { $query="select M_ID,x_pos,y_pos,crash from $movestable [..]"; $res=do_query($query); $maxmoves=mysql_num_rows($res); if ($aussetzen>=$maxmoves) { $aussetzen=$maxmoves-1; } $walker=0; $i=$aussetzen; while ($i>=0) { $row=mysql_fetch_array($res); if ($row[crash]==1) { $sum=$aussetzen+$walker+$i; if (($sum)>=$maxmoves) $i=$maxmoves-$walker-1; else $i=$i+$aussetzen; } $i--; $walker++; } $sysmsg="-:KIch werde $aussetzen Züge zurückgesetztK:-"; echo "AUAAAA! Es quietscht und du knatterst ins Gras... Dafür wirst Du um $aussetzen Züge zurückgesetzt und startest wieder von 0."; }
Hier die Kommentierung und Vorschläge von Quabla
if ($possibles==0) { $query="select M_ID,x_pos,y_pos,crash from $movestable WHERE [..]"; $res=do_query($query); $maxmoves=mysql_num_rows($res); if ($aussetzen>=$maxmoves) { $aussetzen=$maxmoves-1; }
$walker kann wech
#$walker=0; $i=$aussetzen; while ($i>=0) { $row=mysql_fetch_array($res); if ($row[crash]==1) {
und den ganzen Kladderadatsch in diesem if-Zweig kann man dann ersetzen durch
$i = 0; # $sum=$aussetzen+$walker+$i; # if (($sum)>=$maxmoves) # $i=$maxmoves-$walker-1; # else # $i=$i+$aussetzen; } $i--; #$walker++; }
Jody fügt hinzu:
Damit die richtige Anzahl an Zügen ausgegeben wird, müsste man quabla's Vorschlag noch wie folgt ändern:
# ... if ($row[crash]==1) { $aussetzen -= $i; $i = 0; } # ...
Zucker:
$query="select M_ID,x_pos,y_pos,crash from $movestable [..]";
Liese sich das ganze nicht über EIN sql ziehen und dann einfach einen normalen Zug machen ?
karopapier_singleplayer.zip Da drinn ist auch irgendwo sowas versteckt
Kili: vorhin schon im Forum verlinkt, aber sicherheitshalber noch mal hier: Bugfix (erzeugte Crashzuege mitzaehlen) und Aufraeumarbeiten (das $walker-Zeugs wird nicht benoetigt):
#... $maxmoves=mysql_num_rows($res); $i=$aussetzen; while ($maxmoves>0 && $i>=0) { $row=mysql_fetch_array($res); if ($row[crash]==1) { $i=$i+$aussetzen+1; } $i--; $maxmoves--; } #...