Ankündigung

Einklappen
Keine Ankündigung bisher.

Tabellenfelder ansprechen

Einklappen

Neue Werbung 2019

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

  • Tabellenfelder ansprechen

    Hallo,

    ich bin noch ein absoluter Anfänger in PHP, also entschuldigt, wenn das ne doofe Frage ist

    Ich habe vor ein kleines 2D-Labyrinth-Spiel zu programmieren, bei dem das Labyrinth als Tabelle dargestellt wird und die Felder dann entweder Mauern oder Wege sind. Durch Anklicken der Felder um den Spieler herum, soll man sich dann auf das entsprechende feld bewegen können.

    Ich habe die Felder bis jetzt einfach so:

    Code:
    <input type="image" ...>
    erzeugt und in der php-Datei dann eben

    Code:
    if(ISSET($_POST[*feldname*_x])){ ... }
    Würde das erstmal theoretisch so funktionieren können?
    Und dann die eigentliche Frage: Wie ändere ich dann vom Server aus die Bilder in den einzelnen Feldern? Also wie setze ich das Bild von der Spielfigur dann auf das angeklickte Feld? Ich muss ja irgendwie die einzelnen Felder ansprechen können, also *feld*.src="bild.jpg" oder so ähnlich... Ist das möglich?

    Danke schonmal

  • #2
    Was du bisher an hast, schaut soweit ganz gut aus.

    Um die Bilder zu steuern, würde es sinnvoll sein, ein 2D-Array mit dem Spielfeld zu initialisiern. Idealerweise ist ein Feld in dem Array wieder ein Array in dem du den Pfad zum Bild (oder eine ID für das Bild) hinterlegst und bestimmte Eigenschaften (mauer: wenn true, darf es nciht betreten werden, ...) gesetzt werden.

    Mit diesem Array und 2 Schleifen generierst du die Tabelle, wie du schon geschrieben hast. Ob du dafür input-Felder verwendest oder normale img-Tags ist eigentlich Geschmacksache.
    PHP online testen, zum Beispiel: md5, base64_decode, preg_match, urldecode und viele weitere...

    Kommentar


    • #3
      Gut, vielen Dank

      Ich hab jetzt versucht das umzusetzen, aber ich hab ein glaub ich ganz einfaches Problem:

      Ich habe die Tabelle jetzt so erzeugt:

      Code:
      for ($i = 1; $i < 13; $i++)
             {
                 echo "  <tr>\n";
      
                 for($j = 1; $j < 17; $j++)
                 {
                    echo "    <td><input type=\"image\" name=\"$i%$j\" src=$icons[$i][$j]></td>\n";
                 }
      
                 echo "  </tr>\n";
             }
      und das Array so:

      Code:
      $icons = array(	"1" => array("1" => "Icons/Mauer.jpg",
      								"2" => "Icons/Mauer.jpg",
      								"3" => "Icons/Mauer.jpg",
      								"4" => "Icons/Mauer.jpg", ...
      Allerdings bekomm ich als Ausgabe dann nur eine Tabelle in der in allen Feldern "Daten absenden" steht... Und wenn ich den Quelltext aufrufe, steht bei src auch nur src=[1] bzw. [2] usw...

      Ist der Aufruf von dem Array mit [$i][$j] falsch?

      Kommentar


      • #4
        Zitat von Choba Beitrag anzeigen
        PHP-Code:
        echo "    <td><input type=\"image\" name=\"$i%$j\" src=$icons[$i][$j]></td>\n"
        http://www.php.net/manual/en/languag...string.parsing
        [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

        Kommentar


        • #5
          wenn du etwas warten wuerdest, werde ich dir mein 2d spiel posten das ich gerade schreibe....aus langweile ^^

          Kommentar


          • #6
            Wie ändere ich dann vom Server aus die Bilder in den einzelnen Feldern? Also wie setze ich das Bild von der Spielfigur dann auf das angeklickte Feld?
            Mit einem Reload (Request). ALternativ Ajax.
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar


            • #7
              Spiel
              Soweit bin ich gekommen. Soll ich code posten ?

              Kommentar


              • #8
                Das wäre supernett, danke

                Und ich hab jetzt auch versucht den Array-Aufruf $icons[$i][$j] in {} zu setzen und alles, was da auf dieser Seite stand ausprobiert, aber da ändert sich nichts...
                Ich hab das Array auch schon geändert und statt

                array("1" => array(...) jetzt nur array(array(...))

                geschrieben, weil ich dachte, dass es vielleicht ein Problem ist, wenn die Indizes im Array Strings sind und die Schleife aber mit Integers durchlaufen wird, aber da ändert sich gar nichts...

                Danke auf jeden Fall schonmal an alle

                Kommentar


                • #9
                  Zitat von Choba Beitrag anzeigen
                  Das wäre supernett, danke

                  Und ich hab jetzt auch versucht den Array-Aufruf $icons[$i][$j] in {} zu setzen und alles, was da auf dieser Seite stand ausprobiert, aber da ändert sich nichts...
                  Ich hab das Array auch schon geändert und statt

                  array("1" => array(...) jetzt nur array(array(...))

                  geschrieben, weil ich dachte, dass es vielleicht ein Problem ist, wenn die Indizes im Array Strings sind und die Schleife aber mit Integers durchlaufen wird, aber da ändert sich gar nichts...

                  Danke auf jeden Fall schonmal an alle
                  Das hat spass gemacht dieses mini game zu coden, danke dass du mir die langweile vertrieben hast
                  da ist der code
                  PHP-Code:
                  <?php
                  //http://www.php-deutsch.de
                  //http://www.php-deutsch.de/forum/

                  //karte 1=wand ; 0=weg/pfad/grass
                  $karte = array(
                  => array(1,1,1,1,1,1,1), 
                  => array(1,0,0,0,1,0,1), 
                  => array(1,1,0,0,1,0,1),
                  => array(1,0,0,1,0,0,1),
                  => array(1,1,0,0,1,0,1),
                  => array(1,0,0,0,0,0,1),
                  => array(1,1,1,1,1,1,1)
                  );


                  //position wechsel
                  if (isset($_GET['x'],$_GET['y']))
                  {
                    
                  $karte[$_GET['y']][$_GET['x']] = 2;      
                  }


                  //spielfeld
                  echo "<table cellspacing=0 cellpadding=0>";
                                       
                  for(
                  $i=0;$i<7;$i++) // y achse
                  {
                         echo 
                  "<tr>";
                                for (
                  $u=0;$u<7;$u++) // x achse
                                
                  {
                                       
                                       if (
                  $karte[$i][$u] == 1)
                                       {
                                              echo 
                  "<td><img src=wand.png></td>";
                                       }elseif (
                  $karte[$i][$u] == 0){
                                              echo 
                  "<td><a href=spiel.php?y={$i}&x={$u}><img src=grass.jpg></a></td>";
                                       }else{
                                              echo 
                  "<td><img src=spieler.png></td>";
                                       }      
                                       
                                }
                         echo 
                  "</tr>";
                  }

                  echo 
                  "</table>";
                  ?>

                  Kommentar


                  • #10
                    Ah ok, stimmt, ich kann den Pfad für das Bild ja auch einfach erst in der Schleife mit if-Abfragen eingeben... Danke^^ Da umgeh ich mein Problem dann ganz gut Ich versuchs gleich mal

                    Aber nur interesshalber... Was war denn da bei mir der Fehler? Warum konnte man das nicht so schreiben?

                    Kommentar


                    • #11
                      weis ich nicht ich versteh dein code gar nicht..
                      ich hab mein source hier nochmal gepostet: Source

                      Kommentar


                      • #12
                        Zitat von md5() Beitrag anzeigen
                        Spiel
                        Soweit bin ich gekommen. Soll ich code posten ?
                        Musst noch ne Kleinigkeit ändern (falls das kein Feature ist):
                        Man kann über die Mauern springen
                        [PHP]if ($var != 0) {
                        $var = 0;
                        }[/PHP]

                        Kommentar


                        • #13
                          Zitat von Wolla Beitrag anzeigen
                          Musst noch ne Kleinigkeit ändern (falls das kein Feature ist):
                          Man kann über die Mauern springen

                          Kommentar


                          • #14
                            Hm... ich hab doch noch ein Problem damit... Ich hab jetzt:

                            Code:
                             $lab = array(	0 =>	array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,),
                            					1 =>	array(0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,),
                            					2 =>	array(0,0,2,0,0,0,1,0,0,1,0,0,1,0,0,0,),
                            					3 =>	array(0,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,),
                            					4 =>	array(0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,),
                            					5 =>	array(0,0,0,1,1,0,1,1,0,1,1,0,1,0,0,0,),
                            					6 =>	array(0,1,1,1,0,0,1,0,0,0,0,0,1,1,1,0,),
                            					7 =>	array(0,1,0,0,0,0,1,0,0,1,1,1,0,0,1,0,),
                            					8 =>	array(0,1,0,1,1,1,1,0,0,1,0,1,1,1,1,0,),
                            					9 =>	array(0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,),
                            					10 =>	array(0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,),
                            					11 =>	array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,));
                            und dann:

                            Code:
                            for ($i = 0; $i < 12; $i++)
                                   {
                                       echo "  <tr>\n";
                            
                                       for($j = 0; $j < 16; $j++)
                                       {
                            				$a = ($j + 1) + ($i * 16);
                            				
                            				if($lab[$i][$j] == 0)
                            					echo "    <td><input type=\"image\" name=\"{$a}\" src=\"Icons/Mauer.jpg\"></td>\n";
                            				elseif($lab[$i][$j] == 1)
                            					echo "    <td><input type=\"image\" name=\"{$a}\" src=\"Icons/Weg.jpg\"></td>\n";
                            				elseif($lab[$i][$j] == 2){
                            					echo "    <td><input type=\"image\" name=\"{$a}\" src=\"Icons/Indy.jpg\"></td>\n";
                            					$c = $a;
                            				}
                                       }
                            
                                       echo "  </tr>\n";
                                   }
                            Aber es sind überall nur Mauern... Egal mit welchen Werten ich das Array fülle... Ich seh da aber keinen Fehler, ihr vielleicht?

                            Kommentar


                            • #15
                              Ich sehe da keinen Fehler. Aber mach mal die Leerzeichen in der Karte(array) weg und mach { und } bei if elseif hin!

                              Kommentar

                              Lädt...
                              X