Code source d'Icosien

Licence

Ce code est fourni sous une licence CC-By (cf. fin de page).
De plus, il est interdit de recompiler le jeu "tel quel" en supprimant le lien « Sponsorisé par », la mention « tel quel » restant à l'appréciation de l'auteur original du code source (copie, plagiat...).

Télécharger tous les codes sources.

Package principal

Fichiers de bases :

Code source : Preloader.as
  • Langage : actionscript3
  • ΔT : 0.008s
  • Taille :2252 caractères
span class="co1">// Must be dynamic!
// Keep track to see if an ad loaded or not
// Change this class name to your main class
"Battery"// Ignore event to prevent unhandled error exception
"803e3dbb622e59fc",
                                res:"640x480"//ad_finished:startup
// don't directly reference the class, otherwise it will be
            // loaded before the preloader can begin
"Main"//Main.HEIGHT;
                //opts.ad_finished()
//Cercle.graphics.lineStyle(2);
Code source : Main.as
  • Langage : actionscript3
  • ΔT : 0.031s
  • Taille :11797 caractères
span class="coMULTI">/**
         * Icosien : le jeu flash :)
         * Exploite les idées de graphe Eulérien et Hamiltonien sous forme de jeu.
         * http://neamar.fr/Res/Icosien
         * @author Neamar
         *//**
                 * Taille du SWF.
                 */
/**
                 * L'ombre, c'est la même pour tout le monde.
                 * On la définit une bonne fois pour toute ici pour économiser la mémoire.
                 */
/**
                 * L'image des plantes en haut.
                 */
"../assets/Plante.png"/**
                 * Les données définissant le niveau.
                 */
/**
                 * Le numéro du niveau actuel.
                 * 0 pour commencer, on peut le modifier pour les tests.
                 */
/**
                 * L'objet permettant de retenir à quel niveau on en est.
                 */
/**
                 * L'objet contenant le niveau actuel, sur lequel on a enregistré l'evenement Level.LEVEL_WIN
                 */
/**
                 * Le dernier niveau joué, stocké temporairement pour destruction une fois sorti de l'écran.
                 */
/**
                 * La planche au fond.
                 */
/**
                 * Mdofications du menu contextuel
                 */
"Recommencer le niveau""Reculer d'un niveau""Avancer d'un niveau"/**
                 * Gestion de la pub.
                 */
//La première pub arrive au bout de 15 minutes de jeu (5 + 10=.
//Puis toutes les dix minutes.
//Empêche de passer les publicités.
/**
                 * Initialiser l'application et construire la banque de données pour les niveaux.
                 */
//Enregistrer le nouveau joueur de façon asynchrone :
"http://neamar.fr/Res/Icosien/Player.php"//Créer l'objet de sauvegarde locale :
"Icosien"//Réinitialiser les valeurs enregistrées (debug)
                        //Commenter cette ligne pour avoir un enregistrement de la progression.
                        //LocalValue.NumeroNiveauActuel = null;
                       
                       
                        //Et récupérer le dernier niveau (s'il existe)
"(Re-)set"//Charger la banque de donnée des niveaux.
'DatasBank.as'//Permettre la navigation au clavier.
//CHEAT ! Ctrl + Alt + Flèche droite permet le déplacement direct.
//Flèche droite : charger un niveau si disponible.
//Configurer le menu clic droit
/**
                 * Relance le niveau actuel.
                 * @param       e Un évenement non utilisé.
                 */
/**
                 * Passer au niveau suivant si on a déjà débloqué le niveau
                 * @param       e Un évenement non utilisé.
                 */
/**
                 * Passer au niveau précédent si on n'est pas au niveau 0.
                 * @param       e Un évenement non utilisé.
                 */
/**
                 * Changer le niveau en cours pour le niveau suivant / précédent.
                 * @param       Sens S'il faut ajouter un niveau ou en retirer un.
                 */
//Vérifier la validité de l'appel de fonction
"Impossible de se déplacer de plus d'un niveau à la fois."//Ne pas sortir par la gauche !
//Allez les vieux, faites de la place aux jeunes.
//Changer le niveau, ou afficher une pub.
//Afficher une pub.
"""Votre jeu va reprendre dans quelques secondes..."//Passer au niveau suivant
//Charger le niveau de la banque de données.
//Afficher la progression :
" / "//-1 car la présentation ne compte pas, -2 car le début et la fin ne comptent pas.
                                       
                                //Si on arrive à l'avant dernier niveau, donner l'ordre de précharger l'image finale :)
//Modifier le menu contextuel et les suivants / précédents
//(re-)Passer la plante au premier plan et la planche au dernier.
//Faire défiler la planche à l'arrière d'un cran, et bouger les niveaux.
                        //La variable Sens détermine la direction des animations (à droite / à gauche)
/**
                 * Déclenché une fois le niveau fini, cette fonction est déclenchée pour mettre à jour le niveau actuel.
                 * Cette fonction n'est pas appelée au tout début.
                 */
//Supprimer le premier élément sur la scène, qui est logiquement le plus ancien.
// AncienNiveau.destroy(); => implicite avec le removeChild.
                }
               
                /**
                 * Numéro actuel du niveau en jeu.
                 */
/**
                 * Met à jour le niveau actuel, et enregistre sur le disque la progression.
                 */
//Enregistrer le plus haut niveau atteint sur le disque (si on en a la permission)
"Icosien""Icosien"//écrire les données sur le disque.
"Icosien""Accès au disque interdit :(, impossible d'enregistrer le niveau atteint.""Icosien"/**
 * Classe "database" pour stocker les niveaux à réaliser dans une structure légère.
 */
/**
         * Crée un nouvel Objet LevelDatas.
         * @param       Type le type du niveau (EulerLevel ou HamiltonLevel)
         * @param       Datas Les données du niveau au format graphe
         * @param       Name Le nom du niveau (non affiché)
         * @param       AdditionalDatas Second paramètre du constructeur de Type -- si nécessaire (ex: DummyLevel).

         */
/**
         * Construit le niveau demandé et le renvoie.
         */
//Construire l'objet
//Et le renvoyer
Code source : DatasBank.as
  • Langage : actionscript3
  • ΔT : 0.014s
  • Taille :10523 caractères
?/**
 * INTRODUCTION DU JEU : TITRE DU JEU
 */
"",
        "Made by <a href=\"http://neamar.fr\">Neamar</a>, designed by <a href=\"http://licoti2.free.fr\">Licoti</a>",
        "Sponsorisé par http://www.mini-jeu-gratuit.fr"/**
 * PREMIÈRE PARTIE DE JEU : EULER
 */
"530,310|440,355|540,355|590,380|440,405|540,405|530,450:0,2|2,1|1,4|4,5|5,6|6,3|3,0",
        "Flèche tutoriel 1",
        "<p>Reproduisez le motif gris d'un seul mouvement de souris, sans repasser deux fois sur le même trait (mais les croisements de fil sont autorisés).<br /> Double cliquez pour recommencer !</p><p></p>Ayez des mouvements amples de souris, imaginez que vous tirez un fil derrière vous : pas besoin de frôler les clous !</p><p></p><p>Pour commencer à jouer, entraînez-vous sur la flèche ci-dessous.<br />Cliquez sur un clou pour attacher votre corde et commencer.</p>""320,50|200,150|440,150|200,400|440,400:0,1|0,2|1,2|1,3|1,4|2,3|2,4|3,4",
        "Maison""290,50|350,50|220,150|420,150|320,300|320,400|320,440:0,1|0,2|0,3|0,4|1,2|1,3|1,4|2,4|2,5|3,4|3,5|5,6",
        "Labelled Eulergraph.svg http://en.wikipedia.org/wiki/File:Labelled_Eulergraph.svg""172,92|172,388|468,388|468,92|320,110|190,240|320,370|450,240|285,205|285,275|355,275|355,205:0,1|0,3|0,4|0,5|1,2|1,5|1,6|2,3|2,6|2,7|3,4|3,7|4,8|4,11|5,8|5,9|6,9|6,10|7,10|7,11|8,9|9,10|10,11|11,8",
        "Cuboctahedral Graph http://mathworld.wolfram.com/CuboctahedralGraph.html""320,50|270,90|370,90|320,130|150,250|490,250|100,290|220,280|420,280|540,290|150,330|490,330:0,1|0,2|1,3|1,2|2,3|1,4|2,5|4,6|4,7|4,10|5,8|5,9|5,11|6,10|7,10|8,11|9,11|10,11|7,8",
        "Graphe d'explication algorithme de Fleury http://www.cmis.brighton.ac.uk/~jt40/MM322/MM322_FleurysAlgorithm.pdf""389,74|251,74|154,171|154,309|251,406|389,406|486,309|486,171:0,1|0,2|0,3|0,4|0,6|0,7|1,2|1,3|1,5|1,6|1,7|2,4|2,5|2,6|2,7|3,4|3,5|3,6|3,7|4,5|4,6|4,7|5,6|5,7",
        "Cocktail Party Graph http://mathworld.wolfram.com/CocktailPartyGraph.html""202,78|130,178|130,302|202,402|320,440|438,402|510,302|510,178|438,78|320,40|249,217|276,301|364,301|391,217|320,165:8,9|9,0|0,1|1,2|2,3|3,4|4,5|5,6|6,7|7,8|0,2|2,4|4,6|6,8|8,0|10,12|12,14|14,11|11,13|13,10|9,10|9,13|1,14|1,11|3,10|3,12|5,11|5,13|7,12|7,14",
        "Des étoiles plein la tête !""115,35|115,445|525,445|525,35|387,78|253,78|158,173|158,307|253,402|387,402|482,307|482,173|353,160|287,160|240,207|240,273|287,320|353,320|400,273|400,207|302,222|302,258|338,258|338,222:0,1|1,2|2,3|3,0|0,5|0,6|1,7|1,8|2,9|2,10|3,11|3,4|4,5|5,6|6,7|7,8|8,9|9,10|10,11|11,4|12,13|13,14|14,15|15,16|16,17|17,18|18,19|19,12|20,21|21,22|22,23|23,20|11,19|4,12|5,13|6,14|7,15|8,16|9,17|10,18|19,23|12,23|13,20|14,20|15,21|16,21|17,22|18,22",
        "Small Rhombicuboctahedral Graph http://mathworld.wolfram.com/SmallRhombicuboctahedralGraph.html"//Datas.push(new LevelDatas(
        //EulerPathLevel,
        //"451,76|273,35|131,149|131,331|273,445|451,404|530,240|414,123|287,94|185,175|185,305|287,386|414,357|470,240|370,177|302,162|248,205|248,275|302,318|370,303|400,240:0,2|0,5|0,7|0,13|1,3|1,8|1,7|1,6|2,4|2,8|2,9|3,5|3,9|3,10|4,6|4,10|4,11|5,11|5,12|6,13|6,12|7,20|7,15|8,14|8,16|9,15|9,17|10,16|10,18|11,17|11,19|12,18|12,20|13,19|13,14",
        //"Brinkmann Graph http://mathworld.wolfram.com/BrinkmannGraph.html"));
"473,111|355,43|220,67|132,172|132,308|220,413|355,437|473,369|520,240|412,163|341,122|260,136|207,199|207,281|260,344|341,358|412,317|440,240|366,201|330,181|290,188|264,219|264,261|290,292|330,299|366,279|380,240:0,1|1,2|2,3|3,4|4,5|5,6|6,7|7,8|8,0|0,10|0,19|1,11|1,20|2,12|2,21|3,13|3,22|4,14|4,23|5,15|5,24|6,16|6,25|7,17|7,26|8,9|8,18|17,10|10,12|12,14|14,16|16,9|9,11|11,13|13,15|15,17|18,23|23,19|19,24|24,20|20,25|25,21|21,26|26,22|22,18|10,19|11,20|12,21|13,22|14,23|15,24|16,25|17,26",
        "Doyle Graph http://mathworld.wolfram.com/DoyleGraph.html"/*Datas.push(new LevelDatas(
        EulerPathLevel,
        "320,50|270,100|370,100|220,150|320,150|420,150|170,200|270,200|370,200|470,200|120,250|220,250|320,250|420,250|520,250|270,300|370,300|220,350|320,350|420,350:0,1|0,2|1,2|1,3|1,4|2,4|2,5|3,6|3,7|3,4|4,5|5,8|5,9|6,10|6,11|6,7|7,11|7,12|8,9|8,12|8,13|9,13|9,14|10,11|11,12|12,13|13,14|12,15|12,16|15,17|15,16|15,18|16,18|16,19|17,18|18,19",
        "Sierpi?ski Graph http://mathworld.wolfram.com/SierpinskiGraph.html"));*/

       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
/**
 * DEUXIÈME PARTIE DE JEU : HAMILTON
 */
"550,340|530,360|450,365|600,380|450,415|600,400|530,420|550,440:0,3|3,2|2,4|2,1|1,6|6,4|4,5|5,7|7,0|3,5",
        "Flèche Tutorial Hamilton",
        "<p>Vous avez maintenant fini l'échauffement, passons à la partie intéressante !</p><p></p><p>Changement de règle : il faut passer une et une seule fois sur chaque clou, en utilisant uniquement les traits disponibles pour joindre deux clous (mais vous n'êtes pas obligés de passer sur tous les traits).</p><p>Contrainte supplémentaire : il faut commencer et finir sur le même point.</p>""320,40|111,172|191,418|449,418|529,172|280,240|360,240:0,1|1,2|2,3|3,4|4,0|0,5|0,6|1,6|2,6|3,5|4,5",
        "Moser Spindle http://mathworld.wolfram.com/MoserSpindle.html""420,67|220,67|120,240|220,413|420,413|520,240|370,153|270,153|220,240|270,327|370,327|420,240:0,1|1,2|2,3|3,4|4,5|5,0|6,7|7,8|8,9|9,10|10,11|11,6|0,11|5,6|1,8|2,7|3,10|4,9",
        "Franklin Graph http://mathworld.wolfram.com/FranklinGraph.html""388,31|142,111|142,369|388,449|540,240|366,97|199,152|199,328|366,383|470,240|289,145|220,240|289,335|401,299|401,181|305,192|270,240|305,288|360,269|360,211:0,1|1,2|2,3|3,4|4,0|0,5|1,6|2,7|3,8|4,9|9,13|9,14|5,14|5,10|6,10|6,11|7,11|7,12|8,12|8,13|14,19|10,15|11,16|12,17|13,18|19,15|15,16|16,17|17,18|18,19",
        "Dodecahedron http://mathworld.wolfram.com/IcosianGame.html""258,50|120,240|258,430|482,358|482,122|289,145|220,240|289,335|401,299|401,181|320,240:0,1|1,2|2,3|3,4|4,0|0,6|0,9|1,5|1,7|2,6|2,8|3,7|3,9|4,5|4,8|5,10|6,10|7,10|8,10|9,10",
        "Grötzsch graph http://mathworld.wolfram.com/GroetzschGraph.html""484,167|440,106|376,69|301,61|174,134|144,203|144,277|174,346|230,396|301,419|376,411|440,374|484,313|500,240|320,240:0,1|1,2|2,3|4,5|5,6|6,7|7,8|8,9|9,10|10,11|11,12|12,13|13,0|3,6|5,9|8,12|11,1|13,14|2,14|4,14|7,14|10,14",
        "Hypohamiltonian graph constructed by Lindgren http://en.wikipedia.org/wiki/Hypohamiltonian_graph""476,150|436,102|382,71|258,71|204,102|164,150|143,209|143,271|164,330|204,378|258,409|320,420|382,409|436,378|476,330|497,271|497,209|320,240:0,1|1,2|3,4|4,5|5,6|6,7|7,8|8,9|9,10|10,11|11,12|12,13|13,14|14,15|15,16|16,0|0,17|5,17|2,6|4,9|7,11|8,13|10,14|12,1|3,16",
        "First Blanusa Snarks http://mathworld.wolfram.com/BlanusaSnarks.html""320,20|129,130|129,350|320,460|511,350|511,130|320,90|190,165|190,315|320,390|450,315|450,165|320,150|242,195|242,285|320,330|398,285|398,195:0,1|1,2|2,3|3,4|4,5|5,0|0,6|1,7|2,8|3,9|4,10|5,11|12,15|13,16|14,17|6,13|13,8|8,15|15,10|10,17|17,6|11,12|12,7|7,14|14,9|9,16|16,11",
        "Pappus Graph http://mathworld.wolfram.com/PappusGraph.html""476,84|320,20|164,84|100,240|164,396|320,460|476,396|540,240|414,99|287,73|179,146|153,273|226,381|353,407|461,334|487,207|366,129|274,129|209,194|209,286|274,351|366,351|431,286|431,194:0,1|1,2|2,3|3,4|4,5|5,6|6,7|7,0|0,8|1,9|2,10|3,11|4,12|5,13|6,14|7,15|8,16|9,17|10,18|11,19|12,20|13,21|14,22|15,23|16,19|19,22|22,17|17,20|20,23|23,18|18,21|21,16",
        "McGee graph modifié http://en.wikipedia.org/wiki/McGee_graph""225,30|415,30|255,45|385,45|215,60|425,60|295,75|345,75|320,55|295,95|345,95|215,115|425,115|260,130|380,130|225,145|415,145|240,170|400,170|225,200|415,200|174,448|79,284|172,415|107,302|204,442|99,260|177,365|152,322|148,353|195,355|170,312|252,414|147,233|243,368|183,264|273,391|178,226|287,365|207,227|321,363|561,284|466,448|533,302|468,415|541,260|436,442|488,322|463,365|492,354|470,312|445,355|493,233|388,414|457,264|397,368|462,226|367,391|433,227:0,1|0,2|0,4|1,3|1,5|2,6|2,13|3,7|3,14|4,9|4,11|5,10|5,12|6,8|6,11|7,8|7,12|8,9|8,10|9,13|10,14|11,15|12,16|13,15|14,16|15,17|16,18|17,19|18,20|15,16|17,18|19,20|21,22|21,23|21,25|22,24|22,26|23,27|23,34|24,28|24,35|25,30|25,32|26,31|26,33|27,29|27,32|28,29|28,33|29,30|29,31|30,34|31,35|32,36|33,37|34,36|35,37|36,38|37,39|38,40|39,19|36,37|38,39|19,40|41,42|41,43|41,45|42,44|42,46|43,47|43,54|44,48|44,55|45,50|45,52|46,51|46,53|47,49|47,52|48,49|48,53|49,50|49,51|50,54|51,55|52,56|53,57|54,56|55,57|56,58|56,57|58,20|20,40|21,42|22,0|1,41",
        "60 Graph Thomassen""536,197|523,156|503,118|476,84|442,57|404,37|363,24|320,20|277,24|236,37|198,57|164,84|137,118|117,156|104,197|100,240|104,283|117,324|137,362|164,396|198,423|236,443|277,456|320,460|363,456|404,443|442,423|476,396|503,362|523,324|536,283|540,240:2,0|4,3|5,2|6,1|7,0|8,6|9,5|10,4|11,3|12,2|12,11|13,1|13,10|14,0|14,9|15,8|16,7|17,6|18,5|18,16|19,4|19,15|20,3|20,14|21,2|21,13|22,1|22,12|23,0|23,11|24,10|24,23|25,9|25,22|26,8|26,21|27,7|27,20|28,6|28,19|29,5|29,18|30,4|30,17|31,3|31,16",
        "Tauraso's graph http://www.dharwadker.org/hamilton/""",
        ":)"//Doily http://home.wlu.edu/~mcraea/Finite_Geometry/Applications/Prob33Walks/doily.gif
//NON EULERIEN / NON HAMILTONIEN
//addChild(new EulerPathLevel("382,50|158,122|158,358|382,430|520,240|267,78|150,240|267,402|458,340|458,140|283,126|200,240|283,354|417,311|417,169:4,9|9,0|0,5|5,1|1,6|6,2|2,7|7,3|3,8|8,4|0,7|5,3|1,8|6,4|2,9|5,11|5,14|6,10|6,12|7,11|7,13|8,12|8,14|9,10|9,13"));

Fichiers annexes du package principal

Code source : Background.as
  • Langage : actionscript3
  • ΔT : 0.012s
  • Taille :3190 caractères
span class="coMULTI">/**
         * La texture de fond qui défile. Elle est générée à la volée par un sprite.
         * Singleton récpérable par Background.Instance() depuis n'importe quel fichier.
         *//**
                 * Accès à l'objet Background de l'application.
                 */
//Inclut la ressource spécifiée par source, une image png ici.
                //De nombreux formats sont gérés : polices, svg, images bitmap, ressources flash...
                //Le chemin doit être spécifié par rapport au fichier source.
"../assets/Plank.png")]
                //Définit la classe à instancier pour récupérer un objet de ce type.
//Instancie un objet de type Plank et le stocke dans une variable de type Bitmap (polymorphisme). Ici, on a bien un type Bitmap (Plank extends Bitmap).
                //De toute façon, on ne peut pas mettre :Plank car c'est un type "inconnu à la compilation".
/**
                 * Le fond qui défile et qui contient la planche et son miroir.
                 */
"color"//L'objet s'utilise normalement après.
//Construction du miroir
//Gérer le décalage des textures : trop à gauche.
//Gérer le décalage des textures : trop à droite.
/**
                 * Retourne l'image passée en paramètre pour lui appliquer un effet miroir
                 * @param       ImageOriginale l'image à retourner verticalement (les coordonnées Y restent im
                 * @return
                 */
//Construction de la matrice de transformation.
                        //scaleX = -1
                        //Translation X :
//Construction des données, en dessinant ImageOriginale avec la matrice
Code source : Rope.as
  • Langage : actionscript3
  • ΔT : 0.002s
  • Taille :744 caractères
span class="coMULTI">/**
         * Dessine une corde.
         * @author Neamar
         */
Code source : CustomEvent.as
  • Langage : actionscript3
  • ΔT : 0.001s
  • Taille :286 caractères
span class="coMULTI">/**
         * Un évenement personnalisé qui peut prendre des valeurs dynamiques.
         * @author Neamar
         */
Code source : Point.as
  • Langage : actionscript3
  • ΔT : 0.009s
  • Taille :3142 caractères
span class="coMULTI">/**
         * Les points composant le graphe.
         * @author Neamar
         */"../assets/Clou.png""../assets/Vis.png"/**
                 * Construit un nouveau point avec les coordonnées spécifiées.
                 * @param       x
                 * @param       y
                 */
//function T(e:Event):void { trace(Num+1) }
                        //addEventListener(MouseEvent.MOUSE_MOVE, T) ;
//Générer l'image
/**
                 * Transformer le point en clou
                 */
/**
                 * Transformer le point en vis, le lisser.
                 */
//Centrer le clou
/**
                 * Fonction de debug
                 * @return la trace du point.
                 */
/***********************
                 * FONCTIONS STATIQUES
                */

               
                /**
                 * Calcule l'angle entre la droite formée par les deux points et l'horizontale.
                 * Valeur de retour comprise entre 0 et 2PI.
                 * Note : l'ordre des paramètres est important !
                 * Note : utilise la fonction atan2. Cf. http://fr.wikipedia.org/wiki/Atan2
                 * @param  P1 le premier point
                 * @param  P2 le second point
                 * @return l'angle (P1P2,x)
                 */
/**
                 * Calcule l'angle entre la droite formée par les deux points et l'horizontale.
                 * Valeur de retour comprise entre -PI et PI, notation anglaise.
                 * Note : l'ordre des paramètres est important !
                 * Note : utilise la fonction atan2. Cf. http://fr.wikipedia.org/wiki/Atan2
                 * @param  P1 le premier point
                 * @param  P2 le second point
                 * @return l'angle (P1P2,x)
                 */
/**
                 * Distance pythagoréenne entre deux points.
                 * @param  P1 le premier point
                 * @param  P2 le deuxième point
                 * @return la distance calculée avec le théorème de Pythagore.
                 */

Package Web

Toute la gestion de la toile (décrit dans cet article).

Code source : Web/HookManager.as
  • Langage : actionscript3
  • ΔT : 0.009s
  • Taille :3136 caractères
span class="coMULTI">/**
         * Dessine une forme entourant tous les points contenus dans la tableau statique Point.Points
         * Utilise l'agorithme dit "de la marche de Jarvis" ou "du papier cadeau".
         * @author Neamar
         */"willDraw"/**
                 * Liste des accroches par lequel passe le fil.
                 * Structure de l'objet :
                 * .Point : le point d'accroche
                 * .Angle : l'angle d'arrivée
                 * .Sens : +1 ou -1 selon le sens d'arrivée de l'angle.
                 */
/**
                 * Liste des points disponibles
                 */
/**
                 * La corde des points déjà accrochés par un hook.
                 */
/**
                 * Ajoute un nouveau point d'accroche.
                 * @param       P le point d'accroche
                 * @param       Angle l'angle sur lequel le fil s'est enroulé
                 * @param       Sens dans quel sens le fil s'est enrolé (-1 ou +1)
                 */
//Dessiner l'emplacement sur lequel on interceptera les évenements souris.
//Redessiner la forme
/**
                 * Supprimer le dernier hook.
                 * Cette fonction ne fait rien si on tente de supprimer le dernier hameçon.
                 * @return true si la suppression a été effectuée.
                 */
//Redessiner la forme
/**
                 * Récupérer le dernier hameçon planté.
                 * Contrat : le premier hook a été correctement placé.
                 * @return le dernier élément enregistré.
                 *
                 */
/**
                 * Dessine une forme passant par les points spécifiés dans le tableau Enveloppe.
                 */
//Permettre la modification des couleurs si quelqu'un veut listener la dessus.
Code source : Web/Eulris.as
  • Langage : actionscript3
  • ΔT : 0.027s
  • Taille :9078 caractères
span class="coMULTI">/**
         * Permet la gestion de l'accroche / décroche d'un fil à l'aide des méthodes fournies par HookManager.
         * Utilise un dérivé de l'agorithme dit "de la marche de Jarvis" ou "du papier cadeau".
         * Triggere des évenements lors de l'accroche et de la décroche.
         * @author Neamar
         */"firstHookAdded""hookAdded""hookRemoved"//Laisser l'utilisateur choisir le point initial
//Ajouter le bout de corde, masquer l'araignée et un peu d'ombre.
/**
                 * Détruit l'objet, libère la mémoire (du moins, dans la limite autorisée par Flash) et rend la main.
                 */
//Nettoyage des objets graphiques.
//Suppression des listeners :
//Mise à null de tout le monde pour avoir des erreurs si l'objet continue d'être utilisé.
//Puis destruction du super :
/**
                 * Une fois le noeud choisi, démarrer le parcours avec l'araignée.
                 * @param       e On se sert uniquement de e.target
                 */
//Supprimer les listeners et réduire les noeuds.
//Créer le premier hameçon (indécrochable, donc l'angle n'est pas important) :
/**
                 * Déconnecte la souris du niveau, précurseur de la destruction...
                 */
/**
                 * Met à jour la position de l'araignée en cas de déplacement souris.
                 * Calcule s'il faut accrocher le noeud à 'autres endroits.
                 * Ou le décrocher.
                 * Puis met à jour la toile.
                 * @param       e
                 */
//Déplacer l'araignée
//Variables utiles aux calculs qui vont suivre
//Sens trigo // anti trigo
                       
                        /**
                         * Calculer les variables nécessaires aux calculs.
                         */
//Sens trigo // anti trigo
//On a tourné autour du cercle, il faut inverser les min et max et modifier l'angleMin pour ne pas avoir un saut de 2PI.
//Si les distances sont trop grandes, y a un problème (sortie de la souris par exemple) et on ne prend pas en compte le mouvement.
//Faut-il ajouter un hook ?
                                //Liste des hameçons ajoutés sur cette itération, pour ne pas ajouter à l'infini (si on déplace très vite la souris) :
//Faire une boucle for pour faire un reset facile du tableau en cas d'jaout de Hameçons. Foreach agit sur une référence :\
//On a trouvé un hameçon ! L'enregistrer et mettre à jour le dernierHook
//Si l'ajout du hook a entraîné la victoire du niveau et sa destruction, stopper.
//Remettre à jour les variables.
//Faut-il enlever un hook ?
//Enregistrer et dessiner.
//BoutCorde.graphics.lineStyle(3, 0xbd9969,.8);
/**
                 * Mettre à jour les positions des angles lors de l'ajout d'une accroche.
                 */
//Le dispatch de l'event renverra le dernier hook :
//Ne dispatcher l'event que si on a au moins deux hooks
//Redessiner la forme. On le fait une deuxième fois (ça a déjà était fait dans le super) pour prendre en compte les modifications du dernier dispatchEvent.
/**
                 * Mettre à jour la position des angles lors de l'ajout d'une accroche
                 */
//Ne dispatcher l'event que si il y a bien eu modification
//Redessiner la forme. On le fait une deuxième fois (ça a déjà était fait dans le super) pour prendre en compte les modifications du dernier dispatchEvent.
/**
                 * Calculer les angles de chaque noeud par rapport à l'accroche courante.
                 */
/**
 * Classe Helper pour stocker les angles dans une structure facile d'accès.
 */
/**
         *
         * @param       P le point concerné
         * @param       Angle l'angle que fait le point avec le point d'accroche courant
         * @param       Distance la distance entre P et le point d'accroche courant.
         */
"[""," + Angle + "]"
Code source : Web/Hook.as
  • Langage : actionscript3
  • ΔT : 0.001s
  • Taille :549 caractères
span class="coMULTI">/**
         * Indique un point d'accroche pour le fil.
         * @author Neamar
         *//**
                 * Construit un objet d'accroche du fil.
                 * @param       P le point d'accroche
                 * @param       Angle l'angle sur lequel le fil s'est enroulé
                 * @param       Sens dans quel sens le fil s'est enrolé (-1 ou +1)
                 */

Package Level

Gestion des différents types de niveaux.

Code source : Levels/Level.as
  • Langage : actionscript3
  • ΔT : 0.031s
  • Taille :10287 caractères
span class="co1">//Interaction utilisateur//souris
//Champ de texte. Classe assez vaste, utilisée uniquement pour l'affichage de texte ici. Peut être du texte au format HTML.

        /**
         * Un niveau de jeu abstrait.
         * Prend en paramètre le graphe au format décrit dans E-Ditor (sans points de contrôles)
         * Exemple 0,0|100,100:0,1 crée deux noeuds (aux coordonnées 0,0 et 100,100) et place un trait entre les noeuds 0 et 1.
         * Dispatche l'evénement LEVEL_WIN une fois le niveau gagné.
         * Les tests de AretesInitiales se font avec la fonction abstraite checkVictory() qui est appelée à chaque ajout de noeuds sur le graphe des Hooks.
         */
//Evénement dispatché à la fin du niveau
"levelWin"//Evénement dispatché si le niveau est recommencé
"levelRestart"/**
                 * Le graphique avec les traits gris indiquant le Graphe à atteindre
                 */
/**
                 * Liste des points définissant le niveau
                 */
/**
                 * Graphe défini par les conditions initiales (arêtes de départ)
                 */
/**
                 * Liste des arêtes actuellements tracées. Le jeu s'arrête quand AretesInitiales == Aretes
                 */
/**
                 * Gestion des déplacements
                 */
/**
                 * Initialise le niveau et les éléments graphiques qui le composent.
                 * Appelle la méthode createLevel() pour générer les données du graphe de base.
                 * @param       Datas Les données au format E-Ditor.
                 */
//Cas des niveaux "directs".
""":""|""|"","","/**
                 * Détruit le niveau et le rend inutilisable !
                 */
//Nettoyage des objets graphiques.
//Suppression des listeneres :
//Mise à null de tout le monde
/**
                 * Recommence le niveau.
                 * @param       e
                 */
/**
                 * Créer le niveau en insérant dans le bon ordre les noeuds
                 * @param       Noeuds La liste des noeuds au format <x,y>
                 * @param       Liens La liste des arêtes au format <noeud1,noeud2>
                 */
//Le numéro du noeud.
//Dessin de l'image de fond.
//Dessiner les traits gris désignants l'Graphe
//Contrôle des redondances.
"Niveau mal formé (" + Arr_Lien[0] + "," + Arr_Lien[1] + ")."//Et enregistrer l'état à atteindre pour la AretesInitiales :
//Un peu d'optimisation, la figure est quand même relativement complexe (surtout son filtre)
/**
                 * Exporte la matrice d'adjacence du graphe.
                 * @return la matrice, séparée par des " " et des \n.
                 */
""" ""\n"/**
                 * Construit des données à partir d'une matrice d'adjacence.
                 * @param       Matrix la matrice
                 * @return des données suffisantes pour créer un niveau.
                 */
"\n"" "":"//S'arrêter sur la diagonale, sinon on va doublonner.
"1")
                                                        Retour += i + "," + j + "|"/**
                 * Initialise (réinitialise) un objet Eulris pour le niveau.
                 */
//Réinitialiser les points parcourus pour ne pas tricher ;)
//Au dessus de Graphe, en dessous des noeuds.
/**
                 * Déclenché une fois le noeud initial sélectionné.
                 * @param       e
                 */
/**
                 * Déclenché à chaque ajout d'un hook sur le graphe.
                 *
                 * @param       e possède deux propriétés en plus d'un simple Event : lastHook:Hook et newHook:Hook
                 */
//Pour les tricheurs ; on place ici le chemin calculé par un algorithme (ici, la solution du dernier niveau)
                        //Et on a une petite animation qui indique les points à relier à tout moment :)
                        //ça aide :)
                        //var Solution:Array = [1,15,10,26,23,2,14,22,27,9,16,20,29,7,18,31,5,11,25,24,12,13,3,6,30,19,17,32,4,21,28,8];
                        //TweenLite.to(Points[Solution[Solution.indexOf(e.newHook.P.Num + 1) + 1] - 1], 1.5, { scaleX:.5 } );
/**
                 * Déclenché à chaque suppression d'un hook
                 *
                 * @param       e possède deux propriétés en plus : lastHook:Hook et newHook:Hook
                 */
//Supprimer les points du tableau
/**
                 * Fonction abstraite permettant de déterminer si la victoire a été obtenue ou non.
                 */
"Appel d'une méthode abstraite."/**
                 * Fonction permettant d'interagir dynamiquement lors du rendu de la corde.
                 * Modifie les paramètres de dessin (disponibles dans e.drawer).
                 * @return true si l'arête est correcte. Utilisé pour l'héritage.
                 */
//Test arête correcte (disponible dans le graphe)
                        //ET arête non en double
//e.drawer.lineStyle(3, 0xbd9969, .8);
//e.drawer.lineStyle(3, 0xbd0000, .8);//Arête INCORRECTE
Code source : Levels/TextLevel.as
  • Langage : actionscript3
  • ΔT : 0.011s
  • Taille :3484 caractères
span class="coMULTI">/**
         * Un niveau avec de l'aide.
         * Pas vraiment utile d'un point de vue conceptuel, mais pratique pour séparer les concepts et ne pas tout balancer sur Level.
         * @author Neamar
         */"../../assets/Laouib.ttf""Laouib""bold""application/x-font-truetype""Laouib"/**
                 * Constructeur du niveau.
                 * @param       Datas cf. super()
                 * @param       Texte le texte à afficher au format HTML.
                 */
""//Numéro du niveau.
//Texte d'aide.
""""/**
                 * Afficher un texte d'aide.
                 * @param Texte en HTML
                 */
"Ce niveau n'a pas été initialisé pour afficher du texte."/**
                 * Afficher le numéro du niveau.
                 * @param Texte brut.
                 */
/**
                 * Initialise un Textfield pour qu'il ait le style par défaut.
                 * @param       T le textfield
                 * @param       Container son container
                 */
//T.autoSize = "left";
//Toujours garder l'effet en bas, sinon on ne peut plus cliquer sur les noeuds
Code source : Levels/EulerPathLevel.as
  • Langage : actionscript3
  • ΔT : 0.004s
  • Taille :2005 caractères
span class="coMULTI">/**
         * Un niveau que l'on gagne en créant un circuit eulérien sur le graphe, i.e en parcourant toutes les arêtes en une seule fois.
         * @author Neamar
         *//**
                 * Constructeur.
                 * @param       Datas cf. super()
                 * @param       Aide Le texte d'aide à afficher au format HTML.
                 */
""/**
                 * Compare les dictionnaires Aretes et AretesInitiales. Si chacune de leurs clés sont égales, dispatch l'evenement LEVEL_WIN.
                 */
//Fast test : juste comparer les tailles des tableaux.
                        //Complexité : O(n)
//Si les tailles diffèrent on peut s'arrêter tout de suite.
//Si tous les tableaux sont égaux, il faut être plus exhaustif et vérifier que le contenu de chaque tableau est similaire aux autres.
                        //Ici l'ordre n'a aucune importance : les tableaux sont donc des ensembles.
                        //Mathématiquement pour prouver que A = B il faut prouver que A est inclus dans B ET QUE B est inclus dans A.
                        //Ici cependant on va utiliser deux propriétés spécifiques de nos ensembles :
                        // - ils font la même taille
                        // - le contenu du tableau AretesInitiales[x] est unique (pas de doublons si le niveau est bien conçu).
                        //Il suffit alors de prouver que tous les élements de AretesInitiales[x] sont dans Aretes[x], et ce pour tout x.
                        //Complexité théorique O(n^3) (tous les points, tous les liens entre ces points, + une recherche avec indexOf)
Code source : Levels/HamiltonLevel.as
  • Langage : actionscript3
  • ΔT : 0.007s
  • Taille :2933 caractères
span class="coMULTI">/**
         * Un niveau que l'on gagne en créant un circuit hamiltonien sur le graphe, i.e en parcourant tous les somments en une seule fois, sans passer deux fois par le même sommet et en utilisant les arêtes du graphe.
         * @author Neamar
         */""/**
                 * Redessine le premier noeud selectionné pour l'identifier facilement
                 * @param       e
                 */
/**
                 * Si chaque sommet n'est utilisé qu'une fois, dispatch l'evenement LEVEL_WIN.
                 */
//Fast test : on devrait avoir tous les noeuds qui sont liés à deux sommets (arrivée vers le noeud + départ du noeud).
                        //Complexité : O(n)
//Si les tailles diffèrent on peut s'arrêter tout de suite.
//Si tous les noeuds ont deux connexions, il y a un cycle hamiltonien.
                        //Reste à vérifier que tous les chemins pris sont bien dans la liste des arêtes autorisées !
//L'arête n'appartient pas au graphe.
/**
                 * Fonction permettant d'interagir dynamiquement lors du rendu de la corde.
                 * Modifie les paramètres de dessin (disponibles dans e.drawer).
                 */
//Test arête correcte (disponible dans le graphe)
                        //ET arête non en double
//e.drawer.lineStyle(3, 0xbd9969, .8);
//e.drawer.lineStyle(3, 0xbd0000, .8);//Arête INCORRECTE
Code source : Levels/AdLevel.as
  • Langage : actionscript3
  • ΔT : 0.006s
  • Taille :1640 caractères
span class="coMULTI">/**
         * Un niveau "publicitaire".
         * @author Neamar
         *///L'élément dynamique contenant la pub DOIT être placé sur le stage pour que MochiAd puisse récupérer les infos de chargement. S'il n'est pas sur stage, on l'y remet donc :
"803e3dbb622e59fc",
                                res:"640x480"//Puis la replacer sur nous même.
//Pub.y = -50;
//Virer la pub si elle est encore chez nous.
                        //if (contains(Pub))
                                //removeChild(Pub);
/**
                 * Recommence le niveau.
                 * @param       e
                 */
"On ne recommence pas la pub :p"/**
                 * Dispatch l'evenement LEVEL_WIN.
                 */
Code source : Levels/CreditsLevel.as
  • Langage : actionscript3
  • ΔT : 0.007s
  • Taille :2811 caractères
span class="coMULTI">/**
         * Le niveau de présentation des crédits
         * @author Neamar
         */"../../assets/Icosien.png""../../assets/Neamar.png""../../assets/Licoti.png"/**
                 * Efface Icosien, passe sur Neamar.
                 */
/**
                 * Efface Neamar, passe sur Licoti.
                 */
"http://www.mini-jeu-gratuit.fr/vip/neamar/"'_blank'//Dans une nouvelle fenêtre (probablement nouvel onglet en fait)
"Impossible de lancer la fenêtre :("
Code source : Levels/EndLevel.as
  • Langage : actionscript3
  • ΔT : 0.006s
  • Taille :2272 caractères
span class="coMULTI">/**
         * Le niveau de présentation des crédits
         * @author Neamar
         */"../../assets/Fin.jpg"//Écraser les Datas et les remplacer par le positionnement des clous.
"1000,1000|1001,1001|218,45|294,33|361,13|439,25|48,243|176,276|341,276|560,237:0,1"//On arrive probablement directement sur ce niveau, et le fichier n'a pas été chargé. Faire ça en urgence !
/**
                 * Rarement appelé, sauf si on fait touche gauche pour revenir au niveau précédent.
                 * @param       e
                 */
/**
                 * Initialise (réinitialise) un objet Eulris pour le niveau.
                 */
/**
                 * Si le mec s'amuse à joueur, s'assurer qu'il ne peut pas gagner :)
                 */
/**
                 * L'image finale est relativement lourde, et rarement vue (malheureusement).
                 * Plutôt que de l'inclure dans le swf, elle est donc téléchargée dynamiquement si la progression de l'utilisateur laisse croire qu'il va s'en sortir (bref, qu'il arrive sur l'avant dernier niveau :))
                 */
"http://neamar.fr/Res/Icosien/Images/assets/Fin.jpg"

Bonus

En bonus, le fichier de résolution décrit sur cet article.

Code source : Solver.as
  • Langage : actionscript3
  • ΔT : 0.006s
  • Taille :2558 caractères
span class="coMULTI">/**
        * R?sout un niveau de jeu.
        *//**
                * Initialise le solver.
                */
/**
                * R?sout un niveau hamiltonien en ajoutant les hooks n?cessaires.
                */
'[' + i + ']' + '=>'"Statut : "/**
                * Trouve un cycle Hamiltonien (s'il existe !) dans le graphe pass? en param?tres.
                * Se base sur un algorithme r?cursif.
                * Prend en param?tre une liste de noeuds, tel que Noeuds[i] contienne tous les noeuds li?s ? i.
                * @param Noeuds:Vector.<Vector.<int>> la liste des points composant le niveau. Typ? comme array car les vector ne sont pas sparse.
                * @param Actuel le noeud sur lequel on est actuellement plac?. Non sp?cifi? au premier appel.
                * @param LongueurCycle la longueur du cycle actuelle. Si longueur == noeuds.length, c'est fini :)
                * @return true si un cycle a ?t? trouv?, false sinon.
                */
//R?cup?rer la liste des itin?raires possibles depuis le noeud Actuel.
//Supprimer ce noeud de la liste (pour qu'on ne le reprenne pas)
//Examiner chacun des itin?raires disponibles depuis ce noeud.
//Si :
                                // - on a la longueur d'un cycle, et on peut rejoindre 0 (le point de d?part)
                                // - le noeud n'a pas encore ?t? pris, et qu'on peut trouver un chemin hamiltonien dessus :
//Chemin trouv? !
"Trouv? : "//Sinon, aucun chemin hamiltonien ne passe par cette combinaison. Remettre le tableau dans son ?tat initial, puis quitter et revenir ? la fonction pr?c?dente.
Auteur
Neamar
Date
Juin 2010
But
Finir le jeu
Voir aussi
Compiler l'AS3
Retour
Retour à Icosien
Menu
Index des ressources

Chargement du sommaire...