Problem mit Puzzlerätsel

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Puzzlerätsel

    Hallo,
    vor einiger Zeit habe ich mich bereits mit einem sogenannten Puzzlerätsel beschäftigt. Diese Art der Rätsel findet man in Rätselheften. An der Seite stehen Worte und die verstecken sich Horizontal, Vertikal, Diagonal, Vorwärts und Rückwärts in einem Buchstabensalat.

    Ich habe meine alten Anfänge noch einmal aufgegriffen und komme nun an einer Stelle nicht weiter. Vielleicht kann mir jemand helfen diese eine Hürde zu lösen.

    Ich habe entweder ein Problem mit dem verarbeiten der Klasse oder ich hab einen Denkfehler... Bei 15 Skriptaufrufen ist mal 1 Versuch bei, wo das Feld mit allen Buchstaben und den Wörtern die es enthalten soll richtig angezeigt wird.

    Damit hier nicht so viel Text steht, habe ich das Skript und eine Demo online gestellt.

    http://www.cend.de/puzzle/puzzle_source.php

    Wie gesagt man muss das Skript wirklich oft aufrufen, um einmal einen richtigen Versuch zu sehen... Wenn man das sieht, weiss man auch genau wie es mal aussehen soll...

    Vielleicht kann ja mal jemand drüberschauen und sagen was meine Gedanken so verwirrt )

    Vielen vielen vielen Dank schonmal vorab

    Gruss
    Christian

  • #2
    Re: Problem mit Puzzlerätsel

    Also beim Grossteil der Aufrufe bekomme ich nur
    Code:
    Notice: Undefined offset: 0 in .../puzzle_test.php on line 83
    Notice: Undefined offset: 1 in .../puzzle_test.php on line 84
    Notice: Undefined index: in .../puzzle_test.php on line 89
    Fatal error: Call to a member function setChar() on a non-object
    in .../puzzle_test.php on line 89
    zu sehen.


    Ganz allgemein (ohne mir anzusehen, wie du das im Script gelöst hast), klingt das für mich nach einer Aufgabe für einen Backtracking-Algorithmus.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      ich sehe
      Notice: Undefined offset: 0 in /home/www/christian-end/public/puzzle/puzzle_test.php on line 83

      Notice: Undefined offset: 1 in /home/www/christian-end/public/puzzle/puzzle_test.php on line 84

      Notice: Undefined index: in /home/www/christian-end/public/puzzle/puzzle_test.php on line 89

      Fatal error: Call to a member function setChar() on a non-object in /home/www/christian-end/public/puzzle/puzzle_test.php on line 89
      Zuletzt geändert von penizillin; 28.03.2007, 00:01.

      Kommentar


      • #4
        Re: Re: Problem mit Puzzlerätsel

        Ganz allgemein (ohne mir anzusehen, wie du das im Script gelöst hast), klingt das für mich nach einer Aufgabe für einen Backtracking-Algorithmus.
        er will das puzzle nicht lösen, sondern nur erstellen, und das geht einfacher, denke ich, indem man erst die worte gültig platziert und dann den rest mit buchstabensalat ausfüllt (oder andersherum).

        aber ich verstehe immer noch das "rätsel" nicht - sollen zahlen irgendwann zu buchstaben werden? wer soll so ein riesenfeld lösen wollen?
        Zuletzt geändert von penizillin; 28.03.2007, 00:03.

        Kommentar


        • #5
          Also die Zahlen werden später zu Buchstaben und die Größe des Feldes hängt auch etwas von der Anzahl der Worte ab, die dort drin zu finden sind. Wie gesagt das ist normalerweise so ein Rätsel, was man in Rätselheften findet. Da ich aber auch sowas mal gerne vorm PC lösen wollte, hab ich mich daran gesetzt.

          Diese Fehlermeldungen kommen wie gesagt leider häufiger als das es mal ordentlich erscheint.
          Habe schon verschiedene Lösungen probiert, aber das schien mir die beste. es scheitert so glaube ich irgendwo zwischen Startkoordinaten festlegen, überprüfen ob das Wort von dieser Stelle an in das Feld auch reinpasst und dem eigentlich einfügen vom Wort in das Feld... Nur ich seh vor lauter Bäume den Wald nicht mehr...

          Kommentar


          • #6
            was steht denn in den genannten zeilen?

            Kommentar


            • #7
              Das sind die 2 Schleifen... Wobei die zweite Schleife angemeckert wird:

              // Das Objekt Feld mit Buchstaben füllen
              for ($i = 0; $i < $hoehe; $i++)
              {
              for ($j = 0; $j < $breite; $j++)
              {
              // hier nicht einfach nur einen buchstaben
              // speichern, sondern das Feld object
              $feld[$i][$j] = new Feld();
              }
              }

              // Wortliste auslesen und die Wörter / Buchstaben im Feld verteilen
              for ($y = 0; $y < count($words); $y++)
              {
              $wordlength = strlen($words[$y]); //----- Lege die Wortlänge fest
              $start_pos = randStart($hoehe,$breite,$wordlength); //----- Speicher in $start_pos die Startkoordinaten für das Wort

              Das sind Zeile 82 und 83 wo dieser Fehler erscheint:
              Notice: Undefined offset: 0 in C:\Programme\xampp\htdocs\puzzle\puzzle_test.php on line 82

              Notice: Undefined offset: 1 in C:\Programme\xampp\htdocs\puzzle\puzzle_test.php on line 83
              ------------------------------------------------------------------------------------------
              $position_y = $start_pos[0]; //----- Y-Koordinate
              $position_x = $start_pos[1]; //----- X-Koordinate
              ------------------------------------------------------------------------------------------
              $call_function = $start_pos[2]; //----- Funktionsname für die Richtung, um die nächste Position des nächsten Buchstabens zu bestimmen

              for ($a = 0; $a < strlen($words[$y]); $a++) //----- Schleife für alle Wörter im Array $words
              {
              $feld[$position_y][$position_x]->setChar("<font color=\"#F70000\">".$words[$y][$a]."</font>"); //----- Setze den Buchstaben vom Wort ein
              $feld[$position_y][$position_x]->is_besetzt(TRUE); //----- Setze das Feld auf Besetzt (Das ist für das spätere prüfen, ob da schon ein Buchstabe aus einem Wort steht und wenn ja, kann man dann nachschauen ob der einzusetzende Buchstabe gleich dem schon besetzten Buchstaben ist.)

              An dieser Stelle erscheint der Fehler:
              Notice: Undefined index: in C:\Programme\xampp\htdocs\puzzle\puzzle_test.php on line 88

              Fatal error: Call to a member function setChar() on a non-object in C:\Programme\xampp\htdocs\puzzle\puzzle_test.php on line 88
              ------------------------------------------------------------------------------
              $position = call_user_func($call_function,$position_y,$position_x); //----- Rufe die Funktion für die entsprechende Richtung auf und lasse die Werte hochzählen
              ------------------------------------------------------------------------------
              $position_y = $position[0];
              $position_x = $position[1];
              }
              }

              Wie gesagt es geht zwischendurch mal, deshalb komme ich irgendwie nicht mehr klar...

              Kommentar


              • #8
                Und direkt nochmal eine Frage zum Aufbau... Ist es vielleicht ratsamer, die Wörter zuerst mit Koordinaten zu belegen und in ein Array zu speichern, wo welcher Buchstabe stehen soll und dann erst die Klasse nur einmal in der Schleife für das Feld füllen zu benutzen? Dann sollte doch der FATAL ERROR behoben sein.

                Kommentar


                • #9
                  teste mal eher sowas:

                  PHP-Code:
                  $position_y NULL;
                  $position_x NULL;
                      
                  // Wortliste auslesen und die Wörter / Buchstaben im Feld verteilen
                  for ($y 0$y count($words); $y++)
                      {
                          
                  $wordlength strlen($words[$y]); 
                          
                  $start_pos randStart($hoehe,$breite,$wordlength);
                          
                  $position_y $start_pos[0]; //----- Y-Koordinate
                          
                  $position_x $start_pos[1]; //----- X-Koordinate
                          
                  $call_function $start_pos[2]; //----- Funkt
                          
                          
                  for ($a 0$a strlen($words[$y]); $a++) 
                              {
                                  
                  $feld[$position_y][$position_x] = new Feld();
                                  
                  $feld[$position_y][$position_x]->setChar("<font color=\"#F70000\">".
                                  
                  $words[$y][$a]."</font>"); 
                                  
                  $feld[$position_y][$position_x]->is_besetzt(TRUE); 
                                  
                  $position call_user_func($call_function,$position_y,$position_x); 
                                  
                  $position_y $position[0];
                                  
                  $position_x $position[1];
                              }
                      } 
                  Call to a member function setChar() on a non-object
                  sagt und ja das da irgendwie das objekt fehlt ...
                  Zuletzt geändert von Bugbuster; 28.03.2007, 12:10.
                  tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
                  documentation: php.net mysql.com framework.zend.com

                  Die Nachtwache!

                  Kommentar


                  • #10
                    Ahh ok das behebt den FATAL Error...
                    Nun mal sehen, jetzt funktioniert die Funktion randStart anscheinend nicht immer... Mal klappen alle 3 Wörter mal nur 1 aber auch schonmal das mittlere Wort... Aber glaube das hilft mir nun schonmal weiter

                    Danke nochmal fürs helfen!!!

                    Gruss
                    Christian

                    Kommentar


                    • #11
                      No prob. Mal so nebenbei das war echt mal so wir ich es mir wünsche ein Problem vorgestellt zu bekommen. Online die Sourcen sowie ne Demo .. nagut die Fehlermeldungen hätteste auch noch gleich hier schreiben können ^^ ... akzeptable Referenz für Fehlerbeschreibung.

                      mfg
                      bugbuster
                      tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
                      documentation: php.net mysql.com framework.zend.com

                      Die Nachtwache!

                      Kommentar


                      • #12
                        Naja ich möchte ja das mir geholfen wird und klar nächstes mal schreib ich direkt die Fehler dazu Aber es war schon so spät gestern, und ich hatte schon irgendwie einen dicken Hals auf das Skript *g*


                        Wobei ich habe da nun noch ein kleines noch verrückteres Problem

                        Ich habe nun auch den Fehler für undefined index 0 gefunden.
                        Aus folgender Funktion wird ein Array an eine andere Funktion übergeben... In der Funktion wo ich die Werte wieder zurück haben möchte, kommt einfach nichts richtig an... Der var_dump von dem array aus der Funktion in dem Fall $giveback hat aber alle Werte richtig drin

                        Hier mal die betroffene Funktion und darunter die Funktion, die die andere Funktion aufruft... Mein Gott is das wieder kompliziert zu erklären...
                        PHP-Code:
                        function TopToDown_Init ($fieldheight,$fieldwidth,$wordlength)
                            {
                            
                        $posy generate_numbers(0,$fieldheight);         $posx generate_numbers(0,$fieldwidth); 

                            if ((
                        $posy $wordlength >= 0) AND ($posy $wordlength <= $fieldheight) AND 
                        (
                        $posx $wordlength >= 0) AND ($posx $wordlength <= $fieldwidth))
                                    {
                                                        
                        $giveback[0] = $posy;
                            
                        $giveback[1] = $posx
                        Wie gesagt in dem var_dump steht alles korrekt drin:
                        z.B. array(2) { [0]=> int(12) [1]=> int(17) }
                        -----------------------------------------------------------------
                        PHP-Code:
                        var_dump($giveback);
                        echo 
                        "<br>"
                        -----------------------------------------------------------------
                        PHP-Code:
                                    return $giveback;
                                    }
                                    else
                                    {
                                    
                        TopToDown_Init ($fieldheight,$fieldwidth,$wordlength);
                                    }
                            } 

                        Und hier kommt das nicht an
                        PHP-Code:
                        function randStart ($fieldheight,$fieldwidth,$wordlength)
                            {
                                
                        $function_to_call randDirection($fieldheight,$fieldwidth); 
                        Hier wird die Funktion aufgerufen
                        --------------------------------------------------------------------------------
                        PHP-Code:
                                $position_start call_user_func($function_to_call."_Init",$fieldheight,$fieldwidth,$wordlength);
                                
                        $position_start[0] = $position_start[0];
                                                        
                        $position_start[1] = $position_start[1];
                                                        
                        $position_start[2] = $function_to_call
                        Hier kommt leider nichts an
                        z.B. array(3) { [0]=> NULL [1]=> NULL [2]=> string(9) "TopToDown" }
                        -------------------------------------------------------------------------------
                        PHP-Code:
                                                        var_dump($position_start);
                                echo 
                        "<br>";
                                return 
                        $position_start
                            } 
                        Kann ich irgendwie überprüfen, was die Funktion als Return genau drinstehen haben? Ausser mit dem var_dump bevor es zurückgegeben wird?
                        Zuletzt geändert von cathore; 28.03.2007, 12:51.

                        Kommentar


                        • #13
                          Hier noch der Fehler, und die Dumps wenn sie richtig:

                          Notice: Undefined offset: 1 in C:\Programme\xampp\htdocs\puzzle\puzzle.php on line 17


                          var_dump($giveback);
                          ----------------------------------------------------
                          array(2) { [0]=> int(29) [1]=> int(37) }

                          var_dump($position_start);
                          ----------------------------------------------------
                          array(3) { [0]=> int(29) [1]=> int(37) [2]=> string(9) "TopToDown" }

                          Kommentar


                          • #14
                            Ich hätte dich nicht zu früh loben sollen. Fällt dir was auf? Siehst du unten bei deinem Browser den Balken? Er nennt sich horizontaler Scrollbalken und den mögen wir hier nicht ... nutz die Änderfunktion deines Beitrags und lösch die Kommentare raus...

                            mfg
                            bugbuster
                            tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
                            documentation: php.net mysql.com framework.zend.com

                            Die Nachtwache!

                            Kommentar


                            • #15
                              Dachte es würde dann verständlicher. Aber Kommentare sind raus und der Scollbalken ist weg

                              Sorry

                              Kommentar

                              Lädt...
                              X