Ankündigung

Einklappen
Keine Ankündigung bisher.

Erstellung eines kleinen Schachbrettes

Einklappen

Neue Werbung 2019

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

  • Erstellung eines kleinen Schachbrettes

    Moin moin,
    daher das ich ein anfänger bin was PHP & Datenbanken angeht frag ich einfach mal die Profis unter euch . Es geht um folgendes Problem und suche eine Lösung.

    Ich möchte mittels PHP ein kleines Schachbrett erstellen. Es geht mir hier noch nicht ums Spiel sondern vorerst nur um das Brett wenn ich die index.php aufrufe das es mir optisch mittels Bildern dargestellt wird.
    Dateien die ich schon habe:
    index.php (die noch nicht fertig ist)
    brett.php (mit inhalt
    x1|y1|weiss|blank
    x1|y2|schwarz|blank
    x1|y3|gelb|air
    x1|y4|blau|air
    .
    .)

    wie schaff ich es jetzt, dies optisch wieder wiederzugeben??? hab mich schon durch einige Foren durchgelesen&denkopfzerbrochen


  • #2
    Mach 2 Schleifen. Eine für die X-Koordinate, eine für die Y-Koordinate.

    Logischerweise Y zuerst

    Geh die durch und schicke jeweils in der inneren die notwendigen Informationen zum Client.

    Irgendwie habe ich das Gefühl, das dies aber nicht deine Frage beantwortet... formuliere sie deshalb bitte ein wenig genauer.

    Kommentar


    • #3
      der Begriff "Schleifen" sagt mir schonmal was. (am Boden schleifen vor verzweiflung).

      Zunächst möchte ich die brett.php auslesen lassen. dies geht mit
      Code:
      $array = file("brett.php");<
      danach sollte mir je nach X Y Farbe Zustand ein Bild zuordnen und wie ein Schachbrett aufbauen.
      Code:
      $X = range(1,10);
      $Y = range (1,10);
      $farbe = array("schwarz","weiss","blau","gruen","gelb");
      $zustand = array("air","clear","blank");

      Kommentar


      • #4
        Die "brett.php" auslesen...

        Mir dämmert was böses... du willst damit doch wohl nicht sagen, das du die Daten in einem Flatfile abgelegt hast, welches die Extension .php trägt?

        Bzw. mal anderster gefragt, hast du die Daten in einer Datenbank abgelegt, oder geht es dir nur um das Parsen einer Datei, extrahieren der notwendigen Informationen anhand vorgegebener Syntax und Visualisierung dieser dann als Schachbrett?

        Kommentar


        • #5
          hört sich ja kompliziert an aber (!)
          nein, die Daten wurden in keiner Datenbank angelegt
          jain, ich möchte die daten nur auslesen lassen
          ja, Visualisierung wenn es möglich ist

          PS: Nebenfrage: ist es ein fehler (für später wenn ich evtl was ändern möchte) das ich die Datei einfach so angelegt hab?

          Kommentar


          • #6
            Fehler... Ansichtssache... das .php als Extension ist falsch gewählt.

            Wenn du Zugriff auf eine Datenbank hast, dann speichere die Daten lieber dort. Das macht es dir später einfacher dieser z.B. zu ändern.

            Ich gehe mal davon aus, das du das noch machst und wir jetzt nur noch über den Theoretischen Weg reden zu der Lösung deines Problems.

            Damit du die Grundlagen nachlesen kannst, hier ein Link:

            http://www.php.net/manual/de/ref.filesystem.php

            Hier ein Beispiel:

            Code:
            $objFH = fopen ("/home/rasmus/file.txt", "r");
            while (!feof($objFH))
            {
              $strBuffer = fgets($objFH, 80);
              $arrParts = explode ("|", $strBuffer);
            }
            fclose ($objFH);
            Dieser kleiner Code geht die Datei Zeilenweise durch, zerlegt sie anhand des Trenners | und speichert das Ergebniss in einem Array ab.

            $arrParts[0] ist danach X
            $arrParts[1] ist danach Y
            ...

            Ich hoffe es hilft.

            Trotzdem nochmal der Hinweis: Sofern möglich, steige auf eine Datenbankbasierende Lösung um.
            [/b]

            Kommentar


            • #7
              Ich bin mal so frei und knall dir eine meiner Klassen vor den Latz.

              In getPlate() ist der eigentlich Aufbau drin.

              Code:
              class dfpCms_chessPlate {
              
                 var $pieces;
                 var $piecesString;
                 var $letter;
              
                 function dfpCms_chessPlate () {
                    $this->letter = array ( 'a' => 1,
                                            'b' => 2,
                                            'c' => 3,
                                            'd' => 4,
                                            'e' => 5,
                                            'f' => 6,
                                            'g' => 7,
                                            'h' => 8 );
                 }
              
                 function resetPieces () { $this->pieces = array(); }
              
                 function setPieces ($piecesString = null) {
              
                    if (is_null($piecesString)) {
                       $this->pieces[8] = array (null, 'wt', 'ws', 'wl', 'wk', 'wd', 'wl', 'ws', 'wt');
                       $this->pieces[7] = array (null, 'wb', 'wb', 'wb', 'wb', 'wb', 'wb', 'wb', 'wb');
                       $this->pieces[2] = array (null, 'sb', 'sb', 'sb', 'sb', 'sb', 'sb', 'sb', 'sb');
                       $this->pieces[1] = array (null, 'st', 'ss', 'sl', 'sk', 'sd', 'sl', 'ss', 'st');
                    } else {
                       $this->piecesString = $piecesString;
              
                       $plate = strtolower( trim( $this->piecesString));
                       $figures = split( ', ', $plate);
              
                       foreach ($figures AS $figure) {
                          $len = strlen($figure);
                          $rest = $len % 2;
                          
                          if ($rest == 1) {            
                             $figure_is = substr( $figure, 0, 3);
                             $figure_on = substr( $figure, 3);
                          } else {            
                             $figure_is = substr( $figure, 0, 2);
                             $figure_on = substr( $figure, 2);
                          }
              
                          $figure_on = strtr( $figure_on, $this->letter);
                          $figure_ct = strlen( $figure_on);
                          for ($c = 1; $c <= $figure_ct; $c += 2) {
                             $this->pieces[$figure_on{$c}][$figure_on{$c - 1}] = $figure_is;
                          }
                       }
              #        var_dump ($this->pieces);
                    }
                 }
              
                 function _colorHexToRGB($color) {
                    $color = strtolower($color);
                    $l = strlen($color);
              
                    if ($l == 7) {
                       $color = substr($color, 1);
                    }
              
                    $r = substr($color,0,2);
                    $g = substr($color,2,2);
                    $b = substr($color,4);
                    
                    $r = hexdec($r);
                    $g = hexdec($g);
                    $b = hexdec($b);
                    
                    return $r.'_'.$g.'_'.$b;
                 }
                 
                 function _figureToString($figure) {
                    $figure = strtolower($figure);
                    $color = substr($figure, 0, 1);
                    $piece = substr($figure, 1, 1);
                    $position = substr($figure, 2, 1);
                    if (!$position) {
                       $position = 'o';
                    }
              
                    $pieces = array(
                       'k' => 'king',
                       'd' => 'queen',
                       's' => 'knight',
                       'l' => 'bishop',
                       't' => 'tower',
                       'b' => 'pawn'
                       );
              
                    $colors = array(
                       'w' => 'white',
                       's' => 'black',
                       'n' => 'neutral'
                       );
              
                    $positions = array(
                       'o' => 'up',
                       'l' => 'left',
                       'r' => 'right',
                       'u' => 'down'
                       );
                       
                    return
                       $pieces[$piece].'.'.
                       $colors[$color].'.'.
                       $positions[$position];
                       
                 }
              
                 function getPlate (&$plate) {
                    $bgcc = 1;
                    $bgc[] = '#FFFFFF';
                    $bgc[] = '#CCCCCC';
                    if (!isset ($this->pieces)) {
                       print 'NO PLACINGS';
                    }
                    $plate = '<div style="width:'.( 22 * 8).'px;height:'.( 22 * 8).'px;border-style:solid;border-width:1px">';
                    for ($h = 8; $h > 0; $h--) {
                       
                       for ($v = 1; $v < 9; $v++) {
                          
                          if (( $h+$v+2) % 2) {
                             $bgcc = 0;
                          } else {
                             $bgcc = 1;
                          }
                          
                          if (!empty($this->pieces[$h][$v])) {
              #              print 'Setting Piece '.$this->pieces[$h][$v].'
              ';
                             $plate .= '<div class="chessPiece" style="background-color:'.$bgc[$bgcc].';';
                             $plate .= 'background-image:url(/images/chessPieces/';
                             $plate .= $this->_figureToString($this->pieces[$h][$v]).'.';
                             $plate .= $this->_colorHexToRGB($bgc[$bgcc]);
                             $plate .= '.png)">';
                             $plate .= '</div>'."\n";
                          } else {
                             $plate .= '<div class="chessPiece" style="background-color:'.$bgc[$bgcc].'"></div>'."\n";
                          }
              #           $bgcc++;
              #           if ($bgcc ==2) { $bgcc = 0; }
                       }
                       $plate .= '<br style="clear:both">';
                    }
                    $plate .= '</div>';
                    return true;
                 }
              }

              Kommentar


              • #8
                *g*

                Ich seh da gerade einen "Buffer Overflow" bei jemanden...

                *ggg*

                Kommentar


                • #9
                  Zitat von MrMarco
                  Ich seh da gerade einen "Buffer Overflow" bei jemanden...
                  Für den Fall, dass ich gemeint bin: Die Klasse ist etwas älter .. im Moment ungetestet ... und durchaus ein guter Kanditat, ohne Zugaben von aussen nicht zu funktionieren ^^

                  Aber das Prinziep stimmt ;P

                  Kommentar


                  • #10
                    Zitat von Guradia
                    Zitat von MrMarco
                    Ich seh da gerade einen "Buffer Overflow" bei jemanden...
                    Für den Fall, dass ich gemeint bin: Die Klasse ist etwas älter .. im Moment ungetestet ... und durchaus ein guter Kanditat, ohne Zugaben von aussen nicht zu funktionieren ^^

                    Aber das Prinziep stimmt ;P
                    Nein. Eher er. Ich wollte vorhin schon vorschlagen das ganze in den Anfängerbereich zu verschieben, habe es mir dann aber verkniffen.

                    Kommentar


                    • #11
                      Ja weil das glaub ich nichts mit anfängern zu tun hat... sondern mit leuten die was davon verstehen und mir evtl weiterhelfen könnten oder auch tipps geben könnten wie ich das ganze handhaben soll.

                      aber die Klasse ist schonmal ein guter Anfang würde ich sagen.
                      also mir geht es voerst um

                      auslesen von base.php
                      auswerten der koordinaten x y
                      auswerten welcher zustand auf welchem stück hat (farbe, zustand)
                      ausgabe von Brett stück für stück x y farbe zustand und via Bild (15x15) wiedergeben
                      anzeige des Brettes (anguggn, bewundern, drüber lachen, verändern )

                      Kommentar


                      • #12
                        Re: Erstellung eines kleinen Schachbrettes

                        Zitat von nummi
                        daher das ich ein anfänger bin was PHP & Datenbanken angeht frag ich einfach mal die Profis unter euch .
                        Merken: Anfänger fragen im Anfänger Forum, Profis fragen im Profi Forum.

                        -> moved to Anfänger Forum.

                        Kommentar


                        • #13
                          und was ist wenn ein Anfänger einen profi fragen möchte???

                          Kommentar


                          • #14
                            Zitat von nummi
                            und was ist wenn ein Anfänger einen profi fragen möchte???
                            Quengel nicht und lies wenigstens nachträglich das: http://www.phpfriend.de/ftopic16823.html

                            Apropos lesen:
                            Wenn Du die FAQ gelesen hättest, hättest Du zB. das gefunden:
                            25.17. Wie stelle ich Tabellenzeilen abwechselnd farbig dar?
                            http://www.dclp-faq.de/q/q-code-tabellenfarbe.html

                            -> "Antwort von Clemens Koppensteiner"

                            Schach: "Das rechte obere Eckfeld ist schwarz"

                            Der Schachbrett-Algorithmus ist sehr simpel:
                            Schleife s von 1-8
                            Schleife z von 1-8

                            Wenn z ungerade ist, beginnt die Zeile mit einem weißen Feld. s schaltet dann zwischen weiß und schwarz.

                            Wenn z gerade ist, beginnt die Zeile mit einem schwarzen Feld. s schaltet dann zwischen schwarz und weiß.

                            Du siehst also, daß sowas lediglich eine Fleißaufgabe ist.

                            Kommentar


                            • #15
                              juhu endlich ne antwort... ich hab mir gestern abend bis ca 24 uhr den kopfzerbrochen und keine Anwort gefunden in einigen Foren wie ich evtl. das machen könnte dabei siehts doch so einfach aus... auch wenn ich gerade in der arbeit sitze und nicht meine Daten im Kopp habe. Aber ich glaub langsam weiss ich den Fehler dank des Schachs und dem link(s.o.).

                              Wenns dann mal funktioniert kann ichs ja mal posten

                              Kommentar

                              Lädt...
                              X