Changeset 7859 in spip-zone


Ignore:
Timestamp:
Dec 10, 2006, 11:49:13 PM (12 years ago)
Author:
patfr@…
Message:

Dessiner des diagrammes de jeux d'échecs, c'est maintenant possible !

Location:
_plugins_/_stable_/jeux
Files:
52 added
6 edited
1 copied
7 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/jeux/inc/echecs.php

    r7779 r7859  
    11<?php
    22
    3 # le code de ce fichier php reste encore à ecrire...
    4 # à visiter :
    5 # http://perso.orange.fr/jeux.lulu/html/pendu/penduSom.htm
    6 # http://www.alablague.com/pendu/default.asp
    7 # liste de mots :
    8 # http://www.lexique.org/listes/liste_mots.php
     3# A lire :  http://www.spip-contrib.net/Afficher-des-diagrammes-d-echecs
     4#                       http://www.iechecs.com/notation.htm
    95
    106#---------------------------------------------------#
    11 #  Plugin  : jeux                                   #
     7#  Plugin  : jeux , diagrammes d'echecs             #
    128#  Auteur  : Patrice Vanneufville, 2006             #
    139#  Contact : patrice¡.!vanneufville¡@!laposte¡.!net #
    1410#  Licence : GPL                                    #
    1511#---------------------------------------------------#
     12
     13
     14/*************************************************/
     15/*   Auteur initial : Olivier Bouverot           */
     16/*          <webmaster@ajec-echecs.org>          */
     17/*                                               */
     18/*  Patch (prise en compte de la notation FEN) : */
     19/*                Patrice Pillot                 */
     20/*              <p.pillot@free.fr>               */
     21/*************************************************/
     22
    1623/*
    1724
    18 Insere un jeu de pendu dans vos articles !
    19 ------------------------------------------
     25Insere un diagramme de positions d’échecs dans vos articles !
     26-------------------------------------------------------------
    2027
    2128balises du plugin : <jeux></jeux>
    22 separateurs obligatoires : [pendu]
    23 separateurs optionnels   : [titre], [texte]
    24 
    25 Règles du jeu :
    26 - Vous devez choisir une lettre à chaque essai.
    27 - Si la lettre existe dans le mot, elle apparaît à la bonne place.
    28 - La tête, un bras, une jambe... A chaque erreur, vous êtes un peu plus pendu. Vous avez droit à 6 erreurs. Bonne chance!
     29separateurs obligatoires : [diag_echecs]
     30separateurs optionnels   : [titre], [texte], [config]
     31
     32Attention :
     33- La librairie GD doit être installée sur le serveur.
    2934
    3035Exemple de syntaxe dans l'article :
     
    3237
    3338<jeux>
    34         [titre]
    35         Le Jazz...
    36         [pendu]
    37         morton oliver armstrong ellington whiteman henderson nichols dorsey beiderbecke
    38         teagarden freeman kaminsky teschemacher davis goodman wilson hampton crosby parker
    39         gillespie powell monk clarke johnson mulligan evans hawkins basie coltrane coleman
     39        [diag_echecs]
     40        B:Rg1,Dd1,Ta1,e1,Pa2,f6/N:Rb8,Pa6,f5
    4041</jeux>
    41 
     42<jeux>
     43        [diag_echecs]
     44        r1bqkbnr/pp2pppp/2n5/2p1P3/3p4/2P2N2/PP1P1PPP/RNBQKB1R
     45        [config]
     46        taille=35
     47</jeux>
     48<jeux>
     49        [diag_echecs]
     50        B:Rb6,pa3,Fh2/N:Rc8/sr:a8/sb:g3,f4,e5,d6,c7,b8
     51        [config]
     52        taille=35
     53        noirs=bleu
     54</jeux>
    4255*/
    43 
    44 
    45 /*
    46 TROMBONE XYLOPHONE TAMBOUR PIANO GUITARE VIOLON FLUTE ACCORDEON TROMPETTE DJEMBE SAXOPHONE VIOLONCELLE CLARINETTE HARMONICA TAMBOURIN CASTAGNETTES HAUTBOIS CONTREBASSE HARPE TAM-TAM TRIANGLE CYMBALE FLUTE A BEC FLUTE TRAVERSIERE BANJO GUITARE ELECTRIQUE CORNEMUSE ORGUE MARACAS GROSSE CAISSE VIBRAPHONE BANDONEON BONGOS GUIMBARDE EPINETTE VIELLE PIPEAU CLAIRON BUGLE CLAVES FLUTE DE PAN BALAFON MIRLITON GRELOT TIMBALE DARBOUKA LUTH CARILLON GONG BASSON CLAVECIN HELICON CITHARE MANDOLINE CORNET A PISTONS ALTO COR CAISSE CLAIRE SYNTHETISEUR TUBA
    47 
    48 compositeurs :
    49 albeniz bach bartok beethoven bellini berg berlioz bizet borodine boulez brahms britten bruch bruckner charpentier chausson chopin corelli couperin debussy delalande dukas dvorak falla faure franck gluck gounod granados grieg haendel haynd honegger janacek lalo lassus liszt lully machaut mahler massenet mendelsshon messiaen milhaud monteverdi moussorgski mozart offenbach gershwin paganini palestrina pergolesi poulenc prokofiev puccini purcell rachmaninov rameau ravel rossini roussel satie scarlatti schmitt schonberg schubert schumann schutz sibelius smetana strauss stravinski tchaikovski telemann varese verdi vivaldi wagner weber webern
    50 
    51 instruments :
    52 flute piccolo syrinx flageolet hautbois cor basson contrebasson clarinette saxophone trompette trombone cornet tuba bugle cornemuse accordeon harmonica harmonium orgue harpe lyre luth mandoline guitare viele violon alto violoncelle contrebasse clavecin epinette piano glockenspiel celesta xylophone marimba vibraphone timbales tambour bongoes catagnettes claves cymbales eoliphone gong maracas tambourin templeblock triangle
    53                  
    54 jazz :
    55 morton oliver armstrong ellington whiteman henderson nichols dorsey beiderbecke teagarden freeman kaminsky teschemacher davis goodman wilson hampton crosby parker gillespie powell monk clarke johnson mulligan evans hawkins basie coltrane coleman
    56                  
    57 danses :
    58 allemande bourree chaconne courante forlane gaillarde gavotte gigue menuet passacaille passepied pavane sarabande barcarolle bolero czarda ecossaise habanera laendler mazurka passamezzo polka polonaise ragtime rigaudon saltarelle tango tarentelle tourdion valse
    59 
    60 chanson francaise :
    61 adamo aubert aznavour balavoine barbara bashung becaud berger birkin bourvil brassens brel brillant bruel cabrel clerc cordy couture croisille daho dalida dassin dion duteil fabian farmer ferrat ferre fiori gainsbourg goldman gotainer hallyday hardy higelin jonasz kaas lama lapointe lara lavilliers mitchell mouskouri moustaki murat nougaro obispo pagny paradis piaf polnareff voulzy renaud sanson sardou sheller souchon torr trenet vartan
    62 
    63 
    64 */
     56require("diag_echecs_init.php");
     57require("diag_echecs_inc.php");
     58
     59// creation du diagramme d'echecs
     60function calcul_diagramme_echecs($position, $indexJeux) {
     61        // qq initialisations
     62        global $diag_echecs_globales;
     63        $flip = jeux_config('flip');
     64        $fond = jeux_config('fond');
     65        $taille = intval(jeux_config('taille'));
     66        $bordure = intval(jeux_config('bordure'));
     67        $board_size = intval(jeux_config('board_size'));
     68        $font = intval(jeux_config('police'));
     69        $img = jeux_config('img_img');
     70       
     71        // dechiffre le code source du diagramme place dans $position
     72        // $position = "B:Rf1/N:Pb2,c3,d4,e5/SV:e4/SR:a2";
     73        // $position = "B:Rg1,Dd1,Ta1,e1,Pa2,f6/N:Rb8,Pa6,f5";
     74        // $position = "r1bqkbnr/pp2pppp/2n5/2p1P3/3p4/2P2N2/PP1P1PPP/RNBQKB1R";
     75        $c = preg_replace("/\s*[\r\n]+\s*/", '/', trim($position));
     76        //$tableau = split("/\t/", trim($position));
     77        //foreach ($tableau as $i=>$valeur) $tableau[$i] = preg_split('//', trim($valeur), -1, PREG_SPLIT_NO_EMPTY);
     78
     79        //$position = ereg_replace("[\n\r]","",$position);
     80       
     81        /* l'heuristique est faible mais bon... */
     82        //if ( substr_count($position, "/") == 7 ) {
     83        $masque=',(([a-zA-Z1-8]+)\/([a-zA-Z1-8]+)\/([a-zA-Z1-8]+)\/([a-zA-Z1-8]+)\/([a-zA-Z1-8]+)\/([a-zA-Z1-8]+)\/([a-zA-Z1-8]+)\/([a-zA-Z1-8]+)) *(.*),';
     84        if ( preg_match($masque, $position, $table) ) {
     85          $position = FEN2classic($position);                   // FEN
     86          $table = explode("/", $position);
     87        } else {
     88          $position = preg_replace(",\s,","",$position);                // CLASSIC
     89          $position = strtolower($position);
     90          $table = explode("/",$position);
     91          if (count($table)<2) return "Erreur dans la syntaxe [explode table classic]";
     92        }
     93//echo '<br>table : '; print_r($table); echo '<br>';
     94        $fichier_dest = sous_repertoire(_DIR_VAR, "cache-jeux") . 'echiq_'.md5($position) . jeux_config('img_suffix');
     95        $image = "<img src=\"$fichier_dest\" alt=\"$position\" border=\"0\"/><br>\n";
     96        //if (file_exists($fichier_dest)) return $image;
     97
     98        $chessboard = image_echiquier();
     99
     100// *********************       
     101        for ($i=0 ; $i<count($table) ; $i++)  if ( $table[$i] == "r" ) $flip = true;
     102       
     103        for ($i=0 ; $i<count($table) ; $i++) {
     104          $sub_table = split("[:,]",$table[$i]);
     105          switch($sub_table[0]) {
     106                case "b" : $side = "w";break;
     107                case "n" : $side = "b";break;
     108                case "sr" : $side = "-"; $hilite = "hrouge"; break;
     109                case "sv" : $side = "-"; $hilite = "hvert"; break;
     110                case "sb" : $side = "-"; $hilite = "hbleu"; break;
     111                case "sj" : $side = "-"; $hilite = "hjaune"; break;
     112                case "r" : $side = "-"; $flip = true; break; /* Ne sert qu'a eviter des erreurs ;) */
     113                default : return "Erreur dans la syntaxe [couleur]";
     114          }
     115          /* Ici j'ai change car sinon il est impossible de commencer la */
     116          /* description de la position par un pion sans 'p' */
     117          /* et cela pose probleme pour la partie hilite qui elle ne */
     118          /* comporte pas de piece */
     119          if (strlen($sub_table[1])==2) $name = "p";
     120          elseif (strlen($sub_table[1])==3) $name = substr($sub_table[1],0,1);
     121          else {
     122                if ( (strlen($sub_table[1])==0) && $sub_table[0]!="r" ) {
     123                  echo "<p>$sub_table[1]</p>";
     124                  return "Erreur dans la syntaxe [piece]";
     125                }
     126          }
     127       
     128          for ($j=1 ; $j<count($sub_table) ; $j++) {
     129                switch(strlen($sub_table[$j])) {
     130                  case 2 :
     131                        $square = substr($sub_table[$j],0,2);
     132                        break;
     133                  case 3 :
     134                        $name = substr($sub_table[$j],0,1);
     135                        $square = substr($sub_table[$j],1,2);
     136                        break;
     137                  default :
     138                        die("Erreur dans la syntaxe (pos) !");
     139                }
     140                if ($side!="-") diag_echecs_put_piece($chessboard,$side,$name,$square,$flip);
     141                 else diag_echecs_hilite_square($chessboard,$square,$hilite,$flip);
     142          }
     143        }
     144
     145        /* Faut-il envoyer un en-tête (cas d'une image "nue"), ou l'image
     146est-elle destinée à être incluse dans une page Web ? Laisser la
     147variable à "true" dans le premier cas, la mettre à "false" dans le
     148second */
     149        /*      if ($hdr) header(jeux_config('img_header'); */
     150       
     151        if (jeux_config('coords')) {
     152          $big_chessboard = imagecreate($board_size+2*$bordure+$taille,$board_size+2*$bordure+$taille);
     153          $bg_color = imagecolorallocate($big_chessboard,$fond[0],$fond[1],$fond[2]);
     154          imagecolortransparent($big_chessboard,$bg_color);
     155          imagecopy($big_chessboard,$chessboard,$taille,0,0,0,$board_size+2*$bordure,$board_size+2*$bordure);
     156          $width = imagefontwidth($font);
     157          $height = imagefontheight($font);
     158          $center = intval($taille/2);
     159          for ($i=1 ; $i<=8 ; $i++) {
     160                $empty_coord = imagecreate($taille,$taille);
     161                $bg_color = imagecolorallocate($empty_coord,$fond[0],$fond[1],$fond[2]);
     162                imagecolortransparent($empty_coord,$bg_color);
     163                $font_color = imagecolorallocate($empty_coord,0,0,0);
     164                if (!$flip) {
     165                  imagechar($empty_coord,$font,($taille-$width)/2,($taille-$height)/2+$bordure,9-$i,$font_color);
     166                } else {
     167                  imagechar($empty_coord,$font,($taille-$width)/2,($taille-$height)/2+$bordure,$i,$font_color);
     168                }
     169                imagecopy($big_chessboard,$empty_coord,0,($i-1)*$taille,0,0,$taille,$taille);
     170          }
     171          for ($i=1 ; $i<=8 ; $i++) {
     172                $empty_coord = imagecreate($taille,$taille);
     173                $bg_color = imagecolorallocate($empty_coord,$fond[0],$fond[1],$fond[2]);
     174                imagecolortransparent($empty_coord,$bg_color);
     175                $font_color = imagecolorallocate($empty_coord,0,0,0);
     176                if (!$flip) {
     177                  imagechar($empty_coord,$font,($taille-$width)/2+$bordure,($taille-$height)/2,$diag_echecs_globales['number2letter'][$i],$font_color);
     178                } else {
     179                  imagechar($empty_coord,$font,($taille-$width)/2+$bordure,($taille-$height)/2,$diag_echecs_globales['number2letter'][9-$i],$font_color);
     180                }
     181                imagecopy($big_chessboard,$empty_coord,$i*$taille,8*$taille+2*$bordure,0,0,$taille,$taille);
     182          }
     183         $chessboard = $big_chessboard;
     184        }
     185       
     186        $img($chessboard, $fichier_dest);
     187        return $image;
     188}
     189
     190// decode un diagramme d'echecs
     191function jeux_diag_echecs($texte, $indexJeux) {
     192        // qq initialisations
     193        $html = false;
     194       
     195        // decodage du texte
     196        $tableau = jeux_split_texte('diag_echecs', $texte);
     197        diag_echecs_config_default();
     198        diag_echecs_config_supplementaire();
     199        foreach($tableau as $i => $valeur) if ($i & 1) {
     200         if ($valeur==_JEUX_TITRE) $html .= "<p class=\"jeux_titre diag_echecs_titre\">{$tableau[$i+1]}</p>";
     201          elseif ($valeur==_JEUX_diag_echecs) $html .= calcul_diagramme_echecs($tableau[$i+1], $indexJeux);
     202          elseif ($valeur==_JEUX_TEXTE) $html .= $tableau[$i+1];
     203        }
     204       
     205        return $html;
     206}
     207?>
  • _plugins_/_stable_/jeux/inc/mots_croises.php

    r7762 r7859  
    103103// dechiffre le code source de la grille
    104104function calcul_tableau_grille($texte){
    105         $tableau = explode("\r", trim($texte));
     105        $tableau = preg_split("/\r?\n/", trim($texte));
    106106        foreach ($tableau as $i=>$valeur) $tableau[$i] = preg_split('//', trim($valeur), -1, PREG_SPLIT_NO_EMPTY);
    107107        return $tableau;
  • _plugins_/_stable_/jeux/inc/qcm.php

    r7794 r7859  
    245245  if (!isset($_POST["var_correction_".$indexJeux])) {
    246246        $tete .= "\n".'<form method="post" action="">';
    247         $pied = '<br>
     247        $pied = '<br />
    248248        <input type="hidden" name="var_correction_'.$indexJeux.'" value="yes">
    249249        <div align="center"><input type="submit" value="'._T('jeux:corriger').'" class="jeux_bouton"></div>
  • _plugins_/_stable_/jeux/inc/sudoku.php

    r7780 r7859  
    9595// dechiffre le code source de la grille
    9696function calcul_tableau_sudoku($texte){
    97         $tableau = explode("\r", trim($texte));
     97        $tableau = preg_split("/\r?\n/", trim($texte));
    9898        foreach ($tableau as $i=>$valeur) $tableau[$i] = preg_split('//', trim($valeur), -1, PREG_SPLIT_NO_EMPTY);
    9999        return $tableau;
     
    137137// decode une grille de sudoku
    138138function jeux_sudoku($texte, $indexJeux) {
    139         $sudoku = $solution = $html = false;
    140         $titre = _T('sudoku:titre');
     139        $sudoku = $solution = $titre = $html = false;
    141140
    142141        $tableau = jeux_split_texte('sudoku', $texte);
     
    148147        }
    149148       
    150         return calcul_erreurs_sudoku($solution, $indexJeux)
     149        return  ($titre?"<p class=\"jeux_titre sudoku_titre\">$titre</p>":'')
     150                        . calcul_erreurs_sudoku($solution, $indexJeux)
    151151                        . affichage_sudoku($sudoku, $indexJeux)
    152152        // solution
  • _plugins_/_stable_/jeux/inc/trous.php

    r7786 r7859  
    124124  if (!isset($_POST["var_correction_".$indexJeux])) {
    125125        $tete .= "\n".'<form method="post" action="">';
    126         $pied .= '<br><input type="hidden" name="var_correction_'.$indexJeux.'" value="yes">
     126        $pied .= '<br /><input type="hidden" name="var_correction_'.$indexJeux.'" value="yes">
    127127        <div align="center"><input type="submit" value="'._T('jeux:corriger').'" class="jeux_bouton"></div>
    128128        </form>';
  • _plugins_/_stable_/jeux/jeux_config.php

    r7794 r7859  
    3838define('_JEUX_RECUEIL', 'recueil');
    3939define('_JEUX_PENDU', 'pendu');
     40define('_JEUX_diag_echecs', 'diag_echecs');
    4041
    4142// liste des separateurs autorises dans les jeux.
     
    5152        'devinettes' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_DEVINETTE, _JEUX_CHARADE, _JEUX_REPONSE, _JEUX_CONFIG),
    5253        'trous' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_TROU, _JEUX_CONFIG),
    53 //      'pendu' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_PENDU),
     54        'pendu' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_PENDU),
     55        'diag_echecs' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_diag_echecs, _JEUX_CONFIG),
    5456);
    5557
     
    7072        'devinettes' => array(_JEUX_DEVINETTE, _JEUX_CHARADE),
    7173        'trous' => array(_JEUX_TROU),
    72 //      'pendu' => array(_JEUX_PENDU),
     74        'pendu' => array(_JEUX_PENDU),
     75        'diag_echecs' => array(_JEUX_diag_echecs),
    7376);
    7477
  • _plugins_/_stable_/jeux/jeux_utils.php

    r7794 r7859  
    1111function jeux_config($param) {
    1212  global $jeux_config;
    13   return in_array($jeux_config[$param], array('oui', 'yes', '1', 'si', 'ja', strtolower(_T('item_oui'))));
     13  $p = trim($jeux_config[$param]);
     14  if (in_array($p, array('true', 'vrai', 'oui', 'yes', '1', 'si', 'ja', strtolower(_T('item_oui'))))) return true;
     15  if (in_array($p, array('false', 'faux', 'non', 'no', '0', 'nein', strtolower(_T('item_non'))))) return false;
     16  return $p;
    1417}
    1518function jeux_config_set($param, $valeur) {
     
    1720  if ($param!='') $jeux_config[$param] = $valeur;
    1821}
    19 function jeux_config_init($texte) {
     22function jeux_config_init($texte, $ecrase) {
     23 global $jeux_config;
    2024 $lignes = preg_split("/\r?\n/", $texte);
    21  foreach ($lignes as $ligne)
    22   if (preg_match('/([^=]+)=(.+)/', $ligne, $regs)) jeux_config_set(trim($regs[1]), trim($regs[2]));
     25 foreach ($lignes as $ligne) {
     26  $ligne = preg_replace(',\/\*(.*)\*\/,','', $ligne);
     27  $ligne = preg_replace(',\/\/(.*)$,','', $ligne);
     28  if (preg_match('/([^=]+)=(.+)/', $ligne, $regs)) {
     29    list($p, $v) = array(trim($regs[1]), trim($regs[2]));
     30        if ($ecrase || ($jeux_config[$p]=='')) $jeux_config[$p] = $v;
     31  }
     32 }
    2333}
    2434function jeux_config_reset() {
     
    3848  foreach($tableau as $i => $valeur) if (($i & 1) && preg_match('/^\[(.*)\]$/', trim($valeur), $reg)) {
    3949   $tableau[$i] = strtolower(trim($reg[1]));
    40    if ($reg[1]==_JEUX_CONFIG && $i+1<count($tableau)) jeux_config_init($tableau[$i+1]);
     50   if ($reg[1]==_JEUX_CONFIG && $i+1<count($tableau)) jeux_config_init($tableau[$i+1], true);
    4151  }
    4252  return $tableau;
     
    4555// transforme un texte en listes html
    4656function jeux_listes($texte) {
    47         $tableau = explode("\r", trim($texte));
     57        $tableau = preg_split("/\r?\n/", trim($texte));
    4858        foreach ($tableau as $i=>$valeur) if (($valeur=trim($valeur))!='') $tableau[$i] = "<li>$valeur</li>\n";
    4959        $texte = implode('', $tableau);
     
    6171        $texte = str_replace(" ","\t", $texte);
    6272        $texte = str_replace("+"," ", $texte);
    63         return (array_unique(split("\t", $texte)));
     73        return array_unique(split("\t", trim($texte)));
    6474}
    6575function jeux_liste_mots_maj($texte) {
Note: See TracChangeset for help on using the changeset viewer.