Jeux de vocabulaire grec en PHP
Il y a quelques années (plus de 10 ans), j’avais programmée pour le Top Chrétien (plus de 24000 visites par jour), un jeu biblique en PHP.
J’avais aussi à la même époque programmé le même jeu en Visual Basic (avec une basse de données au format Microsoft Access). Ce logiciel est encore disponible en cliquant ici
J’ai donc repris les codes PHP de ce jeu ainsi que la base de données pour adapter le code et réaliser grec.php qui permet de tester les connaissances en grec et en anglais.
Les listes de vocabulaire ainsi que les listes de versets sont mémorisés dans des fichiers TXT. En revanche, la mémorisation du « top 10 » utilise MySQL avec une table adaptée pour IBQ qui, contrairement à la version du Top Chrétien, enregistre un « Top 10 » par version biblique ou langue de vocabulaire.
Les deux pages de jeux sont donc disponible ici :
grec.php
bible.php
Un des plus gros défis a été l’encodage des informations. Pour le grec j’utilise UTF-8 avec ses codes étendus. En cliquant ici, voyez un site qui m’a été très utile pour l’ecodage. Le fichier txt correspondant au vocabulaire grec est annexé à cet article.
En revanche, les listes de versets qui ont été récupéré sur le site du Top Chrétien ne sont pas codés UTF-8. J’ai donc du adapter le code PHP pour corriger les caractères accentués afin qu’ils s’affichent correctement sur le Web.
extraits de code source de grec.php
<?php
$voc = $_POST['voc'];
$action = $_POST['action'];
$radiobutton = $_POST['radiobutton'];
$juste = $_POST['juste'];
$dernier_mot = $_POST['dernier_mot'];
$score = $_POST['score'];
$jnom = $_POST['jnom'];
$jemail = $_POST['jemail'];
mysql_connect("p50mysql129.secureserver.net","ibq_jeux","*****");
$base = "ibq_jeux";
$vocabulaire_libel[1] = "Vocabulaire grec";
$vocabulaire_fichier[1] = "Base_grec.txt";
$vocabulaire_libel[2] = "Vocabulaire anglais";
$vocabulaire_fichier[2] = "Base_anglais.txt";
if ($voc == 0) $voc = 1;
/* choix du vocabulaire */
$fichier=$vocabulaire_fichier[$voc];
$file2 = fopen($fichier,"r");
if (!$file2) {
echo "Impossible d'ouvir le fichier ".$fichier." !\n";
exit;
}
mt_srand((double)microtime()*100000);
$xmod = rand(1,2);
$sol = rand(1,3);
$val2 = date("U");
$val3 = $val2-(intval($val2/299)*299)+2;
$x[1] = $val3;
$val3 = $val2-(intval($val2/7)*7)+2;
$x[2] = $val3;
$val3 = $val2-(intval($val2/11)*11)+2;
$x[3] = $val3;
/* choisir au hasard trois mots assez proche dans la liste */
for ($v=1;$v<=3; $v++) {
for ($ww=1;$ww<$x[$v];$ww++) {
$vers = fgets($file2,1024);
if (feof($file2)) rewind($file2);
}
if ($voc==1) {
/* GREC */
$y0 = 0;
$y1 = strpos($vers,chr(9));
$langue = substr($vers,$y0,$y1+1);
$y2 = strpos($vers,chr(9), $y1);
$fniv[$v] = substr($vers,$y1,$y2-1);
$y3 = strpos($vers,chr(9), $y2+1);
$y4 = strpos($vers,chr(9), $y3+1)-6;
$fref[$v] = substr($vers,$y3,$y4);
$fdef[$v] = substr($vers,$y4+6,999);
} else {
/* ANGLAIS */
$y0 = 0;
$y1 = strpos($vers,chr(9));
$langue = substr($vers,$y0,$y1+1);
$y2 = strpos($vers,chr(9), $y1);
$fniv[$v] = substr($vers,$y1,$y2-1);
$y3 = strpos($vers,chr(9), $y2+1);
$y4 = strpos($vers,chr(9), $y3+1)-9;
$fref[$v] = substr($vers,$y3,$y4);
$fdef[$v] = substr($vers,$y4+9,999);
}
$line = $fdef[$v];
$line = str_replace(chr(224), "à", $line);
$line = str_replace(chr(225), "á", $line);
$line = str_replace(chr(226), "â", $line);
$line = str_replace(chr(231), "ç", $line);
$line = str_replace(chr(232), "è", $line);
$line = str_replace(chr(233), "é", $line);
$line = str_replace(chr(234), "ê", $line);
$line = str_replace(chr(238), "î", $line);
$line = str_replace(chr(239), "ï", $line);
$line = str_replace(chr(249), "ù", $line);
$line = str_replace(chr(244), "ô", $line);
$line = str_replace(chr(235), "ë", $line);
$txt[$v] = $line;
$line = $fref[$v];
$ref[$v] = $line;
}
fclose($file2);
if ($xmod == 1) {
$question = "Quel est le bon mot pour : ";
$mess[0] = $txt[$sol];
for ($v=1;$v<=3; $v++) {
$mess[$v] = $ref[$v];
}
}
else {
$question = "Quelle est la bonne définition pour : ";
$mess[0] = $ref[$sol];
for ($v=1;$v<=3; $v++) {
$mess[$v] = $txt[$v];
}
}
if (strlen($radiobutton) <1){
if ($score == 0) {
/* premier passage */
}
else {
$score = $score - 10;
}
} else {
if ($radiobutton == $juste) {
$score = $score + 2;
} else {
$score = $score - 20;
}
}
$score2 = ecrire_meilleurs($base,$jnom,$score,$langue);
?>
<?PHP
$image= "pret.swf";
if (strlen($radiobutton) <1){
if ($action == "Ok") {
$image= "ok.swf";
} else {
$image= "pret.swf";
}
}
else {
if ($radiobutton == $juste) {
$image= "oui.swf";
} else {
$image= "non.swf";
}
}
?>
<?PHP
/* reponse juste ou fausse */
if (strlen($radiobutton) <1){
if ($score == 0) {
/* premier passage */
echo "Bienvenue, et si on jouait un peu ?";
}
else {
if ($action == "Ok") {
echo "Changement de vocabulaire";
} else {
echo "Il faut donner une Réponse !!";
}
}
}
else {
if ($radiobutton == $juste) {
echo "Réponse juste, bravo!!";
} else {
echo "Réponse fausse, dommage!!";
}
}
?>
<?PHP
function lire_meilleurs($base,$langue)
{
$rep = TRUE;
$SQL = "SELECT * FROM topjeu1 WHERE Langue = '".$langue."' ";
$SQL = $SQL." ORDER by score DESC limit 0,10";
$result = mysql_db_query($base, $SQL ) or die ("Erreur de Requete SQL Invalide #0 ".mysql_error());
$row=0;
$pos = 0;
echo "Top 10 pour ".$langue;
while( $pos < 10)
{
if ( $row = mysql_fetch_array($result) )
{
$line = $row[$jj];
$row++;
print "".$row[0]." : ".$row[2];
}
else
{
}
$pos++;
}
}
function ecrire_meilleurs($base,$jnom,$score,$langue)
{
if (strlen($jnom)>2)
{
$date2=date("Y-m-d-H:i:s");
$SQL = "SELECT * FROM topjeu1 WHERE Nom='".$jnom."' AND langue='".$langue."'" ;
$result = mysql_db_query($base, $SQL ) or die ("Erreur de Requete SQL Invalide #1".mysql_error());
$row = mysql_fetch_array($result);
if ($row[0]==$jnom)
{
/* déjà dans la base */
if ($score > $row[2])
{
$sql = "UPDATE topjeu1 SET ";
$sql = $sql." Date='".$date2."'";
$sql = $sql.", Score=".$score;
$sql = $sql. " WHERE Nom='".$jnom."' AND langue='".$langue."'";
$result = mysql_db_query($base,$sql ) or die ("Erreur de Requete SQL Invalide #22 ".mysql_error());
}
else
{
$score = $row[2];
}
}
else
{
/* nouveau venu */
$sql = "INSERT INTO topjeu1 (Nom,Date,Score,Langue)";
$sql= $sql." VALUES (";
$sql= $sql."'".$jnom."'";
$sql= $sql.",'".$date2."'";
$sql= $sql.",".$score;
$sql= $sql.",'".$langue."'";
$sql= $sql.")";
echo $sql;
$result = mysql_db_query($base, $sql ) or die ("Erreur de Requete SQL Invalide #3 ".mysql_error());
}
}
return ($score);
}
lire_meilleurs($base,$langue);
?>

