Changeset 54506 in spip-zone


Ignore:
Timestamp:
Nov 15, 2011, 9:18:10 PM (8 years ago)
Author:
fredjust@…
Message:

gestion des lignes de couleur
ajout de la fonction diag_echecs_hilite_line

Location:
_plugins_/jeux/jeux
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/jeux/jeux/diag_echecs.php

    r54469 r54506  
    130130
    131131        // *************** CASE A COLORIER *************************
     132        // *************** LIGNE A TRACER  *************************
     133        // l'ordre des couleurs peut poser des problèmes dans les superpositions
     134        // pour une gestion plus fine il faudrait gérer l'odre avec un paramètre du genre
     135        // encouleur=R,a1,a2,c2-c8,B,e4-e5,g8
     136        // qui permetrais de choisir l'ordre de création
     137       
     138        if (strlen($casejaune)>0 )      {
     139                $lescases=explode(",",$casejaune);
     140                        for ($j=0 ; $j<count($lescases) ; $j++) {
     141                                $square=$lescases[$j];
     142                                $hilite = "hjaune";
     143                                if (strlen($square)==2) { diag_echecs_hilite_square($chessboard,$square,$hilite,$flip); };      //case de couleur
     144                                if (strlen($square)==5) { diag_echecs_hilite_line($chessboard, $square, $hilite,$flip); };      // ligne de couleur
     145                        }
     146                }
    132147        if (strlen($casebleu)>0 )       {
    133148                $lescases=explode(",",$casebleu);
     
    135150                                $square=$lescases[$j];
    136151                                $hilite = "hbleu";
    137                                 diag_echecs_hilite_square($chessboard,$square,$hilite,$flip);
     152                                if (strlen($square)==2) { diag_echecs_hilite_square($chessboard,$square,$hilite,$flip); };                     
     153                                if (strlen($square)==5) { diag_echecs_hilite_line($chessboard, $square, $hilite,$flip); };                     
    138154                        }
    139155                }
     
    143159                                $square=$lescases[$j];
    144160                                $hilite = "hrouge";
    145                                 diag_echecs_hilite_square($chessboard,$square,$hilite,$flip);
     161                                if (strlen($square)==2) { diag_echecs_hilite_square($chessboard,$square,$hilite,$flip); };
     162                                if (strlen($square)==5) { diag_echecs_hilite_line($chessboard, $square, $hilite,$flip); };
    146163                        }
    147164                }
     
    151168                                $square=$lescases[$j];
    152169                                $hilite = "hvert";
    153                                 diag_echecs_hilite_square($chessboard,$square,$hilite,$flip);
    154                         }
    155                 }
    156         if (strlen($casejaune)>0 )      {
    157                 $lescases=explode(",",$casejaune);
    158                         for ($j=0 ; $j<count($lescases) ; $j++) {
    159                                 $square=$lescases[$j];
    160                                 $hilite = "hjaune";
    161                                 diag_echecs_hilite_square($chessboard,$square,$hilite,$flip);
    162                         }
    163                 }
     170                                if (strlen($square)==2) { diag_echecs_hilite_square($chessboard,$square,$hilite,$flip); };
     171                                if (strlen($square)==5) { diag_echecs_hilite_line($chessboard, $square, $hilite,$flip); };
     172                        }
     173                }
     174       
    164175        for ($i=0 ; $i<count($table) ; $i++) {
    165176          $sub_table = preg_split("/[:,]/",$table[$i]);
  • _plugins_/jeux/jeux/diag_echecs_inc.php

    r54298 r54506  
    137137
    138138}
    139 
     139// trace une ligne colorée sur l'échiquier
     140function diag_echecs_hilite_line($image, $squares, $hilite ,$flip)
     141{   
     142        global $diag_echecs_globales;
     143        $taille = intval(jeux_config('taille'));
     144        $bordure = intval(jeux_config('bordure'));
     145       
     146        //épaisseur de la ligne
     147        $thick=round($taille/7);
     148        if ($taille==35) {$thick= 5;};
     149        if ($taille==55) {$thick= 7;};   
     150       
     151        //$squares est de la forme a1-g8
     152        $xfrom = substr($squares,0,1);
     153        $yfrom = substr($squares,1,1); 
     154        $xto = substr($squares,3,1);
     155        $yto = substr($squares,4,1);
     156       
     157        $color = $diag_echecs_globales[$hilite];
     158        $hilite_color = imagecolorallocatealpha($image,$color[0],$color[1],$color[2],50);
     159       
     160        if (!$flip) {
     161                $x1=round(($diag_echecs_globales['letter2number'][$xfrom]-1)*$taille+$bordure+$taille/2)-1;
     162                $y1=round((8-$yfrom)*$taille+$bordure+$taille/2)-1;
     163                $x2=round(($diag_echecs_globales['letter2number'][$xto]-1)*$taille+$bordure+$taille/2)-1;
     164                $y2=round((8-$yto)*$taille+$bordure+$taille/2)-1;
     165  } else {
     166                $x1=round((8-$diag_echecs_globales['letter2number'][$xfrom])*$taille+$bordure+$taille/2)-1;
     167                $y1=round(($yfrom-1)*$taille+$bordure+$taille/2)-1;
     168                $x2=round((8-$diag_echecs_globales['letter2number'][$xto])*$taille+$bordure+$taille/2)-1;
     169                $y2=round(($yto-1)*$taille+$bordure+$taille/2)-1;               
     170  }
     171 
     172        // cercle aux extrémités en attendant une vraie flèche
     173        imagefilledellipse($image, $x1,$y1,$thick*2,$thick*2,$hilite_color);   
     174        imagefilledellipse($image, $x2,$y2,$thick*2,$thick*2,$hilite_color);   
     175 
     176    if ($thick == 1) {
     177        return imageline($image, $x1, $y1, $x2, $y2, $hilite_color);
     178    }
     179    $t = round($thick / 2)-1 ;
     180    if ($x1 == $x2 || $y1 == $y2) {
     181        return imagefilledrectangle($image, round(min($x1, $x2) - $t), round(min($y1, $y2) - $t), round(max($x1, $x2) + $t), round(max($y1, $y2) + $t), $hilite_color);
     182    }
     183        // alors là, bonjour les équations de droites !
     184        $k = ($y2 - $y1) / ($x2 - $x1); //y = kx + q
     185    $a = $t / sqrt(1 + pow($k, 2));
     186        // dès que je comprends j'ajoute 3 points pour faire une flèche ;-)
     187    $points = array(
     188        round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a),
     189        round($x1 - (1-$k)*$a), round($y1 - (1+$k)*$a),
     190        round($x2 + (1+$k)*$a), round($y2 - (1-$k)*$a),         
     191        round($x2 + (1-$k)*$a), round($y2 + (1+$k)*$a)                 
     192    ); 
     193    return imagefilledpolygon($image, $points, 4, $hilite_color);   
     194}
    140195?>
Note: See TracChangeset for help on using the changeset viewer.