Cas pratique : programmer un Pong

Cas pratique : programmer un Pong

Vous disposez à présent des compétences nécessaires pour vous lancer dans la création d’un premier vrai petit jeu. Dans ce chapitre nous allons donc récrire le jeu mythique qu’est devenu Pong. Passage obligé du développeur amateur, ce projet a pour but de vous faire découvrir les pratiques en amont du développement d’un jeu vidéo, puis mettra directement en application toutes les notions découvertes précédemment.Avant toute chose, et ceci est valable même pour le jeu le plus basique qui soit, vous devez tout planifier. La plupart des projets, dans le monde du jeu vidéo ou ailleurs, échouent parce que cette phase de préparation a été négligée : certains arrivent à terme, mais fournissent un résultat différent de celui attendu, d’autres n’ont même pas cette chance. Même si l’exemple de ce chapitre a l’air simpliste, il vous permettra d’apprendre à prendre les choses en mains dès le début et de gagner du temps pour l’étape de développement.

Définir le principe du jeu

Le principe que nous allons implémenter est simple : il y a deux joueurs, chacun contrôlant une raquette. Les deux joueurs s’envoient une balle qui rebondit sur les bords haut et bas de l’écran. Si la balle touche la raquette d’un des deux joueurs, elle repart vers l’autre joueur, cependant, si elle manque la raquette, l’autre joueur gagne.L’arrière-plan du jeu pourrait être géré en créant un simple sprite, puisqu’il n’a pas de propriétés particulières. Cependant, pour factoriser le code de notre classe Game, nous implémenterons tout de même une classe qui lui sera dédiée. Cette classe dérivera de la classe DrawableGameComponent, qui hérite elle-même de la classe GameComponent et qui en plus implémente l’interface IDrawable, nous fournissant la méthode Draw().

L’arrière-plan du jeu pourrait être géré en créant un simple sprite, puisqu’il n’a pas de propriétés particulières. Cependant, pour factoriser le code de notre classe Game, nous implémenterons tout de même une classe qui lui sera dédiée. Cette classe dérivera de la classe DrawableGameComponent, qui hérite elle-même de la classe GameComponent et qui en plus implémente l’interface IDrawable, nous fournissant la méthode Draw(). Pour pouvoir dessiner l’arrière-plan, vous aurez besoin d’un SpriteBatch puisque vous ne disposez pas de celui présent dans la classe Pong. Ajoutez donc un champ de ce type que vous initialiserez dans la méthode Initialize(). Vous pouvez récupérer l’objet GraphicsDevice de la classe Pong en utilisant la propriété Game que met à disposition la classe parente.

Maintenant, vous devez ajouter une méthode Update() à cette classe. Passez-lui un objet GameTime en paramètre de manière à moduler la vitesse de déplacement des raquettes. Utilisez donc la classe ServiceHelper pour savoir si le joueur a appuyé sur une touche, si c’est le cas, vérifiez que la raquette n’est pas sur l’extrémité haute ou basse de l’écran avant de déplacer le sprite.Pour vérifier si la raquette est en haut ou en bas de l’écran, rappelez-vous que l’origine du repère à l’écran est située en haut à gauche (figure 5-4) et que la position d’un sprite correspond au coin supérieur gauche de l’image. Dans les calculs, il faut donc considérer que l’extrémité haute de l’écran se situe aux points de coordonnées (x ; 0) et l’extrémité basse aux points de coordonnées (y ; maxHeight – textureHeight).

Développement XNA pour la XBox et le PC

Il reste maintenant à tester les différents cas de figure : si la balle touche le haut de la fenêtre ou le bas, si elle entre en collision avec une raquette ou bien si elle a atteint les extrémités gauche ou droite de l’écran. Dans le cas d’une collision, on modifiera la direction.De retour dans la classe Pong, déclarez un objet de type Ball, chargez sa texture et dessinez- la. Ajoutez aussi un booléen et initialisez-le à false. La méthode Update() va légèrement se compliquer. Le programme devra attendre que le joueur appuie sur la barre d’espace avant de lancer la balle et rendre le mouvement des raquettes possible. Dans l’appel à la méthode Update() de la balle, vous devez passer une référence vers votre booléen. Ceci se fait grâce à l’instruction ref.

Les possibilités d’évolution sont vraiment nombreuses (création d’une intelligence artificielle, ajout de nouvelles balles, etc.), contentez-vous de laisser libre cours à votre imagination, mais gardez toujours à l’esprit que ce n’est pas la débauche de technique qui fait qu’un jeu est bon ou non, le gameplay est vraiment important !Dans ce chapitre, vous avez découvert que la phase de préparation (ou d’élaboration du cahier des charges) ne doit pas être oubliée. Vous avez ensuite mené à bien votre premier projet avec XNA, découvrant au passage comment créer un DrawableComponent et gérer les collisions de façon primitive.

Cours gratuitTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *