Pacman : un petit kit de démarrage dans le graphisme en Java avec AWT & SWING

gamejava

Voici le premier article d’une série que j’espère pouvoir compléter sur la création de jeu en Java. Cette série ne comportera que les rudiments, les outils que vous utiliserez afin de créer vos jeux. Il y a bien longtemps, j’avais introduit SWING & AWT avec mon projet Ninn, laissé un peu de côté ces derniers temps. Je reviens ici sur SWING & AWT, pour vous présenter un petit programme assez sympa et rapide à réaliser : Pacman. Nous ne verrons pas comment coder le jeu entier, mais simplement dessiner la petite boule jaune morfale. Si vous arrivez à comprendre comment fonctionne ce code, vous pourrez alors par la suite créer votre propre jeu Pacman !🙂

 APERÇU DU RESULAT FINAL DISPONIBLE ICI :

Pacman

prebloc

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;

public class Pacman extends JFrame{

 private int compteur ;
 Color couleur1, couleur2;
 public int x=70;
 public int x1;

 public Pacman(String titre, int largeur,int hauteur,int posX,int posY) {
 super(titre);
 setSize( largeur, hauteur );
 setVisible( true );
 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 this.setLocation(posX,posY);
 couleur2 = Color.yellow;
 }

 public void animer (int nbr_mouvement){
 for (compteur=0; compteur<nbr_mouvement; compteur++) {
 this.repaint();
 try {
 Thread.sleep(100);
 }
 catch (InterruptedException e) {
 e.printStackTrace();
 }

 if(x1<300){
 x=x+10;
 x1=x;
 }else{
 x=x-10;
 x1=300;
 }
 }

 //on relance la méthode pour obtenir une boucle infinie !
 if(compteur==nbr_mouvement){
 compteur=0;
 x1=0;
 animer(48);
 }
 }

 public void paint (Graphics g){
 if (compteur%2==0){
 couleur1 = Color.yellow;
 }else{
 couleur1 = Color.white;
 }
 if(x1<300){
 g.setColor( Color.white);
 g.fillRect(0,0,500,500);
 g.setColor( couleur1);
 g.fillArc(x, 60, 50, 50,0, 360);
 g.setColor( couleur2);
 g.fillArc(x,60, 50, 50, 30, 280);
 g.setColor(Color.DARK_GRAY);
 g.fillArc(x+25, 65, 7,7,0, 360);
 }else{
 g.setColor( Color.white);
 g.fillRect(0,0,500,500);
 g.setColor( couleur1);
 g.fillArc(x, 60, 50, 50,0, 360);
 g.setColor( couleur2);
 g.fillArc(x, 60, 50, 50,140, -280);
 g.setColor(Color.DARK_GRAY);
 g.fillArc(x+25, 65, 7,7,0, 360);
 }
 }

 public static void main(String[] args) {
 Pacman animation = new Pacman("Pacman", 400, 165,200,150);
 animation.animer(48);
 }

}

Quelques explications s’imposent !:mrgreen: Tout d’abord nous travaillons avec SWING & AWT et nous avons besoin d’une JFrame. La JFrame permet de créer et gérer des objets de type cadres, fenêtres. C’est une sorte de conteneur pour les objets de type boutons, champs texte… Pour utiliser cela nous allons avoir besoin d’importer cet élément de la bibliothèque graphique SWING.

import javax.swing.JFrame;

Notre classe va hériter des propriétés, des méthodes et divers attributs de JFrame. Pour ça, on doit ajouter extends JFrame.

public class Pacman extends JFrame

Maintenant, détaillons en commençant avec les signatures :

public Pacman(String titre, int largeur,int hauteur,int posX,int posY)

Pacman est le constructeur, il permet de construire notre fenêtre dans son ensemble. Les attributs qu’on passe en arguments sont des caractéristiques propres à la création d’une fenêtre. De manière générale, pour créer une fenêtre nous devons créer un constructeur en suivant ce modèle :

public fenetre() {
	super("titre");//titre de la fenetre
	setSize( 900, 300 );//taille de la fenetre
	setVisible( true );//visibilite de la fenetre
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Pour fermer la fenetre
	this.setLocation(0,0);//position de la fenetre
}

Ici, dans notre code, on a passé en arguments les attributs afin de rendre le constructeur plus flexible. Je pourrais créer plein d’objets en y changeant les attributs :

public static void main(String[] args) {
	Pacman animation = new Pacman("Pacman", 400, 165,200,150);
	Pacman animation2 = new Pacman("Pacman2", 410, 150,200,150);//une autre fenetre aux dimensions différentes
	Pacman animation3 = new Pacman("Pacman3", 600, 175,200,150);//idem
        animation.animer(48);
}

(En rajoutant ces lignes, on créé trois fenêtres)

public void animer (int nbr_mouvement)

animer est une méthode void qui permet de faire tourner une boucle qui appelle, à chaque fois qu’on passe dans celle-ci, à la méthode qui dessine notre pacman. Le paramètre nbr_mouvement, permet de définir combien de fois nous afficherons pacman.

public void paint (Graphics g)

La méthode paint est propre à AWT et plus particulièrement à Graphics. Elle permet de dessiner… Des ronds, des rectangles…Vous pouvez consulter la javadoc d’Oracle à propos de Graphics.

C’est pour cette raison que nous importons des éléments de la bibliothèque AWT au tout début du programme :

import java.awt.Color;
import java.awt.Graphics;

Je vous laisse regarder cette doc, et bidouiller le programme afin de comprendre l’utilité de setColor(), fillRect(), fillArc() … Mais en gros, setColor() permet de définir la couleur de l’arrière-plan (blanc) et du pacman (jaune) , le  fillRect() nous permet ici de dessiner un rectangle plein, de couleur blanche, et le fillArc() le pacman. Pour dessiner notre pacman, j’ai délibérément choisi de le présenter à l’aide de deux disque, un disque plein jaune, et un quart de disque dont la couleur alternera :soit blanc, soit jaune. Le compteur permet d’alterner entre « pacman bouche ouverte » et « pacman bouche fermée » :


if (compteur%2==0){
couleur1 = Color.yellow;
}else{
couleur1 = Color.white;
}

Il existe bien sûr d’autres méthodes, par exemple deux disques jaunes un complet et un ouvert ou encore un seul disque donc l’angle d’ouverture change selon la valeur du compteur. Tout est possible !😀

Vous avez normalement toutes les données nécessaires pour refaire le pacman présenté en vidéo.

Prochainement, nous verrons comment bouger le pacman avec le clavier, puis si j’ai le temps nous nous pencherons sur les collisions (ex : pacman ne peut pas traverser le mur).  :)

P.S : WordPress a un peu de mal avec l’indentation, n’oubliez pas de  bien indenter votre code !😉

classicgames_64

Une réflexion sur “Pacman : un petit kit de démarrage dans le graphisme en Java avec AWT & SWING

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s