Envie de participer ?
Bandeau

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.

Analyse Préalable et Cahier des Charges

Lors du développement d'un projet de programmation, il est essentiel d'établir un cahier des charges détaillé. Une étude préalable est très importante, car il ne faut pas partir d'une vague idée, en négligeant de rechercher la structure d'ensemble. De toute façon, il faudra mettre en place cette structure tôt ou tard.

Le résultat de cette analyse doit être retranscrit dans un ensemble de documents (schémas, plans, descriptions) qui constitueront le cahier des charges. Il n'est pas possible de décrire ici l'analyse tout à fait complète d'un projet de programmation, car ces sujets font l'objet de livres entiers.

Vous vivrez certainement vous-même des cheminements similaires à celui qui est décrit ci-dessous. Le dessin préliminaire reproduit est l'une des formes que peut prendre votre travail d'analyse.

Développement d'un Prototype Fonctionnel

Il n'est pas encore question ici de programmer le jeu proprement dit, mais plutôt de vérifier si le concept « tient la route » en réalisant un premier prototype fonctionnel.

Lire aussi: Application Peinture Aspect Canon de Fusil

Création d'une Classe Canon

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).

Exemple de Code pour la Classe Canon

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. Ainsi, une partie de la buse reste cachée.

Les angles sont comptés à partir de l'horizontale.

Lire aussi: Comment Fileter un Canon

Amélioration du Prototype

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é.

Méthode de Tir et Animation

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.

L'animation est gérée par la méthode after(). Le mouvement vertical est uniformément accéléré. Il est conseillé d'augmenter la lisibilité de votre code en séparant les noms des variables en deux parties par une majuscule.

Lire aussi: Le Canon de Fusil de Chasse

Il reste enfin à ajouter un bouton déclencheur dans la fenêtre principale.

Construction de l'Application

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. Certainement.

La classe Application() remplace désormais le code de test des prototypes précédents. On peut en effet imaginer d'augmenter le nombre de canons et donc de pupitres. Veuillez à présent analyser le script ci-dessous.

Paramètres et Références

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.

Méthodes et Fonctionnalités Avancées

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. 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).

Améliorations Possibles

Plusieurs améliorations peuvent être apportées au jeu :

  1. Mieux paramétrer l'application : la taille de la fenêtre est prédéterminée (400 × 250 pixels). Il serait préférable que cette valeur soit définie en un seul endroit, ce qui éviterait de nombreuses modifications si nous ajoutons encore d'autres fonctionnalités.
  2. Après chaque tir, provoquer un déplacement aléatoire des canons, en redéfinissant leurs coordonnées au hasard. Pour ce faire, il suffit de retravailler la méthode deplacer() de la classe Canon().
  3. Mettre en place un système pour forcer les joueurs à tirer à tour de rôle. Cette question ne sera pas abordée ici.

Dérivation de Classe et Surcharge de Méthode

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.

Exemple d'un Programme Complet

Vous trouverez ci-dessous le script correspondant à un petit programme complet. Il est possible d'envisager de développer vous-même ce programme comme projet personnel de synthèse, en utilisant plusieurs classes afin de construire un script bien structuré.

Autre Jeu Possible : Retournement de Pions

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.

Construction de l'Application

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). Il faut lier au canevas une méthode-gestionnaire pour l'événement afin de gérer le clic de souris, quelles que soient les dimensions de cette grille.

tags: #jeu #tir #au #canon #definition

Post popolari: