ZZZ bei Crash: Unterschied zwischen den Versionen

Aus KaroWiki
Zur Navigation springen Zur Suche springen
(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, 17: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--;
               }
               #...