Le jeu de tir au canon est un concept simple : deux joueurs s'affrontent au canon. L'emplacement des canons est défini au début du jeu de manière aléatoire, tout au moins en hauteur.
Afin d'accroître l'intérêt du jeu, les canons se déplacent, rendant ainsi l'ajustement des tirs plus difficile.
En définissant une telle classe, nous gagnons sur plusieurs tableaux. Il est nécessaire de fournir un « mode d'emploi », à savoir les instructions nécessaires pour l'instancier et l'utiliser dans des applications diverses.
Le dessin du canon peut être simplifié à l'extrême. Pour terminer le dessin, il restera alors à déterminer les coordonnées de l'autre extrémité de cette ligne. Il existe une propriété spécifique de cet angle qu'on appelle sinus de l'angle.
La classe devra comprendre au minimum un constructeur pour la fabrication des dessins, et une méthode permettant de modifier celui-ci à volonté pour ajuster l'angle de tir (l'inclinaison de la buse).
Lire aussi: Émoji pistolet : Entre histoire et débat
Dans la classe, la variable boss est utilisée. Pour tester cette nouvelle classe, nous ferons usage d'un widget Scale. Nous dessinons la buse d'abord, et le corps du canon ensuite.
Le prototype initial est fonctionnel, mais beaucoup trop rudimentaire. Il faut ajouter les lignes suivantes à la fin de la méthode constructeur pour préparer une variable d'instance qui servira d'interrupteur de l'animation et de définir certaines de ses caractéristiques.
L'obus partira de la bouche du canon avec une vitesse initiale et une orientation identique à celle de sa buse. Le mouvement horizontal est uniforme et le mouvement vertical est uniformément accéléré.
La méthode sera invoquée par appui sur un bouton. Il faut éviter les boucles d'animation parasites pour un déplacement souhaité.
La vitesse initiale de l'obus est choisie. Comme précédemment, le mouvement du boulet est la résultante d'un mouvement horizontal et d'un mouvement vertical. Ce mouvement dépend de sa vitesse initiale ainsi que son inclinaison (c'est-à-dire l'angle de tir) du canon.
Lire aussi: Implications Juridiques de l'Emoji Pistolet
L'animation est gérée par la méthode after(). Le mouvement vertical est uniformément accéléré. Il reste enfin à ajouter un bouton déclencheur dans la fenêtre principale.
L'étape suivante consiste à construire l'application proprement dite. Plusieurs de ces objets proviendront de classes préexistantes, bien entendu : ainsi le canevas, les boutons, etc. Chaque fois que nous pouvons identifier pour ces ensembles une fonctionnalité particulière, on peut se demander s'il faut créer de nouvelles classes.
On peut en effet imaginer d'augmenter le nombre de canons et donc de pupitres. Veuillez à présent analyser le script ci-dessous. La classe Application() remplace désormais le code de test des prototypes précédents.
Par rapport au prototype, trois paramètres ont été ajoutés à la méthode constructeur. L'id nous permet d'identifier chaque instance de la classe Canon() à l'aide d'un nom quelconque. Le paramètre sens permet de définir le sens d'un canon qui tire vers la droite (sens = 1) ou vers la gauche (sens = -1). Une référence est donc pour nous celle de l'application principale.
Cette méthode permet d'amener le canon dans un nouvel emplacement. Il est possible d'imaginer des jeux plus vastes, impliquant un nombre quelconque d'objets canons qui pourront apparaître et disparaître au fil des combats.
Lire aussi: Pistolet à eau emoji : décryptage et enjeux
Les méthodes suivantes permettent de déterminer si une cible a été touchée ou non. L'animation de l'obus est désormais traitée par deux méthodes complémentaires. Si une cible est touchée, on passe la variable self.anim à « fausse ». L'application dessine une « explosion » jaune, et la référence du canon touché est mémorisée. La correspondance visuelle entre les deux est assurée par l'adoption d'une couleur commune.
La fenêtre d'application est elle aussi un widget dérivé de Frame(). Cela permet d'effectuer ensuite divers traitements systématiques sur chacun d'eux (comme par exemple à la méthode suivante).
Plusieurs améliorations peuvent être apportées au jeu :
On peut créer une classe dérivée de la précédente, tout en lui conservant le même nom. La méthode définie ici porte le même nom qu'une méthode de la classe parente. Cela signifie qu'elle va remplacer celle-ci dans la nouvelle classe (on pourra dire également que la méthode deplacer() a été surchargée).
On obtient ce résultat en ajoutant un ou plusieurs paramètres, dont les valeurs par défaut forceront l'ancien comportement (ancien comportement de la méthode). Les déplacements demandés seront produits aléatoirement.
Les coordonnées résultantes seront renvoyées au programme appelant. Ainsi, cette classe peut aisément être dérivée et les objets peuvent être instanciés à partir d'une classe dérivée éventuelle.
Le « jeu » mis en œuvre ici est plutôt une sorte d'exercice mathématique. Il s'agit d'un quadrillage de dimensions variables, dont toutes les cases sont occupées par des pions. Lorsque l'on clique sur un pion à l'aide de la souris, les 8 pions adjacents se retournent.
L'exercice est très facile avec une grille de 2 × 2 cases (il suffit de cliquer sur chacun des 4 pions), mais il devient plus difficile avec des grilles plus grandes, et est même tout à fait impossible avec certaines d'entre elles.
L'application sera construite sur la base d'une fenêtre principale comportant le panneau de jeu et une barre de menus. Le panneau de jeu sera dessiné dans un canevas, lui-même installé dans un cadre (frame).
tags: #emoji #fusil #de #chasse #signification