IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applets Java Discussion :

Jeu memory en java


Sujet :

Applets Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant en reseaux
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiant en reseaux

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Par défaut Jeu memory en java
    Bonjour à tous,
    je suis actuellement en train de suivre un projet ou l'objectif est de creer un jeu simple en java, ici un memory, qui affiche 3 forme aleatoire qui apparaissent puis disparaisse a la suite l'utilisateur doit ensuite retrouver la suite proposé


    Donc j'ai créer une partie de code qui me permet de creer des formes aleatoire et j'aimerais savoir s'il y a possibilité de dessiner les formes dans un tableau. Le tableau serait pour pouvoir comparer ce que l'utilisateur rentre et savoir s'il a reussit le jeux. Mais je ne sais pas comment inclure ces formes dans mon tableau.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
     
    package jeremyravel;
     
    import java.applet.Applet;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Polygon;
    import java.util.ArrayList;
     
    public class test extends Applet {
     
     
    	public void paint (Graphics g) {
    		int a = (int) (Math.random() * 3 + 1 );
     
    		switch (a) {
    	    case 1:  
    	    	drawRect(g);
    	             break;
    	    case 2: drawCircle(g);
    	             break;
    	    case 3:  drawPolygone(g);
    	             break;
     
     
    		}
     
    	}
     
     
    	public void drawRect(Graphics g)
    	{
     
    		int x= 0 ;  
    		int y = 39;
     
    	      // Dessiner un rectangle plein (4 point) et de dimensions (22,90).
    	         Polygon rectangle = new Polygon();
    	         rectangle.addPoint(x +396, y+=51);   // point haut gauche: x = 148, y = 90
    	         rectangle.addPoint(x +496, y);           // point haut droite: x = 170, y = 90
    	         rectangle.addPoint(x +496, y+=60);   // point bas droite: x = 170, y = 150
    	         rectangle.addPoint(x +396, y);           // point bas gauche: x = 148, y = 150
    	         g.setColor(Color.blue);                      // fond du rectangle
    	         g.fillPolygon(rectangle);                     // remplissage
    	         g.drawPolygon(rectangle);                // affichage
     
    	}
     
    	public void drawPolygone(Graphics g)
    	{
    	     int y = 39;
    	     int x = 0 ;
     
    	      // Dessiner un triangle plein (3points)
    	         Polygon triangle = new Polygon();
    	         triangle.addPoint(x +446, y+=51);      // point haut: x = 446, y = 90
    	         triangle.addPoint(x +496, y+=60);  // point bas droite: x = 496, y = 150
    	         triangle.addPoint(x +396, y);      // point bas gauche: x = 396, y = 150
    	         g.setColor(Color.RED);     // fond du triangle
    	         g.fillPolygon(triangle);      // remplissage
    	         g.drawPolygon(triangle);      // affichage
     
    	}
     
    	public void drawCircle(Graphics g)
    	{
     
    		 int  x = 0;
    	      int y = 39;
     
    	      // Dessiner un ovale plein .
    	      // dans ce cas l'ovale est un cercle (dim. 50X50)
    	         g.setColor(Color.GREEN);           // couleur de remplissage (fond)
    	         g.fillOval(x +450, y+=61, 50, 50); // remplissage (fill)
    	         g.drawOval(x +450, y, 50, 50);     // affichage, dessiner (draw)	
    	}
     
     
     
    public static void main(String[] args)
    {
    	new test();
    }
     
     
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    tu n'a pas besoin de mettre tes formes dans un tableau, mais seulement un moyen de les identifier.

    le plus simple dans ton cas, c'est d'utiliser le nombre que tu tires aléatoirement pour déterminer quelle forme dessiner : il suffit de stocker les différents nombres tirés lors d'une séquence (dans un tableau par exemple, si tu tire toujours 3 formes à chaque fois).

    Quand tu proposes les séquences à reconnaître, ces séquences présentées correspondent elle aussi à des tableau de nombres

    Ensuite, tu peux comparer les différentes valeurs du tableau correspondant à la séquence cliquée par l'utilisateur et le comparer aux valeurs du tableau stockant les numéros de formes sélectionnées aléatoire au début...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant en reseaux
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiant en reseaux

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Par défaut
    Merci de ta réponse,

    alors j'ai essayer d'ameliorer mon code en suivant ta solution
    Donc je creer un tableau
    Puis pour chaque methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    	public void drawRect(Graphics g)
    	{
     
    		int x= 0 ;  
    		int y = 39;
     
    	      // Dessiner un rectangle plein (4 point) et de dimensions (22,90).
    	         Polygon rectangle = new Polygon();
    	         rectangle.addPoint(x +396, y+=51);   // point haut gauche: x = 148, y = 90
    	         rectangle.addPoint(x +496, y);           // point haut droite: x = 170, y = 90
    	         rectangle.addPoint(x +496, y+=60);   // point bas droite: x = 170, y = 150
    	         rectangle.addPoint(x +396, y);           // point bas gauche: x = 148, y = 150
    	         g.setColor(Color.blue);                      // fond du rectangle
    	         g.fillPolygon(rectangle);                     // remplissage
    	         g.drawPolygon(rectangle);                // affichage
    	         tab[0] = "rectangle" ;
     
    	}
    Le probleme c'est qu'il me sort une erreur du type

    Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 0
    at jeremyravel.test.drawRect(test.java:62)
    at jeremyravel.test.paint(test.java:21)
    Donc je dois faire une erreur, car il ne veut pas rentrer la valeur dans mon tableau.
    Et sinon j'ai une autre question penses tu qu'il soit possible de faire apparaitre une forme genre 5s puis qu'ensuite elle disparaisse ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Il suffit pas de déclarer un tableau par
    Il faut aussi le créer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tab = new String[ un nombre d'élément ];
    Mais je pensais pas à un tableau de String :
    Là tu as cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public void paint (Graphics g) {
    		int a = (int) (Math.random() * 3 + 1 );
     
    		switch (a) {
    	    case 1:  
    	    	drawRect(g);
    	             break;
    	    case 2: drawCircle(g);
    	             break;
    	    case 3:  drawPolygone(g);
    	             break;
     
     
    		}
     
    	}
    donc tu as bien une équivalence 1 = rectangle, 2 = cercle, 3 = polygone
    (il y plusieurs manières de gérer ça "proprement" en java ( enumération, classes dédiées) mais je pensais à une méthode plus basic pour toi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public int[] creerSequence(int nombreDeFormes) {
        int[] formes = new int[nombreDeFormes]; // on créé un tableau de la taille nombreDeFormes
        for(int i=0; i<formes.length; i++) { // on remplit ce tableau...
             formes[i]=(int) (Math.random() * 3 + 1 ); //...avec des numéros de formes, tirés au hasard
        }
        return formes;
    }
    Si tu veux que chaque forme n'apparaisse qu'une fois dans une séquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public int[] creerSequence(int nombreDeFormes) {
        int[] formes = new int[nombreDeFormes];
        for(int i=0; i<formes.length; i++) {
             boolean formeChoisie=false;
             do {
                forme[i] = (int) (Math.random() * 3 + 1 );
                formeChoisie=true; // on suppose que cette forme est ok
                for(int j=0; j<i; j++ ) {
                    if ( formes[j]==forme[i] ) {
                       formeChoisie=false; // forme déjà choisie
                       break; // va la peine de continuer à cherche, on sait déjà qu'on va devoir rechoisir
                    }
                }
             } while(!formeChoisie); // on boucle tant qu'on a pas choisie une forme
        }
        return formes;
    }
    et qui s'appellera comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sequenceChoisie = creerSequence(3);
    pour trois formes...et ou sequenceChosie est un tableau de int (int[])

    Tu peux utiliser la même méthode pour créer la séquence à afficher au début, en affichant chaque forme l'une après l'autre (ce que ne fait pas vraiment le programme que tu as fait au début qui va afficher une forme différente chaque fois le composant va se redessiner) et également pour les séquences à présenter au joueur à la fin (dont l'une sera la séquence tirée au hasard au début).


    Pour faire défiler les formes, il faut que tu fasses un système qui incrémente un index, pour afficher successivement les différentes formes : sequence[0], puis sequence[1], puis sequence[2].

    Il te faut donc un index de forme courante, un int dans ta classe d'affichage, et que tu utiliseras dans ta méthode paint à la place de ton a tiré au hasard.
    private int indexFormeCourante=-1;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public void paint (Graphics g) {
     
            // il faudra penser à effacer le dessin précédent, sinon les formes vont se superposer...
     
                    if ( sequenceChoisie!=null && indexFormeCourante>=0 && indexFormeCourante<sequenceChoisie.length ) {
    		int a = sequenceChoisie[indexFormeCourante];
     
    		switch (a) {
    	    case 1:  
    	    	drawRect(g);
    	             break;
    	    case 2: drawCircle(g);
    	             break;
    	    case 3:  drawPolygone(g);
    	             break;
     
     
    		}
    }
     
    	}
    Pour faire défiler les formes, il faut incrémenter index jusqu'à à la taille de sequenceChoisie[].
    Pour ça, il te faut soit utiliser un Thread, soit un Timer, pour afficher chaque forme un certain temps, à moins que tu veuilles que la forme change sur pression d'une touche au clavier... mais si j'ai bien compris tu veux que les formes s'affiche pendant un temps limité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public void lancerJeu() {
        sequenceChoisie  = creerSequence(3);
        new Thread() {
           public void run() {
     
                 for(int i=0; i<sequenceChoisie.length; i++ ) {
                       indexFormeCourante=i;
                       repaint();
                      try {
     sleep(500);  // on affiche la forme pendant 1/2 secondes (500 ms)
    } 
    catch(InterruptedException e) { 
    break; 
    };
                 }
    indexFormeCourante=-1;
     
           }
        }.start();
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre averti
    Homme Profil pro
    Etudiant en reseaux
    Inscrit en
    Janvier 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiant en reseaux

    Informations forums :
    Inscription : Janvier 2013
    Messages : 35
    Par défaut
    Merci de m'accorder autant d'aide,
    bon j'ai quelques questions

    Ensuite ta methode new game, si j'ai bien compris je dois l'appeler dans le main c'est ca ?

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par baffreux Voir le message
    Merci de m'accorder autant d'aide,
    bon j'ai quelques problèmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sequenceChoisie =  creerSequence(3); // Une erreur de type Return type for the method is missing
    Donc j'ai cette première erreur qui m'empeche d'avancer =/
    Ensuite ta methode new game, si j'ai bien compris je dois l'appeler dans le main c'est ca ?
    j'ai mis quelques bribes de codes, à toi de t'en inspirer, de les assembler, de déclarer les variables aux bons endroits etc... désolé, je ne peux pas passer plus de temps pour plus de détail et d'explication, pour le moment...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. [Débutant] Programmer le jeu Sudoku en Java
    Par whally dans le forum Graphisme
    Réponses: 5
    Dernier message: 04/03/2011, 09h53
  2. erreur Out of memory Error+ java(jb9 sous linux)
    Par Scal-tn dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 23/04/2008, 10h27
  3. [Débutant] Developper un jeu DirectX en Java
    Par akito dans le forum DirectX
    Réponses: 5
    Dernier message: 10/08/2007, 07h09
  4. pb jeu memory: débutant
    Par nanonerie dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 26/02/2007, 19h20
  5. [LG] Jeu mémory : initialisation de tableau
    Par DarkLords dans le forum Langage
    Réponses: 1
    Dernier message: 19/10/2005, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo