SlideShare une entreprise Scribd logo
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

Contenu connexe

Tendances

Modele rapport de pfe
Modele rapport de pfeModele rapport de pfe
Modele rapport de pfe
Maryouma Maryam
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
Amir Souissi
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019
Aziz Darouichi
 
Intelligence-Artificielle-cours.pdf
Intelligence-Artificielle-cours.pdfIntelligence-Artificielle-cours.pdf
Intelligence-Artificielle-cours.pdf
TCHAMINIPRINCESSELUS
 
Pfe book insodev 2022 vf
Pfe book insodev 2022 vfPfe book insodev 2022 vf
Pfe book insodev 2022 vf
Sarra Sassi
 
Rapport de projet de fin d'étude licence informatique et multimédia
Rapport de projet de fin d'étude licence informatique et multimédiaRapport de projet de fin d'étude licence informatique et multimédia
Rapport de projet de fin d'étude licence informatique et multimédia
Nazih Heni
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
pierrepo
 
Livre blanc marketing gamification
Livre blanc marketing gamification Livre blanc marketing gamification
Livre blanc marketing gamification
Jeanne Vinay
 
Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...
Ilyas CHAOUA
 
presentation_PFE.pptx
presentation_PFE.pptxpresentation_PFE.pptx
presentation_PFE.pptx
FazaFoudhaili
 
AI_course.pdf
AI_course.pdfAI_course.pdf
AI_course.pdf
MissaouiWissal
 
Rapport PFE: Gestion de Parc Informatique
Rapport PFE: Gestion de Parc InformatiqueRapport PFE: Gestion de Parc Informatique
Rapport PFE: Gestion de Parc Informatique
Eric Maxime
 
Rapport pfe isi_Big data Analytique
Rapport pfe isi_Big data AnalytiqueRapport pfe isi_Big data Analytique
Rapport pfe isi_Big data Analytique
Yosra ADDALI
 
Présentation de Projet de Fin d'année - Daoudi Ayoub - Génie informatique ENS...
Présentation de Projet de Fin d'année - Daoudi Ayoub - Génie informatique ENS...Présentation de Projet de Fin d'année - Daoudi Ayoub - Génie informatique ENS...
Présentation de Projet de Fin d'année - Daoudi Ayoub - Génie informatique ENS...
ayoub daoudi
 
Gestion billetterie de cinéma
Gestion billetterie de cinémaGestion billetterie de cinéma
Gestion billetterie de cinéma
mohamedgoumih
 
Rapport pfe Conceptionet Developpement d'une Application web et Mobile
Rapport pfe Conceptionet Developpement d'une Application web et  Mobile Rapport pfe Conceptionet Developpement d'une Application web et  Mobile
Rapport pfe Conceptionet Developpement d'une Application web et Mobile
Raoua Bennasr
 
PROJET JAVA BD MySQL
PROJET JAVA BD MySQLPROJET JAVA BD MySQL
PROJET JAVA BD MySQL
Wilfried Tiani
 
Presentation PFE
Presentation PFEPresentation PFE
Presentation PFE
Mohammed Boussardi
 
Rapport de stage d'été
Rapport de stage d'étéRapport de stage d'été
Rapport de stage d'été
JinenAbdelhak
 
Rapport de projet Odoo - gestion de projet et gestion de ressources humaines
Rapport de projet Odoo - gestion de projet et gestion de ressources humainesRapport de projet Odoo - gestion de projet et gestion de ressources humaines
Rapport de projet Odoo - gestion de projet et gestion de ressources humaines
Ayoub Ayyoub
 

Tendances (20)

Modele rapport de pfe
Modele rapport de pfeModele rapport de pfe
Modele rapport de pfe
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019
 
Intelligence-Artificielle-cours.pdf
Intelligence-Artificielle-cours.pdfIntelligence-Artificielle-cours.pdf
Intelligence-Artificielle-cours.pdf
 
Pfe book insodev 2022 vf
Pfe book insodev 2022 vfPfe book insodev 2022 vf
Pfe book insodev 2022 vf
 
Rapport de projet de fin d'étude licence informatique et multimédia
Rapport de projet de fin d'étude licence informatique et multimédiaRapport de projet de fin d'étude licence informatique et multimédia
Rapport de projet de fin d'étude licence informatique et multimédia
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Livre blanc marketing gamification
Livre blanc marketing gamification Livre blanc marketing gamification
Livre blanc marketing gamification
 
Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...
 
presentation_PFE.pptx
presentation_PFE.pptxpresentation_PFE.pptx
presentation_PFE.pptx
 
AI_course.pdf
AI_course.pdfAI_course.pdf
AI_course.pdf
 
Rapport PFE: Gestion de Parc Informatique
Rapport PFE: Gestion de Parc InformatiqueRapport PFE: Gestion de Parc Informatique
Rapport PFE: Gestion de Parc Informatique
 
Rapport pfe isi_Big data Analytique
Rapport pfe isi_Big data AnalytiqueRapport pfe isi_Big data Analytique
Rapport pfe isi_Big data Analytique
 
Présentation de Projet de Fin d'année - Daoudi Ayoub - Génie informatique ENS...
Présentation de Projet de Fin d'année - Daoudi Ayoub - Génie informatique ENS...Présentation de Projet de Fin d'année - Daoudi Ayoub - Génie informatique ENS...
Présentation de Projet de Fin d'année - Daoudi Ayoub - Génie informatique ENS...
 
Gestion billetterie de cinéma
Gestion billetterie de cinémaGestion billetterie de cinéma
Gestion billetterie de cinéma
 
Rapport pfe Conceptionet Developpement d'une Application web et Mobile
Rapport pfe Conceptionet Developpement d'une Application web et  Mobile Rapport pfe Conceptionet Developpement d'une Application web et  Mobile
Rapport pfe Conceptionet Developpement d'une Application web et Mobile
 
PROJET JAVA BD MySQL
PROJET JAVA BD MySQLPROJET JAVA BD MySQL
PROJET JAVA BD MySQL
 
Presentation PFE
Presentation PFEPresentation PFE
Presentation PFE
 
Rapport de stage d'été
Rapport de stage d'étéRapport de stage d'été
Rapport de stage d'été
 
Rapport de projet Odoo - gestion de projet et gestion de ressources humaines
Rapport de projet Odoo - gestion de projet et gestion de ressources humainesRapport de projet Odoo - gestion de projet et gestion de ressources humaines
Rapport de projet Odoo - gestion de projet et gestion de ressources humaines
 

En vedette

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
Elisabeth Burnouf
 
Power point projet carrières
Power point projet carrièresPower point projet carrières
Power point projet carrières
isaleb11
 
Cefq conférence agile mindset
Cefq   conférence agile mindsetCefq   conférence agile mindset
Cefq conférence agile mindset
CEFQ
 
ARDENNE : Etonner, enchanter
ARDENNE : Etonner, enchanterARDENNE : Etonner, enchanter
ARDENNE : Etonner, enchanter
Pascal 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 version
Sandrine 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 2014
nicolasscharff
 
ServicesEnGares_GareduFutur SP [Compatibility Mode]
ServicesEnGares_GareduFutur SP [Compatibility Mode]ServicesEnGares_GareduFutur SP [Compatibility Mode]
ServicesEnGares_GareduFutur SP [Compatibility Mode]
Svetlana POPOVA
 
Portefeuille Investessor 2013
Portefeuille Investessor 2013Portefeuille 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)
LCP Assemblée nationale
 
Cours mecasol 0_2
Cours mecasol 0_2Cours mecasol 0_2
Cours mecasol 0_2
kahinarouam
 
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
 
Programmation de l'automne 2012
Programmation de l'automne 2012Programmation de l'automne 2012
Programmation de l'automne 2012
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 savoir
Manioums
 
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.
 
Calendrier, perception des cycles du temps
Calendrier, perception des cycles du tempsCalendrier, perception des cycles du temps
Calendrier, perception des cycles du temps
Louis-Aimé de Fouquières
 

En vedette (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
 

Similaire à 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 Javascript
Noirdes
 
Algo poo ts
Algo poo tsAlgo poo ts
Algo poo ts
mohamed El babili
 
jQuery — fonctionnalités avancées
jQuery — fonctionnalités avancéesjQuery — fonctionnalités avancées
jQuery — fonctionnalités avancées
Ré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ébutant
Antho Cardinale
 
Javascript #4.1 : fonctions for noobs
Javascript #4.1 : fonctions for noobsJavascript #4.1 : fonctions for noobs
Javascript #4.1 : fonctions for noobs
Jean Michel
 
Compte rendu jess
Compte rendu jessCompte rendu jess
Compte rendu jess
Marwa Marwouta
 
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 - hero
Yann 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 Extensions
wyggio
 
Rapport tp RSA
Rapport  tp  RSARapport  tp  RSA
Corrigé langage c
Corrigé langage cCorrigé langage c
Corrigé langage c
coursuniv
 
Javascript #3 : boucles & conditions
Javascript #3 : boucles & conditionsJavascript #3 : boucles & conditions
Javascript #3 : boucles & conditions
Jean Michel
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2
moisko
 
Javascript #4.2 : fonctions for pgm
Javascript #4.2 : fonctions for pgmJavascript #4.2 : fonctions for pgm
Javascript #4.2 : fonctions for pgm
Jean Michel
 
cours-5.1.pdf
cours-5.1.pdfcours-5.1.pdf
cours-5.1.pdf
GonnaBe1
 
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
SmartnSkilled
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la vie
cluelessjoe
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage C
coursuniv
 
Scala IO 2017 : Probabilités fonctionnelles
Scala IO 2017 : Probabilités fonctionnellesScala IO 2017 : Probabilités fonctionnelles
Scala IO 2017 : Probabilités fonctionnelles
Samy Zarour
 
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
ENSET, Université Hassan II Casablanca
 

Similaire à 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