You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

221 lines
9.8 KiB

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
#---------------------------------------------------#
# Plugin : Jeux #
# Auteur : Patrice Vanneufville, 2006 #
# Gestion des scores : Maieul Rouquette, 2007 #
# Contact : patrice¡.!vanneufville¡@!laposte¡.!net #
# Licence : GPL #
#--------------------------------------------------------------------------#
# Documentation : https://contrib.spip.net/Des-jeux-dans-vos-articles #
#--------------------------------------------------------------------------#
# exemples de jeux avec les mots :
# http://www.cc-concarneaucornouaille.fr/net_bibli/portail/jouer%20avec%20les%20mots.htm
# http://d.ch.free.fr/index.html
# jeux musicaux :
# http://www.metronimo.com/fr/jeux/
// balises du plugin a inserer dans les articles
define('_JEUX_DEBUT', '<jeux>');
define('_JEUX_FIN', '</jeux>');
define('_JEUX_POST', '@@JEUX_POST@@');
define('_JEUX_HEAD1', "<!-- CSS/JS JEUX -->");
define('_JEUX_HEAD2', "<!-- CSS/JS JEUX (AUTO) -->");
// separateurs utilisables a l'interieur des balises ci-dessus
// format a utiliser dans la redaction : [separateur]
define('_JEUX_TITRE', 'titre'); // separateur indiquant le titre du jeu
define('_JEUX_TEXTE', 'texte'); // separateur indiquant un contenu a garder telquel
define('_JEUX_COPYRIGHT', 'copyright'); // separateur indiquant un contenu a encapsuler dans un <div class="jeux_copyright"/>
define('_JEUX_CONFIG', 'config'); // separateur permettant de passer des parametres au jeu
#define('_JEUX_CONFIG', 'input'); // separateur permettant d'inserer un <input/> non evalue
define('_JEUX_REPONSE', 'reponse');
define('_JEUX_SOLUTION', 'solution');
define('_JEUX_SCORE', 'score');
define('_JEUX_HORIZONTAL', 'horizontal');
define('_JEUX_VERTICAL', 'vertical');
define('_JEUX_SUDOKU', 'sudoku');
define('_JEUX_KAKURO', 'kakuro');
define('_JEUX_QCM', 'qcm');
define('_JEUX_QRM', 'qrm');
define('_JEUX_QUIZ', 'quiz');
define('_JEUX_RELIER', 'relier');
define('_JEUX_GAUCHE', 'gauche');
define('_JEUX_DROITE', 'droite');
define('_JEUX_CHARADE', 'charade');
define('_JEUX_DEVINETTE', 'devinette');
define('_JEUX_TROU', 'trou');
define('_JEUX_POESIE', 'poesie');
define('_JEUX_CITATION', 'citation');
define('_JEUX_BLAGUE', 'blague');
define('_JEUX_AUTEUR', 'auteur');
define('_JEUX_RECUEIL', 'recueil');
define('_JEUX_PENDU', 'pendu');
define('_JEUX_DIAG_ECHECS', 'diag_echecs');
define('_JEUX_COLORATION', 'coloration');
define('_JEUX_CHESSSTUFF', 'chesstuff');
define('_JEUX_SAISIE', 'saisie');
define('_JEUX_LABEL', 'label');
define('_JEUX_MULTI_JEUX', 'jeu');
// globale stockant les carateristiques d'un jeu :
// - les separateurs autorises
// - les signatures permettant de reconnaitre un jeu
// - le nom du jeu
// multi_jeux doit toujours etre en premier...
global $jeux_caracteristiques;
$jeux_caracteristiques = array(
// liste des separateurs autorises dans les jeux.
// tous les jeux doivent etre listes ci-apres.
// monjeu est le jeu traite dans le fichier jeux/monjeu.php
'SEPARATEURS' => array(
'multi_jeux' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_COPYRIGHT, _JEUX_MULTI_JEUX, _JEUX_CONFIG, _JEUX_SCORE),
'sudoku' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_COPYRIGHT, _JEUX_SUDOKU, _JEUX_SOLUTION, _JEUX_CONFIG),
//'kakuro' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_KAKURO, _JEUX_SOLUTION, _JEUX_CONFIG),
'mots_croises' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_COPYRIGHT, _JEUX_HORIZONTAL, _JEUX_VERTICAL, _JEUX_SOLUTION, _JEUX_CONFIG),
'qcm' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_COPYRIGHT, _JEUX_QCM, _JEUX_QRM, _JEUX_QUIZ, _JEUX_CONFIG, _JEUX_SCORE),
'textes' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_COPYRIGHT, _JEUX_POESIE, _JEUX_CITATION, _JEUX_BLAGUE, _JEUX_AUTEUR, _JEUX_RECUEIL, _JEUX_CONFIG),
'devinettes' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_COPYRIGHT, _JEUX_DEVINETTE, _JEUX_CHARADE, _JEUX_REPONSE, _JEUX_CONFIG),
'trous' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_COPYRIGHT, _JEUX_TROU, _JEUX_CONFIG, _JEUX_SCORE),
'pendu' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_COPYRIGHT, _JEUX_PENDU, _JEUX_CONFIG),
'diag_echecs' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_COPYRIGHT, _JEUX_DIAG_ECHECS, _JEUX_COLORATION, _JEUX_CONFIG),
'chesstuff' => array(_JEUX_CHESSSTUFF, _JEUX_CONFIG),
'saisies' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_COPYRIGHT, _JEUX_LABEL, _JEUX_SAISIE, _JEUX_CONFIG),
'relier' => array(_JEUX_TITRE, _JEUX_TEXTE, _JEUX_COPYRIGHT, _JEUX_GAUCHE, _JEUX_DROITE, _JEUX_SOLUTION, _JEUX_CONFIG),
),
// liste des signatures caracteristiques d'un jeu.
// tous les jeux doivent etre listes ci-apres.
// monjeu est le jeu traite dans le fichier jeux/monjeu.php
// exemple :
// array(_JEUX_SEPAR_3, _JEUX_SEPAR_4) doit s'interpreter :
// " le jeu est charge si on trouve _JEUX_SEPAR_3 ou _JEUX_SEPAR_4
// a l'interieur de <jeux> et </jeux> "
'SIGNATURES' => array(
'multi_jeux' => array(_JEUX_MULTI_JEUX),
'sudoku' => array(_JEUX_SUDOKU),
//'kakuro' => array(_JEUX_KAKURO),
'mots_croises' => array(_JEUX_HORIZONTAL, _JEUX_VERTICAL),
'qcm' => array(_JEUX_QCM, _JEUX_QRM, _JEUX_QUIZ),
'textes' => array(_JEUX_POESIE, _JEUX_CITATION, _JEUX_BLAGUE),
'devinettes' => array(_JEUX_DEVINETTE, _JEUX_CHARADE),
'trous' => array(_JEUX_TROU),
'pendu' => array(_JEUX_PENDU),
'diag_echecs' => array(_JEUX_DIAG_ECHECS),
'chesstuff' => array(_JEUX_CHESSSTUFF),
'saisies' => array(_JEUX_SAISIE),
'relier' => array(_JEUX_GAUCHE),
),
// nom court a donner aux jeux
'TYPES' => array(
'multi_jeux' => _T('jeux:multi_jeux'),
'sudoku' => _T('sudoku:titre_court'),
//'kakuro' => _T('kakuro:titre_court'),
'mots_croises' => _T('motscroises:titre_court'),
'qcm' => _T('qcm:titre_court'),
'textes' => _L('Textes'),
'devinettes' => _L('Devinettes'),
'trous' => _L('Trous'),
'pendu' => _T('pendu:titre_court'),
'diag_echecs' => _L('Echecs'),
'chesstuff' => _L('Echecs'),
'saisies' => _L('Saisies'),
'relier' => _L('Points à relier'),
),
); // $jeux_caracteristiques
// on envoie les caracteristiques aux plugins pour pouvoir ajouter des jeux tiers
$jeux_caracteristiques = pipeline('jeux_caracteristiques', $jeux_caracteristiques);
// addition de tous les separateurs
$temp = array();
foreach($jeux_caracteristiques['SEPARATEURS'] as $sep) $temp=array_merge($temp, $sep);
$jeux_caracteristiques['SEPARATEURS']['la_totale'] = array_unique($temp);
unset($temp);
// liste manuelle des css ou js a placer dans le header prive
// ca peut toujours servir pour les controles...
// dossiers : jeux/style/ et jeux/javascript/
global $jeux_header_prive, $jeux_javascript_prive;
$jeux_header_prive = array('jeux','qcm', 'mots_croises', 'sudoku', 'pendu', 'trous', 'relier');
// mots_croises.js suffit car sudoku.js est a priori l'exacte copie
$jeux_javascript_prive = array('jeux', 'qcm', 'pendu', 'mots_croises', 'relier');
// Codes RGB des couleurs predefinies a utiliser pour certains parametres apres la balise [config]
global $jeux_couleurs;
$jeux_couleurs = array(
// en
'white' => array(255,255,255),
'black' => array(0,0,0),
'grey2' => array(170,170,170),
'grey' => array(209,209,209),
'green' => array(191,220,192),
'blue' => array(152,192,218),
'brown' => array(224,183,153),
'lightyellow' => array(247,235,211),
'lightbrown' => array(255,243,217),
'red' => array(230,0,0),
// fr
'blanc' => array(255,255,255),
'noir' => array(0,0,0),
'gris2' => array(170,170,170),
'gris' => array(209,209,209),
'vert' => array(191,220,192),
'bleu' => array(152,192,218),
'brun' => array(224,183,153),
'jauneclair' => array(247,235,211),
'brunclair' => array(255,243,217),
'rouge' => array(230,0,0),
);
function jeux_rgbArray($couleur) {
global $jeux_couleurs;
if(isset($jeux_couleurs[$couleur]))
return $jeux_couleurs[$couleur];
include_spip('inc/filtres_images_mini');
$c = str_replace('html:', '', $couleur); // forcer une couleur html
$c = _couleur_hex_to_dec($c);
return $jeux_couleurs[$couleur] = array($c['red'], $c['green'], $c['blue']);
}
function jeux_rgb($couleur, $rgb=true) {
list($a, $b, $c) = jeux_rgbArray($couleur);
if($rgb) return "rgb($a, $b, $c)";
include_spip('inc/filtres_images_mini');
return _couleur_dec_to_hex($a, $b, $c);
}
global $scoreMULTIJEUX; $scoreMULTIJEUX = array();
// renvoie un tableau de lettres
function jeux_alphabet($alphabet = 'latin1', $br = false) {
// surcharge ou extension eventuelle par constante. Ex: define('jeux_alphabet_voyelles', 'A,E,I,O,U');
if(defined($a='jeux_alphabet_'.$alphabet)) $res = constant($a);
// quelques alphabets connus (a completer ?)
// le retour a la ligne est une double virgule
else switch($alphabet) {
case 'latin1' : $res = 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,-'; break;
case 'latinbr' : $res = 'A,B,C,D,,E,F,G,H,I,,J,K,L,M,N,,O,P,Q,R,S,,T,U,V,W,X,,Y,Z,-'; break;
case 'azerty1' : $res = 'A,Z,E,R,T,Y,U,I,O,P,,Q,S,D,F,G,H,J,K,L,M,,W,X,C,V,B,N'; break;
case 'azerty2' : $res = 'A,Z,E,R,T,Y,U,I,O,P,,Q,S,D,F,G,H,J,K,L,M,,W,X,C,V,B,N,-'; break;
case 'qwerty1' : $res = 'Q,W,E,R,T,Y,U,I,O,P,,A,S,D,F,G,H,J,K,L,,Z,X,C,V,B,N,M'; break;
case 'qwerty2' : $res = 'Q,W,E,R,T,Y,U,I,O,P,,A,S,D,F,G,H,J,K,L,,Z,X,C,V,B,N,M,-'; break;
case 'qwerty3' : $res = 'Q,W,E,R,T,Y,U,I,O,P,,A,S,D,F,G,H,J,K,L,Ñ,,Z,X,C,V,B,N,M,-'; break;
case 'español1' : $res = 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,Ñ,O,P,Q,R,S,T,U,V,W,X,Y,Z,-'; break;
case 'español2' : $res = 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,Ñ,O,P,Q,R,S,T,U,V,W,X,Y,Z,Á,É,Í,Ó,Ú,-'; break;
case 'cyrillic1': $res = 'А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ь,Ы,Э,Ю,Я'; break;
// permet de retourner eventuellement un alphabet perso. Ex: jeux_alphabet('A,E,I,O,U')
default: $res = $alphabet;
}
// mb_regex_encoding('UTF-8'); return mb_split(',', $res);
if(!$br) return preg_split('/,+/u', $res);
$res = preg_split('/,,/u', $res);
foreach($res as $i=>$v) $res[$i] = preg_split('/,/u', $v);
return $res;
}
?>