Scrabble facile...

Soyez le premier à donner votre avis sur cette source.

Vue 29 941 fois - Téléchargée 966 fois

Description

Bonjour,
Cette source n'as rien de nouveau, puisqu'elle n'utilise ques des classiques : boucles for, array...mais l'idée est unique...ent ou tout cas sur phpcs.com car je n'ai pas trouver de script pour trouvez le maximum de mots avec les lettres tirée du scrabble :
Avec ce script, vous entrez toutes les lettres (7) que vous avez tirer dans le tas, puis valider. Le script vas chercher tous les mots dans la base de donnée que peuvent former les lettres tirée (des mots de 7 lettres...à ceux de 2 ou 3). Puis le script affiche bien sur ces mots..
C'est mon deuxième script posté ici (le premier à été supprimé) et je sais que ca vas casser dur dur...mais bon..j'ai éssayer de faire au mieux en lisant les autres commentaires des autres sources...comme le <? => <?php, ' à la place de "...etc...mais je suis sur que vous allez trouvez quelque chose à modifier...ou des conseils pour la clarté du code ou des 'trucs' pour simplifier.
Pour le faire fonctionner, modifier le fichier mysql.php (conf/mysql.php), et importer le fichier SQL dans votre base.

Source / Exemple :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Scrabble</title>
<style type="text/css">
<!--
body
{
	margin:auto;
	width:50%;
}
-->
</style>
<link href="css/design1.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="bloc">
<?php

	include('conf/mysql.php');//Inclusion du script de connexion
	$lettre[0] = $_GET['lettre1'];
	$lettre[1] = $_GET['lettre2'];
	$lettre[2] = $_GET['lettre3'];
	$lettre[3] = $_GET['lettre4'];
	$lettre[4] = $_GET['lettre5'];
	$lettre[5] = $_GET['lettre6'];
	$lettre[6] = $_GET['lettre7'];
?>
<table align="center" width="75%" border="1">
<tr align="center" style="font-weight:bold"><td>Mot</td><td>Taille</td></tr>
<?php

   $qry = 'SELECT * FROM dico'; //remplacer * par lettre, mot
   $requete = mysql_query($qry) or die('Erreur MySQL : <br />' . mysql_error());
   while($data = mysql_fetch_array($requete))
   {
        if($data['long'] <= 7)//Pour les mots <= à 7 (7 lettres par tirage au Scrabble)
        {
            $taille = strlen($data['mot']);//Détermination de la longeur du mot
            for($i=0;$i<$taille;$i++)
            {
                $dico[$i] = substr($data['mot'],$i,1);//Création de l'array du mot du dico
            }
            $nbjuste = 0;
            for($j=0;$j<7;$j++)
            {
                for($h=0;$h<$taille;$h++)//Pour chaque lettre de chaque mot puis on compare a l'array envoyé en PSOT
                {
                    if($lettre[$j] == $dico[$h])
                    {
                        $dico[$h] = "0";
                        $nbjuste = $nbjuste + 1;
                        $h = $taille + 1;
                    }
                }
            }
            if ($nbjuste==$taille)
	    {
                echo '<tr align="center"><td>' . $data['mot'] . '</td><td>' . $data['long'] . '</td></tr>';//On crée une ligne de tableau par mot trouvé...
            }
          
        }
}

?>
</table>
<input type="button" onclick="document.location='index.html'" value="Autre tirage" tabindex="1" />
</div>
</body>
</html>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Teclis01
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4 -
hum
if($data['long'] <= 7)//Pour les mots <= à 7 (7 lettres par tirage au Scrabble)
$taille = $data['long'];

tant qu'a faire hein ;)
Mon dieu ce que c'est lourd... huhu j'aime les boucles mais il y a des limites ^^
Heureusement que tu as pas 27 boucles imbriquées sinon tu n'aurais plus de lettres pour tes compteurs de boucle :p
Non franchement je vais pas être chiant sur le typage mais au moins des variables explicites ...ça mange pas de pain
Ensuite je me demande si il n'y a pas plus simple ... du genre...
$iLettres=count($_POST);
$sQuery='select mot from dico where';
foreach($_POST as $sNameInputLettre=>$sLettre{
$sQuery.=" mot=%'$lettre%' and";
}
substr($sQuery,0,strlen($sQuery)-3)); //on vire le dernier and
mysql_query($sQuery);
(je peux me tromper puisque c'est une idée a vif)
audayls
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008
-
Salut,
Je ne pense pas que ta méthode soit bonne Teclis01. Il se peut que tes 7 lettres ne puissent pas faire un mot de 7 lettres.

Ce qu'il faudrait faire, je pense vu la taille de la table, c'est deja d'améliorer la requête MySQL. Au lieu de selectionner tous les mots il faudrait uniquement selectionner les mots contenant au moins une des 7 lettres.
Ensuite pour analyser les mots en selectionner ceux qui peuvent fonctionner, tu peux fortement simplifier ton code en utilisant la class "STRING ITERATOR" récemment postée.

Pour finir tu pourrais classer les mots possible en les classant selon les points qu'ils rapportent.
cs_spoonisback
Messages postés
72
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
5 février 2010
-
Salut
Heu...débutant je suis...bon c'est pas que je suis contre vos idées, mais y'a des trucs que je pige pas en fait..!

En fait Teclis01, je n'ai pas trouver d'autre moyen que l'imbriquage de boucle pour chercher tous les mots : 7 et inférieurs à 7 lettres. POur la suite de ton code...j'ai rein compris...désolé...je vois que tu a fabriquer un autre type de query, c'est à partir du 'foreach' que je pige pas..;
Audalys, je suis d'accord pour faire une requete qui contient au moins une des lettres mais, je ne vois pas quelle requete faire...

Merci encore de ne pas m'avoir flagellé !!!
audayls
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008
-
"Merci encore de ne pas m'avoir flagellé !!!" Bah pourquoi tant de haine ? XD
Regarde dans tes MP c'est noël avant l'heure =P
neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13 -
Salut,

audayls : "Ensuite pour analyser les mots en selectionner ceux qui peuvent fonctionner, tu peux fortement simplifier ton code en utilisant la class "STRING ITERATOR" récemment postée."
=> Ouhaaaaaaaa alors elle peut vraiment servir à quelque chose !?

audayls : "Au lieu de selectionner tous les mots il faudrait uniquement selectionner les mots contenant au moins une des 7 lettres."
=> Pour ça, il pourrait être pertinent de trier les lettres du tirage par ordre croissant de fréquence dans le vocabulaire français. Puisqu'il y a peu de mots avec Z, mais beaucoup plus avec E, si on trouve un Z, on limite au maximum les résultats, et ainsi de suite.

Teclis01 : "
foreach($_POST as $sNameInputLettre=>$sLettre{
$sQuery.=" mot=%'$lettre%' and";
}
"
=> J'aime pas trop. Je préfère utiliser implode(), c'est plus propre, et certainement plus rapide puisque c'est une fonction C.
Ca donnerait :
$sQuery = implode(' AND ', $_POST);
1 seule ligne au lieu d'une boucle... Je crois que y'a pas photo.

Mais je crois effectivement qu'une requête avec des AND n'est pas judicieuse.

Et avec une regexp dans la requête SQL, on devrait pouvoir faire des choses intéressantes...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_spoonisback)