Comme promis voici la deuxième leçon dans ActionScript 3.0! Aujourd'hui, nous commençons l'analyse d'un projet simple qui reproduit le jeu ou le Tic Tac Toe Tic Tac Toe. J'ai essayé d'inclure des caractéristiques particulières dans cet exemple, ActionScript 3.0, en essayant de donner un espace à la compréhension et non pas sur le style. Il s'ensuit que si je devais écrire le "jeu" vraiment, je serais probablement structurés très différemment, mais dans ce cas j'ai essayé de servir d'intermédiaire entre un programme classique avec un compact, hermétique plus compréhensible pour les débutants. J'ai créé une classe de document unique, la procédure n'est pas nécessaire mais utile de garder en ligne avec le cours précédent .
Tic Tac Toe
La source
En plus du fichier ActionScript (. As) la classe du document, qui va commencer à analyser en détail ici, le projet est équipée d'un film standard de Flash (. Fla) qui fournit l'interface du jeu. Tous les fichiers nécessaires pour suivre les commentaires du code sont disponible ici .
Schéma du jeu
Dans cette version du jeu je n'ai pas mis l'ordinateur comme un adversaire, les activités que vous pouvez faire si vous vous sentez comme vous lecteurs. La question, donc, deux joueurs remplaçants, tout comme nous jouons sur un tableau noir ou sur une feuille de papier. Le schéma logique qui va suivre est la suivante:

Une vision globale
e il suo interno: Avant de commencer l'analyse proprement dite du code est bon de voir les contours d'une classe générique, composée de l' package , class , et son intérieur:

Constructeur de classe de document
Comme nous l'avions prévu la dernière fois , quand nous avons un lien vers un document Flash - un film - une classe de document, ce dernier étant un objet réel pour être instancié, le système démarrera le fabricant.
1 2 3 4 5 6 7 8 9 | / ** * Constructeur de la classe * / TicTacToe ( ) : void { TicTacToe la fonction publique (): void { Mode / / Set et escaliers stage stage d'aligner scaleMode = StageScaleMode . NO_SCALE stages. scaleMode = StageScaleMode . NO_SCALE align = StageAlign . TOP_LEFT ; stages align =. StageAlign TOP_LEFT.; Event . ADDED_TO_STAGE , init ) ; addEventListener ( Event . ADDED_TO_STAGE, init); } |
quando la nostra classe documento è aggiunta allo stage , cioè quando sarà visualizzata! Le fabricant établit dans ce cas l' stage , qui est le conteneur dans un navigateur et d'ajouter l'appel de la méthode de la fonction / init() lorsque le document est ajouté à notre classe stage , c'est à dire quand il est affiché! C'est une procédure standard que j'adopte souvent. Dans certains cas, il est totalement inutile, mais si vous faites usage de composants, qui est, ces objets visuels dans l'interface de l'éclair (comme TextArea, TreeView, etc ...), ils ne seront pas disponibles (en tant que pointeurs) jusqu'à ce que l'événement ADDED_TO_STAGE n'a pas été libéré! Alors pour être sûr, il est toujours bon de suivre cette voie, en prévision de toute les nouvelles versions.
Pour ceux qui possèdent une programmation objet orientée sèche, je recommande la lecture à tout le moins classes, objets et instances !
: La fonction ou une méthode, init() a été appelée privé (voir ActionScript 3.0: public, protégé, privé, interne et ) par le mot clé private :
1 2 3 4 5 6 7 8 9 10 |
Pour l'instant, comme vous pouvez le voir, cette fonction ne soit appeler un autre, initCell() . Souvent dans la méthode init() sont insérées toutes les fonctions d'initialisation, en évitant d'entrer directement le code ouvert. Cela peut être utile au cas ré-initialiser certains paramètres. Comme il s'agit d'un exemple d'un jeu relativement simple, il peut paraître étrange d'avoir cette double saut presque inutile, mais dans d'autres cas, la méthode init() peut être beaucoup plus large, en appelant une série de fonctions d'initialisation comme:
1 2 3 4 5 6 7 8 9 |
. La méthode init() est invoqué (soit disant) lorsque le système libère l'événement ADDED_TO_STAGE . Pour cette raison il a été ajouté le paramètre e:Event .
Note astuces: souvent, il peut arriver d'avoir des méthodes (telles que
init()) qui sont invoqués par les deux événements, tant dans le code. C'est précisément pour cette raison que le paramètre de cette méthode a été fixé àe:Event = null. (a meno di “simularlo” con un notevole spreco di energie). De cette façon, en fait, devrait-il jamais besoin, nous pouvons appelerinit()sans passer tous les paramètres, car nous ne sommes pas un événement, puis nous ne pouvions pas passer le paramètree:Event(sauf si vous "c'est faux" avec des pertes considérables d'énergie ). Pour plus de détails sur la gestion des paramètres d'ActionScript 3.0, voir aussi: Sujets et variables par défaut en Javascript, Actionscript et PHP et Actionscript 3.0 les variables sujets ,
Initialisation du jeu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | / ** * Initialiser une matrice linéaire qui va représenter notre grille. * Cette "grille" est par défaut à zéro (0), qui précise qu'aucune * Symbole (o / x) a été fait. * Le joueur 1 (ou) sera attribué à la valeur un (1). Alors que le joueur 2 (x) * Associée à la valeur de dix (10). Avec cette astuce lorsque ces * Somme des valeurs de la rangée 1 est égale à 3, nous saurons qui a gagné le joueur 1. * Si la somme, au lieu de la colonne 1 est de 30, puis a gagné le joueur 2 ... et ainsi de suite. * * 0 | 0 | 0 * --+---+--- * 0 | 0 | 0 * --+---+--- * 0 | 0 | 0 * Void * @ Param * @ Return void * @ Privé * / initCell ( ) : void { initCell fonction privée (): void { / / Tableau de pré-configurer le jeu à zéro , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ; __cell = [0, 0, 0, 0, 0, 0, 0, 0, 0]; / / Commence toujours par le joueur (le joueur) # 1 __player = 1; / / Dessine la grille sur l'écran createGrid (); / / Afficher l'écran du joueur son tour (dans ce cas 1) = 'PLAYER ' + __player ; . turno_txt text = 'player' + __player; / / Cette variable est utilisée pour mettre le jeu en pause si elle est vraie / / Commencer le jeu- __stop = false; } |
Cette méthode initCell() se charge d'initialiser toutes les variables et créer tous les objets dans le jeu.
Notes Astuces: presque tous les programmeurs de jeux vidéo sont parfaitement familiarisés avec la technique de la cartographie de la zone de jeu dans un tableau avec une ou plusieurs dimensions. Cette technique, utilisée dans ce qu'on appelle jeu Tile vous permet d'exécuter une série de contrôles dans une logique libéré de graphiques pour la vidéo. Dans ce cas précis j'ai utilisé un simple tableau à une dimension composé de 9 éléments représentant les 9 cases de la partie. Le fait que les éléments du tableau sont séquentiels, par rapport à grille 3 x 3, n'est pas un problème comme nous le verrons, mais seulement une question de point de vue!
Pour ceux qui veulent approfondir le sujet intéressant, je recommande la lecture Jeux Tile Basé
Toutes les variables à usage interne, au niveau mondial classe, indiquer l'utilisation du double trait de soulignement en face. indicano rispettivamente il giocatore attivo e lo stato del gioco. Ceux-ci, en fait, lors de la première ébauche d'une classe peut alors devenir propriété publique, en utilisant leur propre encapsulation programmation OO (voir écrire de bonnes code OO dans Adobe Flash ). __player et __stop désigner le joueur actif et l'état du jeu.
Pour l'instant je vais m'arrêter là! La prochaine fois que nous allons analyser la méthode createGrid() et le reste du jeu, si vous avez des questions ou des commentaires sur cette partie.










[...] L'analyse de l'exemple du jeu Tic Tac Toe, a présenté en Actionscript 3.0 pour les débutants: leçon n ° 2. Nous sommes arrivés à la fonction qui crée la grille de jeu: Texte brut [...]
Même si je n'aime pas tic tac toe, parce que le joueur en premier gagne toujours, si il fait ses marques sur au bon endroit, votre Tut est grand! Il ya quelques points obscurs pour moi encore, mais j'espère que vous traduire le site fastly. Cordialement
[...] Nos échantillons de code pour le TicTacToe (qui se trouve dans son intégralité sur Google Code) et de commencer à analyser en [...]
ontinuo ne comprends pas comment insérer le code .... je copier et coller d'erreur mais le plus souvent dans le fichier AS ... .... Bha!