#1 22. April 2012 X Zeichnen Heyho, ich bin grade dabei PHP zu lernen und habe diese funktion gefunden: function male($zeichen, $anzahl, $br=false) { for($i = 1; $i <= $anzahl; $i++) { echo $zeichen; } if($br) { echo '<br>'; } } Damit wollte ich jetzt ein X mit einem Rahmen drum zeichnen, welches aus '*' Symbolen besteht. Nun weiss ich nicht genau wie ich das angehen soll, bis auf eine for-schleife. Kann mir jemand weiterhelfen, wie das funktioniert? Stehe irgendwie ziemlich auf dem Schlauch. mfg opsirunner + Multi-Zitat Zitieren
#2 22. April 2012 Zuletzt bearbeitet: 22. April 2012 AW: X Zeichnen Bitte den [ PHP]-BBCode benutzen Die Funktion ist ja schön und gut, hilft dir aber in diesem Fall wenig. Ich würde das wie folgt angehen: Das "X", das herauskommt, wird ja nicht nur aus "*" bestehen, auf die gesamte Fläche bezogen, sondern auch aus ganz viel Leerzeichen (oder "*" in Farbe des Hintergrunds, das würde aber keinen Sinn machen ). Und um das zu berechnen bietet sich der HTML-tag "<pre>" an, dann haben Zeichen und v.a. Leerzeichen die gleiche Breite. Sagen wir mal, es solle folgende Ausgabe geben: Code: ** ** ** ** **** ** ** ** ** Jetzt musst du dir überlegen, wie sich die Position der "*" in den einzelnen Zeilen berechnen lässt, dann kannst du es einfach über eine for-Schleife machen lassen. Konkret: Wie viele Leerzeichen sind vor dem ersten "*" und wie viele dazwischen + Multi-Zitat Zitieren
#3 23. April 2012 Zuletzt bearbeitet: 23. April 2012 AW: X Zeichnen Mit Sicherheit geht das ganze viel viel leichter! PHP: <? php function build_x ( $char = '*' , $space_char = ' ' , $spaces = 10 , $size = 3 ) { $result = array(); // maximum width at the top (or bottom) $max_width = $spaces + $size * 2 ; // we start with first line $line = 0 ; // the counter for spaces between the chars $count_spaces = $spaces ; // for building lines while ( $count_spaces >= 0 ) { // all spaces that have to be drawn left $left_spaces = ( $spaces - $count_spaces ) / 2 ; // for building letters in a row (only to the half) for ( $letter = 1 ; $letter <= ( $max_width / 2 ); $letter ++) { // if we are left or right of the chars if ( $letter <= $left_spaces || $letter > $left_spaces + $size ) { $result [ $line ][ $letter ] = $space_char ; // } else { $result [ $line ][ $letter ] = $char ; } } // add the mirrored right side to the result $result [ $line ] = array_merge ( $result [ $line ], array_reverse ( $result [ $line ])); // now we start a new line $line ++; // now we delete 2 spaces (one left and one right) $count_spaces = $count_spaces - 2 ; } // we now add the bottom part of the x $bottom = array_reverse ( $result ); // we have to delete the center line array_shift ( $bottom ); return array_merge ( $result , $bottom );} function draw_char ( $array , $nl2br = false ) { foreach ( $array as $line ) { foreach( $line as $letter ) { echo $letter ; } if ( $nl2br ) { echo '<br />' ; } else { echo "\n\r" ; } }} draw_char ( build_x ( '*' , ' ' , 5 , 3 ), false );echo 'Und weil es Spass macht noch mit random Zahlen:' . "\n\r" ; draw_char ( build_x ( '*' , ' ' , rand ( 5 , 20 ), rand ( 1 , 10 ))); ?> + Multi-Zitat Zitieren
#4 23. April 2012 AW: X Zeichnen Ein Skript (dessen Qualität ich an dieser Stelle garnicht mal beurteilen will) ohne die Gedanken dahinter, hilft ihm bestimmt! Frei nach dem Motto: Lehrt den Leuten nicht das Brunnengraben, grabt weiter Brunnen für sie + Multi-Zitat Zitieren
#5 23. April 2012 Zuletzt bearbeitet: 23. April 2012 AW: X Zeichnen Die Erklärungen sind doch im Quelltext. Fast jede Zeile ist kommentiert. Wenn er sich also Zeit nimmt und es sich anschaut kann er verstehen was ich getan habe. Aber ich verstehe schon was du meinst. EDIT: hab doch keine lust es zu verkleinern. sorry. aber die funktionen die man nutzen kann sind array_push, array_pad, array_fill + Multi-Zitat Zitieren