SlideShare a Scribd company logo
1 of 14
Download to read offline
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

More Related Content

What's hot

Essentiel sur le developpement personnel
Essentiel sur le developpement personnelEssentiel sur le developpement personnel
Essentiel sur le developpement personnelMohsin El Khamlichi
 
Systèmes d'Exploitation - chp6-synchronisation
Systèmes d'Exploitation - chp6-synchronisationSystèmes d'Exploitation - chp6-synchronisation
Systèmes d'Exploitation - chp6-synchronisationLilia Sfaxi
 
Presentation pfe Système de gestion des rendez-vous médicaux
Presentation pfe Système de gestion des rendez-vous médicauxPresentation pfe Système de gestion des rendez-vous médicaux
Presentation pfe Système de gestion des rendez-vous médicauxFehmi Arbi
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Heithem Abbes
 
Tests & recette - Les fondamentaux
Tests & recette - Les fondamentauxTests & recette - Les fondamentaux
Tests & recette - Les fondamentauxCOMPETENSIS
 
conception et réalisation plateforme collaboratif basant sur la methode agile...
conception et réalisation plateforme collaboratif basant sur la methode agile...conception et réalisation plateforme collaboratif basant sur la methode agile...
conception et réalisation plateforme collaboratif basant sur la methode agile...Sid Ahmed Benkraoua
 
Ma présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebMa présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebHarrathi Mohamed
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcminfcom
 
Cycles de vie d'un logiciel
Cycles de vie d'un logicielCycles de vie d'un logiciel
Cycles de vie d'un logicielRabia AZIZA
 
Cahier des Charges Infrastructure Informatique
Cahier des Charges Infrastructure InformatiqueCahier des Charges Infrastructure Informatique
Cahier des Charges Infrastructure InformatiqueDATANYWARE.com
 
La gestion de projet informatique 2015
La gestion de projet informatique 2015La gestion de projet informatique 2015
La gestion de projet informatique 2015Loïc Charpentier
 
Mémoire PEF application client server gestion des projet collaborative
Mémoire PEF application client server gestion des projet collaborativeMémoire PEF application client server gestion des projet collaborative
Mémoire PEF application client server gestion des projet collaborativeMessaoud Hatri
 
Présentation PFE - MarouaBouhachem VersionFinale
Présentation PFE - MarouaBouhachem VersionFinalePrésentation PFE - MarouaBouhachem VersionFinale
Présentation PFE - MarouaBouhachem VersionFinaleMaroua Bouhachem
 
Rapport de projet de fin d'année
Rapport de projet de fin d'année Rapport de projet de fin d'année
Rapport de projet de fin d'année kaies Labiedh
 
PFE : ITIL - Gestion de parc informatique
PFE : ITIL - Gestion de parc informatiquePFE : ITIL - Gestion de parc informatique
PFE : ITIL - Gestion de parc informatiquechammem
 

What's hot (20)

Essentiel sur le developpement personnel
Essentiel sur le developpement personnelEssentiel sur le developpement personnel
Essentiel sur le developpement personnel
 
Systèmes d'Exploitation - chp6-synchronisation
Systèmes d'Exploitation - chp6-synchronisationSystèmes d'Exploitation - chp6-synchronisation
Systèmes d'Exploitation - chp6-synchronisation
 
Méthodes agiles & Scrum
Méthodes agiles & ScrumMéthodes agiles & Scrum
Méthodes agiles & Scrum
 
Presentation pfe Système de gestion des rendez-vous médicaux
Presentation pfe Système de gestion des rendez-vous médicauxPresentation pfe Système de gestion des rendez-vous médicaux
Presentation pfe Système de gestion des rendez-vous médicaux
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)
 
Rapport de stage du fin d'étude
Rapport de stage du fin d'étudeRapport de stage du fin d'étude
Rapport de stage du fin d'étude
 
gestion de projet
gestion de projetgestion de projet
gestion de projet
 
Tests & recette - Les fondamentaux
Tests & recette - Les fondamentauxTests & recette - Les fondamentaux
Tests & recette - Les fondamentaux
 
conception et réalisation plateforme collaboratif basant sur la methode agile...
conception et réalisation plateforme collaboratif basant sur la methode agile...conception et réalisation plateforme collaboratif basant sur la methode agile...
conception et réalisation plateforme collaboratif basant sur la methode agile...
 
Methodes agiles
Methodes agilesMethodes agiles
Methodes agiles
 
Ma présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebMa présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site Web
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcm
 
Cycles de vie d'un logiciel
Cycles de vie d'un logicielCycles de vie d'un logiciel
Cycles de vie d'un logiciel
 
Cahier des Charges Infrastructure Informatique
Cahier des Charges Infrastructure InformatiqueCahier des Charges Infrastructure Informatique
Cahier des Charges Infrastructure Informatique
 
La gestion de projet informatique 2015
La gestion de projet informatique 2015La gestion de projet informatique 2015
La gestion de projet informatique 2015
 
Mémoire PEF application client server gestion des projet collaborative
Mémoire PEF application client server gestion des projet collaborativeMémoire PEF application client server gestion des projet collaborative
Mémoire PEF application client server gestion des projet collaborative
 
Présentation PFE - MarouaBouhachem VersionFinale
Présentation PFE - MarouaBouhachem VersionFinalePrésentation PFE - MarouaBouhachem VersionFinale
Présentation PFE - MarouaBouhachem VersionFinale
 
Rapport de projet de fin d'année
Rapport de projet de fin d'année Rapport de projet de fin d'année
Rapport de projet de fin d'année
 
PFE : ITIL - Gestion de parc informatique
PFE : ITIL - Gestion de parc informatiquePFE : ITIL - Gestion de parc informatique
PFE : ITIL - Gestion de parc informatique
 
Gestion de projet
Gestion de projetGestion de projet
Gestion de projet
 

Viewers also liked

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.
 

Viewers also liked (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 to 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 to 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