LE COMPTE EST BON

jdmcreator Messages postés 647 Date d'inscription samedi 30 décembre 2000 Statut Membre Dernière intervention 20 juillet 2012 - 30 sept. 2010 à 23:31
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 - 11 déc. 2010 à 12:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52331-le-compte-est-bon

007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
11 déc. 2010 à 12:26
Quelques commentaires sur la structure du script.

Ce script utilise les variables globales _c pour la cible et _t (un tableau) pour le tirage (ligne 29 de la source affichée par Internet Explorer).

Au chargement de la page (voir ligne 137) la fonction ini() (lignes 110 à 119) procède à un tirage aléatoire tant pour la cible que pour les plaques, efface les éventuelles données précédentes pour les actualiser, puis lance (avec un setTimeout pour que l'affichage ait effectivement lieu avant le lancement de la résolution) la fonction sol() (lignes 127 à 130).

Cette dernière fonction après avoir lancée la fonction éponyme Tgn.sol de l'objet Tgn (comme tirage généralisé) affiche le message résultant Tgn.m et laisse la main à l'utilisateur qui, notamment en cliquant sur le lien tirage au sort, peut relancer le processus en rappelant la fonction ini().

L'élément moteur du script est donc l'objet Tgn, construit au chargement du script (et en quelque sorte pré-compilé). Sa fonction de résolution sol appelée avec les arguments _c et _t actualise les propriétés listées au début de sa définition. Elle fait appel à la fonction récurrente dcp(a) qui ne retourne vrai que lorsqu'elle réussit, avec un nombre de plaques donné (*), à atteindre la cible b ().

La mise en mémoire de toutes les valeurs atteintes par le jeu de plaques donné (dans l'objet s), permet en outre en cas d'échec (pas de compte est bon), de ne relancer que la recherche de la solution la plus proche de la cible.

Enfin, la fonction accessoire ntr() contrôle les entrées au clavier.

(*) Ce nombre de plaques ou niveau a est utilisé pour stocker (entre les rangs 6a inclus et 7a exclus) les valeurs des plaques ou pseudo-plaques (résultats intermédiaires) obtenus.

(**) La cible c peut être réduite (valeur b) à la valeur maximale susceptible d'être obtenue avec les plaques, si celle-ci lui est inférieure.
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
2 oct. 2010 à 13:22
Après test, Mozilla FireFox ne supporte apparemment pas la compression proposée $=document.getElementById;

Firebug donne en effet l'erreur suivante :
uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location...

Je maintiens donc cette fonction jadis recommandée par PPK sur http://www.quirksmode.org/.
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
1 oct. 2010 à 00:40
Ok Merci.
Cette fonction (qui commençait par un if (document.all) return document.all[i] else ... ) n'a d'intérêt qu'en l'absence de Jquery ou autres Prototype. Elle est effectivement de peu d'utilité pour ce script.

Sinon, bien qu'il s'agisse d'un jeu télévisé déjà ancien bien connu en France (voir le lien sur le mot jeu) et au Royaume-uni (voir aussi http://fr.wikipedia.org/wiki/Des_chiffres_et_des_lettres ou encore http://www.dailymotion.com/video/x1p7s6_le-compte-est-bon-version-anglaise_fun), cette page et son script constituent, à ma connaissance, une première.
jdmcreator Messages postés 647 Date d'inscription samedi 30 décembre 2000 Statut Membre Dernière intervention 20 juillet 2012 7
30 sept. 2010 à 23:31
Bonjour,

Je ne comprends pas tout à fait ce que c'est, puisque je ne connais pas le jeu. Seulement, la création d'une fonction $(id) n'est pas vraiment une bonne idée, puisque cela rend ce script incompatible avec bien d'autres scripts fonctionnant avec JQuery ou Prototype.js

D'ailleurs, cette ligne :

function $(i){return document.getElementById(i)}

est compressive par :

$=document.getElementById;

Sinon, tout le reste me semble bon. Programmation orienté objet et tout, je peux donc dire bravo, je mets donc un 9.