Jeux de vocabulaire grec en PHP

Accueil du site > Les cours > 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), "&agrave;"$line);
            
$line str_replace(chr(225), "&aacute;"$line);
            
$line str_replace(chr(226), "&acirc;"$line);
            
$line str_replace(chr(231), "&ccedil;"$line);
            
$line str_replace(chr(232), "&egrave;"$line);
            
$line str_replace(chr(233), "&eacute;"$line);
            
$line str_replace(chr(234), "&ecirc;"$line);
            
$line str_replace(chr(238), "&icirc;"$line);
            
$line str_replace(chr(239), "&iuml;"$line);
            
$line str_replace(chr(249), "&ugrave;"$line);
            
$line str_replace(chr(244), "&ocirc;"$line);
            
$line str_replace(chr(235), "&euml;"$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&eacute;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&eacute;ponse !!";
                      }
         
               }
           }
           else {
                if (
$radiobutton == $juste) {
                 echo 
"R&eacute;ponse juste, bravo!!";
        
                 } else {
                 echo 
"R&eacute;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&eacute;j&agrave; 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); 
?>

Documents joints

  • base_grec.txt (texte - 15.2 ko)

Jonathan Bersot 10 avril 2008 Commentaires (0)


Répondre à cet article