SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
Rapport de projet

               LE JEU DE
               SERPENT


    Réalisé par :
         AIT TALGHALIT Hicham
         IRIFI Faiçal
         ZAKI Simohamed
    Encadré par :
         GHENNOU Mohamed




1
Remerciements


          Nous tenons tout particulièrement à remercier M. Mohamed
    GHENNOU, notre encadreur, qui nous a aidé à comprendre le cours
    de java en fournissant beaucoup d'efforts.


          Merci    également à l’ensemble du corps enseignant pour
    l’encadrement des projets de troisième année, qui nous permet de
    découvrir la gestion de projets, le travail en groupe et les moyens de
    communications mis en œuvre.


          Et enfin nous adressons   nos remerciements et notre respect à
    nos parents qui sont la cause que nous soyons ici.




2
Sommaire



    Introduction
    1- Le jeu de serpent
    2- La stratégie à suivre
    3- Les classes du jeu
    Conclusion




3
Introduction

          Swing permet de concevoir des interfaces graphiques en Java.
    C'est une librairie fournie avec la JDK (Java Developpement Kit).


          Mais Swing n'est pas la première librairie graphique à proposer
    des composants. En fait c'est la deuxième bibliothèque de classes, après
    AWT, qui permet de créer une Interface Utilisateur et de la gérer. La
    procédure de construction d’une interface Swing est similaire à celle
    d’AWT : créer un cadre, des composants dans un cadre, une mise en
    page pour ces composants dans ce cadre, des méthodes en réponse aux
    actions de l’utilisateur.


          On peut donc considérer que Swing est une évolution d'AWT,
    une des principales différentes est que les noms des composants de
    Swing commencent par un J.



          Alors pour bien exploiter les composants swing nous avons créer
    un jeu de serpent afin de montrer comment charger des images et
    travailler avec le Timer, et pour bien exploiter les composants AWT
    nous avons utilisé des évènements, des couleurs et Font ...etc.




4
1- Le jeu de serpent


        Jeu de serpent est un jeu vidéo plus ancienne
    classique. Il a été créé en fin des années 70.
    Plus tard, il a été porté à PC. Dans ce jeu, le
    joueur contrôle un serpent. L'objectif est de
    manger autant de pommes que possible.
    Chaque fois que le serpent mange une pomme,
    son corps se développe. Le serpent doit éviter les
    murs et son propre corps. Ce jeu est parfois
    appelé Snake ou Nibbles.




5
2- La stratégie à suivre


       La taille de chacune des articulations
    d'un serpent est 10px. Le serpent est
    contrôlé par les touches de curseur.
    Initialement, le serpent a trois
    articulations. Le jeu est lancé en
    appuyant sur une des touches de curseur.
    Si le jeu est fini, nous affichons Game
    Over message dans le milieu de la
    Commission.




6
3- Les classes de jeu

    Board.java
    package chamhi;

    import   java.awt.Color;
    import   java.awt.Font;
    import   java.awt.FontMetrics;
    import   java.awt.Graphics;
    import   java.awt.Image;
    import   java.awt.Toolkit;
    import   java.awt.event.ActionEvent;
    import   java.awt.event.ActionListener;
    import   java.awt.event.KeyAdapter;
    import   java.awt.event.KeyEvent;

    import javax.swing.ImageIcon;
    import javax.swing.JPanel;
    import javax.swing.Timer;

    public class Board extends JPanel implements ActionListener {

        private   final   int   WIDTH = 300;
        private   final   int   HEIGHT = 300;
        private   final   int   DOT_SIZE = 10;
        private   final   int   ALL_DOTS = 900;
        private   final   int   RAND_POS = 29;
        private   final   int   DELAY = 140;

        private int x[] = new int[ALL_DOTS];
        private int y[] = new int[ALL_DOTS];

        private int dots;
        private int apple_x;
        private int apple_y;

        private   boolean   left = false;
        private   boolean   right = true;
        private   boolean   up = false;
        private   boolean   down = false;
        private   boolean   inGame = true;

        private   Timer   timer;
        private   Image   ball;
        private   Image   apple;
        private   Image   head;

        public Board() {
            addKeyListener(new TAdapter());

             setBackground(Color.black);


7
ImageIcon iib = new
    ImageIcon(this.getClass().getResource("dot.png"));
            ball = iib.getImage();

            ImageIcon iia = new
    ImageIcon(this.getClass().getResource("apple.png"));
            apple = iia.getImage();

            ImageIcon iih = new
    ImageIcon(this.getClass().getResource("head.png"));
            head = iih.getImage();

           setFocusable(true);
           initGame();
       }


       public void initGame() {

           dots = 3;

           for (int z = 0; z < dots; z++) {
               x[z] = 50 - z*10;
               y[z] = 50;
           }

           locateApple();

           timer = new Timer(DELAY, this);
           timer.start();
       }

       public void paint(Graphics g) {
           super.paint(g);

           if (inGame) {
               g.drawImage(apple, apple_x, apple_y, this);

               for (int z = 0; z < dots; z++) {
                   if (z == 0)
                        g.drawImage(head, x[z], y[z], this);
                   else
                     g.drawImage(ball, x[z], y[z], this);
               }

               Toolkit.getDefaultToolkit().sync();
               g.dispose();

           } else {
               gameOver(g);
           }
       }

       public void gameOver(Graphics g) {
           String msg = "Game Over";
           Font small = new Font("Helvetica", Font.BOLD, 14);
           FontMetrics metr = this.getFontMetrics(small);

           g.setColor(Color.white);
           g.setFont(small);


8
g.drawString(msg, (WIDTH - metr.stringWidth(msg)) / 2,
                      HEIGHT / 2);
    }

    public void checkApple() {
        if ((x[0] == apple_x) && (y[0] == apple_y)) {
            dots++;
            locateApple();
        }
    }

    public void move() {

         for (int z = dots; z > 0; z--) {
             x[z] = x[(z - 1)];
             y[z] = y[(z - 1)];
         }

         if (left)
             x[0] -= DOT_SIZE;

         if (right)
             x[0] += DOT_SIZE;

         if (up)
             y[0] -= DOT_SIZE;

         if (down)
             y[0] += DOT_SIZE;

    }

    public void checkCollision() {

        for (int z = dots; z > 0; z--)

            if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z]))
                inGame = false;


        if (y[0] > HEIGHT)
            inGame = false;

        if (y[0] < 0)
            nGame = false;

        if (x[0] > WIDTH)
            inGame = false;

        if (x[0] < 0)
            inGame = false;

    }

    public void locateApple() {
        int r = (int) (Math.random() * RAND_POS);
        apple_x = ((r * DOT_SIZE));
        r = (int) (Math.random() * RAND_POS);
        apple_y = ((r * DOT_SIZE));
    }



9
public void actionPerformed(ActionEvent e) {
             if (inGame) {
                 checkApple();
                 checkCollision();
                 move();
             }

             repaint();
         }

         private class TAdapter extends KeyAdapter {

             public void keyPressed(KeyEvent e) {

                 int key = e.getKeyCode();

                 if ((key   == KeyEvent.VK_LEFT) && (!right)) {
                     left   = true;
                     up =   false;
                     down   = false;
                 }

                 if ((key == KeyEvent.VK_RIGHT) && (!left)) {
                     right = true;
                     up = false;
                     down = false;
                 }

                 if ((key == KeyEvent.VK_UP) && (!down)) {
                     up = true;
                     right = false;
                     left = false;
                 }

                 if ((key == KeyEvent.VK_DOWN) && (!up)) {
                     down = true;
                     right = false;
                     left = false;
                 }
             }
         }
     }




10
Nous allons d'abord définir les constantes utilisées dans notre jeu.

          private   final   int   WIDTH = 300;
          private   final   int   HEIGHT = 300;
          private   final   int   DOT_SIZE = 10;
          private   final   int   ALL_DOTS = 900;
          private   final   int   RAND_POS = 29;
          private   final   int   DELAY = 140;




     Les constantes de WIDTH et HEIGHT déterminer la taille du
     conseil d'administration. Le DOT_SIZE est la taille de la pomme et le
     point du serpent. Le ALL_DOTS constante définit le nombre maximal
     de points possibles au sein du Conseil. (900 = 300 * 300/10 * 10) Le
     RAND_POS constante est utilisée pour calculer une position
     aléatoire d'une pomme. Le retard constant détermine la vitesse du jeu.



          private int x[] = new int[ALL_DOTS];
          private int y[] = new int[ALL_DOTS];



     Ces deux tableaux stocker les coordonnées x, y de toutes les
     articulations d'un serpent.


     Dans la méthode move () nous avons l'algorithme à clé de la partie. Pour le
     comprendre, regardez comment le serpent est en mouvement. Vous contrôlez
     la tête du serpent. Vous pouvez changer sa direction avec les touches de
     curseur. Le reste des articulations se déplacer d'une position dans la chaîne.
     La deuxième articulation se déplace là où la première a été, la troisième
     articulation où le deuxième a été etc.



            for (int z = dots; z > 0; z--) {
                 x[z] = x[(z - 1)];
                 y[z] = y[(z - 1)];
            }




11
Ce code déplace les articulations de la chaîne.
              if (left)
                  x[0] -= DOT_SIZE;



     Déplacer la tête vers la gauche.


     Dans le checkCollision () la méthode, nous déterminons si le serpent s'est
     frappé ou l'un des murs.
              for (int z = dots; z > 0; z--)
                 if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z]))
                      inGame = false;




     Terminez le jeu, si le serpent frappe une de ses articulations avec la tête.
              if (y[0] > HEIGHT)
                  nGame = false;


     Terminez le jeu, si les coups de serpent au bas de la Commission .




12
Snake.java
     package chamhi;

     import javax.swing.JFrame;

     public class Snake extends JFrame {

         public Snake() {

              add(new Board());
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              setSize(320, 340);
              setLocationRelativeTo(null);
              setTitle("Snake Game V1.0");

              setResizable(false);
              setVisible(true);
         }

         public static void main(String[] args) {
             new Snake();
         }
     }



     C'est la class main.




13
Conclusion


         Et voilà maintenant vous avez un petit jeu,
     vraiment c’est un jeu très simple et un peu
     compliqué si on le fait avec ses vraies conditions.


         Parmi    les problèmes qui nous avons
     découvert, c'est d'avoir une arrière plan mobile
     avec des bulles colorées qui apparaissent au
     hasard et disparaissent à l'écran.




14

Más contenido relacionado

La actualidad más candente

Implémentation et mise en place d’un système décisionnel pour la solution Meg...
Implémentation et mise en place d’un système décisionnel pour la solution Meg...Implémentation et mise en place d’un système décisionnel pour la solution Meg...
Implémentation et mise en place d’un système décisionnel pour la solution Meg...Houssem Eddine Jebri
 
Rapport PFE BIAT Conception et mise en place d’une plate-forme de gestion des...
Rapport PFE BIAT Conception et mise en place d’une plate-forme de gestion des...Rapport PFE BIAT Conception et mise en place d’une plate-forme de gestion des...
Rapport PFE BIAT Conception et mise en place d’une plate-forme de gestion des...Yasmine Lachheb
 
Rapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammamiRapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammamiDonia Hammami
 
RapportPFE_IngenieurInformatique_ESPRIT
RapportPFE_IngenieurInformatique_ESPRITRapportPFE_IngenieurInformatique_ESPRIT
RapportPFE_IngenieurInformatique_ESPRITLina Meddeb
 
Présentation PFE Computer Vision
Présentation PFE Computer VisionPrésentation PFE Computer Vision
Présentation PFE Computer VisionRihab Ben Rhouma
 
Rapport de projet de fin d"études
Rapport de projet de fin d"étudesRapport de projet de fin d"études
Rapport de projet de fin d"étudesMohamed Boubaya
 
Projet Bi - 3 - Alimentation des données
Projet Bi - 3 - Alimentation des donnéesProjet Bi - 3 - Alimentation des données
Projet Bi - 3 - Alimentation des donnéesJean-Marc Dupont
 
Rapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilelRapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilelBelwafi Bilel
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence Yassine Badri
 
Rapport jeu en JAVA
Rapport jeu en JAVARapport jeu en JAVA
Rapport jeu en JAVAAhmed WAFDI
 
Rapport pfe-ayoub mkharbach
Rapport pfe-ayoub mkharbachRapport pfe-ayoub mkharbach
Rapport pfe-ayoub mkharbachAyoub Mkharbach
 
Les projets d'automatisation
Les projets d'automatisationLes projets d'automatisation
Les projets d'automatisationGimélec
 
Rapport de stage de fin d'études ISI 2015
Rapport de stage de fin d'études ISI 2015Rapport de stage de fin d'études ISI 2015
Rapport de stage de fin d'études ISI 2015Anouar Kacem
 
Rapport de stage PFE ( DUT) chez Synthèse Conseil - Jaiti Mohammed
Rapport de stage PFE ( DUT) chez Synthèse Conseil  - Jaiti MohammedRapport de stage PFE ( DUT) chez Synthèse Conseil  - Jaiti Mohammed
Rapport de stage PFE ( DUT) chez Synthèse Conseil - Jaiti MohammedMohammed JAITI
 
Rapport de Projet de Fin d'étude .
Rapport de Projet de Fin d'étude .Rapport de Projet de Fin d'étude .
Rapport de Projet de Fin d'étude .Oussama Ben Sghaier
 
Business Intelligence Reporting Solution
Business Intelligence Reporting Solution Business Intelligence Reporting Solution
Business Intelligence Reporting Solution Imad ALILAT
 

La actualidad más candente (20)

Chap1 2 dw (1)
Chap1 2 dw (1)Chap1 2 dw (1)
Chap1 2 dw (1)
 
Implémentation et mise en place d’un système décisionnel pour la solution Meg...
Implémentation et mise en place d’un système décisionnel pour la solution Meg...Implémentation et mise en place d’un système décisionnel pour la solution Meg...
Implémentation et mise en place d’un système décisionnel pour la solution Meg...
 
Rapport PFE
Rapport PFERapport PFE
Rapport PFE
 
Rapport PFE BIAT Conception et mise en place d’une plate-forme de gestion des...
Rapport PFE BIAT Conception et mise en place d’une plate-forme de gestion des...Rapport PFE BIAT Conception et mise en place d’une plate-forme de gestion des...
Rapport PFE BIAT Conception et mise en place d’une plate-forme de gestion des...
 
Rapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammamiRapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammami
 
RapportPFE_IngenieurInformatique_ESPRIT
RapportPFE_IngenieurInformatique_ESPRITRapportPFE_IngenieurInformatique_ESPRIT
RapportPFE_IngenieurInformatique_ESPRIT
 
Présentation PFE Computer Vision
Présentation PFE Computer VisionPrésentation PFE Computer Vision
Présentation PFE Computer Vision
 
PROJET JAVA BD MySQL
PROJET JAVA BD MySQLPROJET JAVA BD MySQL
PROJET JAVA BD MySQL
 
Rapport de projet de fin d"études
Rapport de projet de fin d"étudesRapport de projet de fin d"études
Rapport de projet de fin d"études
 
Projet Bi - 3 - Alimentation des données
Projet Bi - 3 - Alimentation des donnéesProjet Bi - 3 - Alimentation des données
Projet Bi - 3 - Alimentation des données
 
Rapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilelRapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilel
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence
 
Belwafi bilel
Belwafi bilelBelwafi bilel
Belwafi bilel
 
Rapport jeu en JAVA
Rapport jeu en JAVARapport jeu en JAVA
Rapport jeu en JAVA
 
Rapport pfe-ayoub mkharbach
Rapport pfe-ayoub mkharbachRapport pfe-ayoub mkharbach
Rapport pfe-ayoub mkharbach
 
Les projets d'automatisation
Les projets d'automatisationLes projets d'automatisation
Les projets d'automatisation
 
Rapport de stage de fin d'études ISI 2015
Rapport de stage de fin d'études ISI 2015Rapport de stage de fin d'études ISI 2015
Rapport de stage de fin d'études ISI 2015
 
Rapport de stage PFE ( DUT) chez Synthèse Conseil - Jaiti Mohammed
Rapport de stage PFE ( DUT) chez Synthèse Conseil  - Jaiti MohammedRapport de stage PFE ( DUT) chez Synthèse Conseil  - Jaiti Mohammed
Rapport de stage PFE ( DUT) chez Synthèse Conseil - Jaiti Mohammed
 
Rapport de Projet de Fin d'étude .
Rapport de Projet de Fin d'étude .Rapport de Projet de Fin d'étude .
Rapport de Projet de Fin d'étude .
 
Business Intelligence Reporting Solution
Business Intelligence Reporting Solution Business Intelligence Reporting Solution
Business Intelligence Reporting Solution
 

Destacado

2013 2015.pptx construire ensemble la victoire marc lepesqueux route du rhum
2013 2015.pptx construire ensemble la victoire marc lepesqueux route du rhum2013 2015.pptx construire ensemble la victoire marc lepesqueux route du rhum
2013 2015.pptx construire ensemble la victoire marc lepesqueux route du rhumElisabeth Burnouf
 
Power point projet carrières
Power point projet carrièresPower point projet carrières
Power point projet carrièresisaleb11
 
Cefq conférence agile mindset
Cefq   conférence agile mindsetCefq   conférence agile mindset
Cefq conférence agile mindsetCEFQ
 
ARDENNE : Etonner, enchanter
ARDENNE : Etonner, enchanterARDENNE : Etonner, enchanter
ARDENNE : Etonner, enchanterPascal Rodrigues
 
Diagnostic numérique pays bocage, dern version
Diagnostic numérique pays bocage, dern versionDiagnostic numérique pays bocage, dern version
Diagnostic numérique pays bocage, dern versionSandrine Vendee Bocage
 
Operation Cheesestorm (extraits)
Operation Cheesestorm (extraits)Operation Cheesestorm (extraits)
Operation Cheesestorm (extraits)ManiDB
 
Portfolio nicolas scharff 2014
Portfolio nicolas scharff 2014Portfolio nicolas scharff 2014
Portfolio nicolas scharff 2014nicolasscharff
 
ServicesEnGares_GareduFutur SP [Compatibility Mode]
ServicesEnGares_GareduFutur SP [Compatibility Mode]ServicesEnGares_GareduFutur SP [Compatibility Mode]
ServicesEnGares_GareduFutur SP [Compatibility Mode]Svetlana POPOVA
 
Les Français, les élections municipales et l'étiquette politique du maire (LCP)
Les Français, les élections municipales et l'étiquette politique du maire (LCP)Les Français, les élections municipales et l'étiquette politique du maire (LCP)
Les Français, les élections municipales et l'étiquette politique du maire (LCP)LCP Assemblée nationale
 
Cours mecasol 0_2
Cours mecasol 0_2Cours mecasol 0_2
Cours mecasol 0_2kahinarouam
 
Les francais les elections municipales et les depenses de leur commune (lcp)
Les francais les elections municipales et les depenses de leur commune (lcp)Les francais les elections municipales et les depenses de leur commune (lcp)
Les francais les elections municipales et les depenses de leur commune (lcp)LCP Assemblée nationale
 
La mob, ça va? Politique et mobilisation, c’est possible!
La mob, ça va? Politique et mobilisation, c’est possible!La mob, ça va? Politique et mobilisation, c’est possible!
La mob, ça va? Politique et mobilisation, c’est possible!La Marie Debout, Centre de femmes
 
Festi Santé 2014 Guide de prévention
Festi Santé 2014 Guide de prévention Festi Santé 2014 Guide de prévention
Festi Santé 2014 Guide de prévention Ireps
 
Hépatite B - Ce qu'il faut savoir
Hépatite B - Ce qu'il faut savoirHépatite B - Ce qu'il faut savoir
Hépatite B - Ce qu'il faut savoirManioums
 
Cp b mie-global-socialmedia_03092012(3)
Cp b mie-global-socialmedia_03092012(3)Cp b mie-global-socialmedia_03092012(3)
Cp b mie-global-socialmedia_03092012(3)djaz B.
 

Destacado (20)

2013 2015.pptx construire ensemble la victoire marc lepesqueux route du rhum
2013 2015.pptx construire ensemble la victoire marc lepesqueux route du rhum2013 2015.pptx construire ensemble la victoire marc lepesqueux route du rhum
2013 2015.pptx construire ensemble la victoire marc lepesqueux route du rhum
 
Power point projet carrières
Power point projet carrièresPower point projet carrières
Power point projet carrières
 
20140306 stats mesuelles site public
20140306 stats mesuelles site public20140306 stats mesuelles site public
20140306 stats mesuelles site public
 
Cefq conférence agile mindset
Cefq   conférence agile mindsetCefq   conférence agile mindset
Cefq conférence agile mindset
 
ARDENNE : Etonner, enchanter
ARDENNE : Etonner, enchanterARDENNE : Etonner, enchanter
ARDENNE : Etonner, enchanter
 
Contamination des nappes
Contamination des nappesContamination des nappes
Contamination des nappes
 
Diagnostic numérique pays bocage, dern version
Diagnostic numérique pays bocage, dern versionDiagnostic numérique pays bocage, dern version
Diagnostic numérique pays bocage, dern version
 
Operation Cheesestorm (extraits)
Operation Cheesestorm (extraits)Operation Cheesestorm (extraits)
Operation Cheesestorm (extraits)
 
Portfolio nicolas scharff 2014
Portfolio nicolas scharff 2014Portfolio nicolas scharff 2014
Portfolio nicolas scharff 2014
 
ServicesEnGares_GareduFutur SP [Compatibility Mode]
ServicesEnGares_GareduFutur SP [Compatibility Mode]ServicesEnGares_GareduFutur SP [Compatibility Mode]
ServicesEnGares_GareduFutur SP [Compatibility Mode]
 
Portefeuille Investessor 2013
Portefeuille Investessor 2013Portefeuille Investessor 2013
Portefeuille Investessor 2013
 
Les Français, les élections municipales et l'étiquette politique du maire (LCP)
Les Français, les élections municipales et l'étiquette politique du maire (LCP)Les Français, les élections municipales et l'étiquette politique du maire (LCP)
Les Français, les élections municipales et l'étiquette politique du maire (LCP)
 
Cours mecasol 0_2
Cours mecasol 0_2Cours mecasol 0_2
Cours mecasol 0_2
 
Les francais les elections municipales et les depenses de leur commune (lcp)
Les francais les elections municipales et les depenses de leur commune (lcp)Les francais les elections municipales et les depenses de leur commune (lcp)
Les francais les elections municipales et les depenses de leur commune (lcp)
 
La mob, ça va? Politique et mobilisation, c’est possible!
La mob, ça va? Politique et mobilisation, c’est possible!La mob, ça va? Politique et mobilisation, c’est possible!
La mob, ça va? Politique et mobilisation, c’est possible!
 
Programmation de l'automne 2012
Programmation de l'automne 2012Programmation de l'automne 2012
Programmation de l'automne 2012
 
Festi Santé 2014 Guide de prévention
Festi Santé 2014 Guide de prévention Festi Santé 2014 Guide de prévention
Festi Santé 2014 Guide de prévention
 
Hépatite B - Ce qu'il faut savoir
Hépatite B - Ce qu'il faut savoirHépatite B - Ce qu'il faut savoir
Hépatite B - Ce qu'il faut savoir
 
Cp b mie-global-socialmedia_03092012(3)
Cp b mie-global-socialmedia_03092012(3)Cp b mie-global-socialmedia_03092012(3)
Cp b mie-global-socialmedia_03092012(3)
 
Calendrier, perception des cycles du temps
Calendrier, perception des cycles du tempsCalendrier, perception des cycles du temps
Calendrier, perception des cycles du temps
 

Similar a jeu de serpent (Snake)

Good or Evil: les fonctions anonymes en Javascript
Good or Evil: les fonctions anonymes en JavascriptGood or Evil: les fonctions anonymes en Javascript
Good or Evil: les fonctions anonymes en JavascriptNoirdes
 
jQuery — fonctionnalités avancées
jQuery — fonctionnalités avancéesjQuery — fonctionnalités avancées
jQuery — fonctionnalités avancéesRémi Prévost
 
Godot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutantGodot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutantAntho Cardinale
 
Javascript #4.1 : fonctions for noobs
Javascript #4.1 : fonctions for noobsJavascript #4.1 : fonctions for noobs
Javascript #4.1 : fonctions for noobsJean Michel
 
Monogame Introduction (FR)
Monogame Introduction (FR)Monogame Introduction (FR)
Monogame Introduction (FR)Aloïs Deniel
 
Algea - 01 - hero
Algea - 01 - heroAlgea - 01 - hero
Algea - 01 - heroYann Caron
 
Wygday 2011 - C#5 Async CTP - Reactive Extensions
Wygday 2011  - C#5 Async CTP - Reactive ExtensionsWygday 2011  - C#5 Async CTP - Reactive Extensions
Wygday 2011 - C#5 Async CTP - Reactive Extensionswyggio
 
Corrigé langage c
Corrigé langage cCorrigé langage c
Corrigé langage ccoursuniv
 
Javascript #3 : boucles & conditions
Javascript #3 : boucles & conditionsJavascript #3 : boucles & conditions
Javascript #3 : boucles & conditionsJean Michel
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2moisko
 
Javascript #4.2 : fonctions for pgm
Javascript #4.2 : fonctions for pgmJavascript #4.2 : fonctions for pgm
Javascript #4.2 : fonctions for pgmJean Michel
 
cours-5.1.pdf
cours-5.1.pdfcours-5.1.pdf
cours-5.1.pdfGonnaBe1
 
Support tutoriel : Créer votre jeu en HTML5
Support tutoriel : Créer votre jeu en HTML5Support tutoriel : Créer votre jeu en HTML5
Support tutoriel : Créer votre jeu en HTML5SmartnSkilled
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la viecluelessjoe
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage Ccoursuniv
 
Scala IO 2017 : Probabilités fonctionnelles
Scala IO 2017 : Probabilités fonctionnellesScala IO 2017 : Probabilités fonctionnelles
Scala IO 2017 : Probabilités fonctionnellesSamy Zarour
 

Similar a jeu de serpent (Snake) (20)

Good or Evil: les fonctions anonymes en Javascript
Good or Evil: les fonctions anonymes en JavascriptGood or Evil: les fonctions anonymes en Javascript
Good or Evil: les fonctions anonymes en Javascript
 
Algo poo ts
Algo poo tsAlgo poo ts
Algo poo ts
 
jQuery — fonctionnalités avancées
jQuery — fonctionnalités avancéesjQuery — fonctionnalités avancées
jQuery — fonctionnalités avancées
 
Godot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutantGodot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutant
 
Javascript #4.1 : fonctions for noobs
Javascript #4.1 : fonctions for noobsJavascript #4.1 : fonctions for noobs
Javascript #4.1 : fonctions for noobs
 
Compte rendu jess
Compte rendu jessCompte rendu jess
Compte rendu jess
 
Monogame Introduction (FR)
Monogame Introduction (FR)Monogame Introduction (FR)
Monogame Introduction (FR)
 
Algea - 01 - hero
Algea - 01 - heroAlgea - 01 - hero
Algea - 01 - hero
 
Wygday 2011 - C#5 Async CTP - Reactive Extensions
Wygday 2011  - C#5 Async CTP - Reactive ExtensionsWygday 2011  - C#5 Async CTP - Reactive Extensions
Wygday 2011 - C#5 Async CTP - Reactive Extensions
 
Rapport tp RSA
Rapport  tp  RSARapport  tp  RSA
Rapport tp RSA
 
Corrigé langage c
Corrigé langage cCorrigé langage c
Corrigé langage c
 
Javascript #3 : boucles & conditions
Javascript #3 : boucles & conditionsJavascript #3 : boucles & conditions
Javascript #3 : boucles & conditions
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2
 
Javascript #4.2 : fonctions for pgm
Javascript #4.2 : fonctions for pgmJavascript #4.2 : fonctions for pgm
Javascript #4.2 : fonctions for pgm
 
cours-5.1.pdf
cours-5.1.pdfcours-5.1.pdf
cours-5.1.pdf
 
Support tutoriel : Créer votre jeu en HTML5
Support tutoriel : Créer votre jeu en HTML5Support tutoriel : Créer votre jeu en HTML5
Support tutoriel : Créer votre jeu en HTML5
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la vie
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage C
 
Scala IO 2017 : Probabilités fonctionnelles
Scala IO 2017 : Probabilités fonctionnellesScala IO 2017 : Probabilités fonctionnelles
Scala IO 2017 : Probabilités fonctionnelles
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 

jeu de serpent (Snake)

  • 1. Rapport de projet LE JEU DE SERPENT Réalisé par : AIT TALGHALIT Hicham IRIFI Faiçal ZAKI Simohamed Encadré par : GHENNOU Mohamed 1
  • 2. Remerciements Nous tenons tout particulièrement à remercier M. Mohamed GHENNOU, notre encadreur, qui nous a aidé à comprendre le cours de java en fournissant beaucoup d'efforts. Merci également à l’ensemble du corps enseignant pour l’encadrement des projets de troisième année, qui nous permet de découvrir la gestion de projets, le travail en groupe et les moyens de communications mis en œuvre. Et enfin nous adressons nos remerciements et notre respect à nos parents qui sont la cause que nous soyons ici. 2
  • 3. Sommaire Introduction 1- Le jeu de serpent 2- La stratégie à suivre 3- Les classes du jeu Conclusion 3
  • 4. Introduction Swing permet de concevoir des interfaces graphiques en Java. C'est une librairie fournie avec la JDK (Java Developpement Kit). Mais Swing n'est pas la première librairie graphique à proposer des composants. En fait c'est la deuxième bibliothèque de classes, après AWT, qui permet de créer une Interface Utilisateur et de la gérer. La procédure de construction d’une interface Swing est similaire à celle d’AWT : créer un cadre, des composants dans un cadre, une mise en page pour ces composants dans ce cadre, des méthodes en réponse aux actions de l’utilisateur. On peut donc considérer que Swing est une évolution d'AWT, une des principales différentes est que les noms des composants de Swing commencent par un J. Alors pour bien exploiter les composants swing nous avons créer un jeu de serpent afin de montrer comment charger des images et travailler avec le Timer, et pour bien exploiter les composants AWT nous avons utilisé des évènements, des couleurs et Font ...etc. 4
  • 5. 1- Le jeu de serpent Jeu de serpent est un jeu vidéo plus ancienne classique. Il a été créé en fin des années 70. Plus tard, il a été porté à PC. Dans ce jeu, le joueur contrôle un serpent. L'objectif est de manger autant de pommes que possible. Chaque fois que le serpent mange une pomme, son corps se développe. Le serpent doit éviter les murs et son propre corps. Ce jeu est parfois appelé Snake ou Nibbles. 5
  • 6. 2- La stratégie à suivre La taille de chacune des articulations d'un serpent est 10px. Le serpent est contrôlé par les touches de curseur. Initialement, le serpent a trois articulations. Le jeu est lancé en appuyant sur une des touches de curseur. Si le jeu est fini, nous affichons Game Over message dans le milieu de la Commission. 6
  • 7. 3- Les classes de jeu Board.java package chamhi; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.ImageIcon; import javax.swing.JPanel; import javax.swing.Timer; public class Board extends JPanel implements ActionListener { private final int WIDTH = 300; private final int HEIGHT = 300; private final int DOT_SIZE = 10; private final int ALL_DOTS = 900; private final int RAND_POS = 29; private final int DELAY = 140; private int x[] = new int[ALL_DOTS]; private int y[] = new int[ALL_DOTS]; private int dots; private int apple_x; private int apple_y; private boolean left = false; private boolean right = true; private boolean up = false; private boolean down = false; private boolean inGame = true; private Timer timer; private Image ball; private Image apple; private Image head; public Board() { addKeyListener(new TAdapter()); setBackground(Color.black); 7
  • 8. ImageIcon iib = new ImageIcon(this.getClass().getResource("dot.png")); ball = iib.getImage(); ImageIcon iia = new ImageIcon(this.getClass().getResource("apple.png")); apple = iia.getImage(); ImageIcon iih = new ImageIcon(this.getClass().getResource("head.png")); head = iih.getImage(); setFocusable(true); initGame(); } public void initGame() { dots = 3; for (int z = 0; z < dots; z++) { x[z] = 50 - z*10; y[z] = 50; } locateApple(); timer = new Timer(DELAY, this); timer.start(); } public void paint(Graphics g) { super.paint(g); if (inGame) { g.drawImage(apple, apple_x, apple_y, this); for (int z = 0; z < dots; z++) { if (z == 0) g.drawImage(head, x[z], y[z], this); else g.drawImage(ball, x[z], y[z], this); } Toolkit.getDefaultToolkit().sync(); g.dispose(); } else { gameOver(g); } } public void gameOver(Graphics g) { String msg = "Game Over"; Font small = new Font("Helvetica", Font.BOLD, 14); FontMetrics metr = this.getFontMetrics(small); g.setColor(Color.white); g.setFont(small); 8
  • 9. g.drawString(msg, (WIDTH - metr.stringWidth(msg)) / 2, HEIGHT / 2); } public void checkApple() { if ((x[0] == apple_x) && (y[0] == apple_y)) { dots++; locateApple(); } } public void move() { for (int z = dots; z > 0; z--) { x[z] = x[(z - 1)]; y[z] = y[(z - 1)]; } if (left) x[0] -= DOT_SIZE; if (right) x[0] += DOT_SIZE; if (up) y[0] -= DOT_SIZE; if (down) y[0] += DOT_SIZE; } public void checkCollision() { for (int z = dots; z > 0; z--) if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z])) inGame = false; if (y[0] > HEIGHT) inGame = false; if (y[0] < 0) nGame = false; if (x[0] > WIDTH) inGame = false; if (x[0] < 0) inGame = false; } public void locateApple() { int r = (int) (Math.random() * RAND_POS); apple_x = ((r * DOT_SIZE)); r = (int) (Math.random() * RAND_POS); apple_y = ((r * DOT_SIZE)); } 9
  • 10. public void actionPerformed(ActionEvent e) { if (inGame) { checkApple(); checkCollision(); move(); } repaint(); } private class TAdapter extends KeyAdapter { public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); if ((key == KeyEvent.VK_LEFT) && (!right)) { left = true; up = false; down = false; } if ((key == KeyEvent.VK_RIGHT) && (!left)) { right = true; up = false; down = false; } if ((key == KeyEvent.VK_UP) && (!down)) { up = true; right = false; left = false; } if ((key == KeyEvent.VK_DOWN) && (!up)) { down = true; right = false; left = false; } } } } 10
  • 11. Nous allons d'abord définir les constantes utilisées dans notre jeu. private final int WIDTH = 300; private final int HEIGHT = 300; private final int DOT_SIZE = 10; private final int ALL_DOTS = 900; private final int RAND_POS = 29; private final int DELAY = 140; Les constantes de WIDTH et HEIGHT déterminer la taille du conseil d'administration. Le DOT_SIZE est la taille de la pomme et le point du serpent. Le ALL_DOTS constante définit le nombre maximal de points possibles au sein du Conseil. (900 = 300 * 300/10 * 10) Le RAND_POS constante est utilisée pour calculer une position aléatoire d'une pomme. Le retard constant détermine la vitesse du jeu. private int x[] = new int[ALL_DOTS]; private int y[] = new int[ALL_DOTS]; Ces deux tableaux stocker les coordonnées x, y de toutes les articulations d'un serpent. Dans la méthode move () nous avons l'algorithme à clé de la partie. Pour le comprendre, regardez comment le serpent est en mouvement. Vous contrôlez la tête du serpent. Vous pouvez changer sa direction avec les touches de curseur. Le reste des articulations se déplacer d'une position dans la chaîne. La deuxième articulation se déplace là où la première a été, la troisième articulation où le deuxième a été etc. for (int z = dots; z > 0; z--) { x[z] = x[(z - 1)]; y[z] = y[(z - 1)]; } 11
  • 12. Ce code déplace les articulations de la chaîne. if (left) x[0] -= DOT_SIZE; Déplacer la tête vers la gauche. Dans le checkCollision () la méthode, nous déterminons si le serpent s'est frappé ou l'un des murs. for (int z = dots; z > 0; z--) if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z])) inGame = false; Terminez le jeu, si le serpent frappe une de ses articulations avec la tête. if (y[0] > HEIGHT) nGame = false; Terminez le jeu, si les coups de serpent au bas de la Commission . 12
  • 13. Snake.java package chamhi; import javax.swing.JFrame; public class Snake extends JFrame { public Snake() { add(new Board()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(320, 340); setLocationRelativeTo(null); setTitle("Snake Game V1.0"); setResizable(false); setVisible(true); } public static void main(String[] args) { new Snake(); } } C'est la class main. 13
  • 14. Conclusion Et voilà maintenant vous avez un petit jeu, vraiment c’est un jeu très simple et un peu compliqué si on le fait avec ses vraies conditions. Parmi les problèmes qui nous avons découvert, c'est d'avoir une arrière plan mobile avec des bulles colorées qui apparaissent au hasard et disparaissent à l'écran. 14