[PHP] X Zeichnen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von opsirunner, 22. April 2012 .

Schlagworte:
  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
     
  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
     
  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 )));
    ?>
     
  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
     
  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
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.