Partage
  • Partager sur Facebook
  • Partager sur Twitter

Projet Jeu

    28 août 2016 à 0:12:18

    Bonjour, je souhaite réaliser un snake mais je bloque sur la modification de ma grille. Je souhaite rajouter un "1" aux coordonnées [5,5] qui symboliserait le serpent, mais je ne vois pas comment m'y prendre. Les "0" servent à représenter une case vide

    La class en question est Grille

    public class Snake{
    	public static void main(String[] args){
    		System.out.println("Bienvenue dans le Snake");
    		
    		// Creation object
    		Grille g1 = new Grille(8,8);
    		Serpent s1 = new Serpent();
    	}
    }
    public class Grille{
    	int nligne=8;
    	int pcol=20;
    	int i, j;
    
    	public Grille(){
    		System.out.println("Creation d'une grille : "+nligne+"x"+pcol);
    		int[][] g1=new int[nligne][pcol];
    		
    		for(i=0; i<g1.length; i++) {
    			for(j=0; j<g1[i].length; j++) {
    				g1[i][j] = 0;
    
    			}
    		}
    	}
    
    	public Grille(int l,int c){
    		i = l;
    		j = c;
    
    		System.out.println("Creation d'une grille avec parametre :");
    		int[][] g1=new int[nligne][pcol];
    		
    		for(i=0; i<g1.length; i++) {
    			for(j=0; j<g1[i].length; j++) {
    				g1[i][j] = 0;
    				System.out.print(g1[i][j]);
    			}
    			System.out.println();
    		}
    		System.out.println(); //Netoyage 
    	}
    }
    public class Serpent{
    	public Serpent(){
    		System.out.println("Creation du serpent");
    	}
    }



    Merci d'avance

    -
    Edité par Linéaire 28 août 2016 à 0:17:04

    • Partager sur Facebook
    • Partager sur Twitter
      29 août 2016 à 0:19:18

      24 h est toujours aucune réponse ....
      • Partager sur Facebook
      • Partager sur Twitter
        29 août 2016 à 3:56:54

        Salut. Ton code est bizarre. A quoi servent tes deux paramètres de ton 2eme constructeur? En effet, tu les utilise pour initialiser i et j pour finalement écraser leurs valeurs(avec les boucles).

        Rajouter 1 au coordonnées [5][5]?

        Ce n'est pas tout simplement g1[5][5] = 1?

        • Partager sur Facebook
        • Partager sur Twitter
          29 août 2016 à 9:00:24

          Hello,

          tu dois mettre le serpent et les cases vides dans le même tableau puis en faire l'affichage.

          Un exemple de méthode serait de passer le serpent en paramètre de ta grille puis ta grille se modifie pour incorporer le serpent à son tableau puis elle s'affiche

          • Partager sur Facebook
          • Partager sur Twitter
            29 août 2016 à 10:02:52

            Pour ma part, je choisirais d'utiliser une Interface pour représenter les éléments de la grille (serpent, la nourriture et les cases vides). Il faut 3 éléments sinon on ne distingue plus la nourriture du serpent. Pour ce qui est l'ajout du serpent par la suite, il y a Math.random pour avoir un nombre aléatoire. Il faut en avoir 2 pour avoir les coordonnées X et Y du serpent dans la grille. Le serpent sera à placer au milieu (à peu prêts) de la grille pour ne pas perdre instantanément mais pour la nourriture, à placer de façon aléatoire en évitant une case où le serpent est.

            public Interface Element {
                public enum TYPE_ELEM {VIDE, MANGER, SERPENT}
            
                public int get_x();
                public int get_y();
                public TYPE_ELEM get_type();
            }
            
            public classe Grille {
            
                protected Element[][] grille;
                protected Serpent serpent;
                protected int largeur, hauteur;
            
                public Grille(int w, int h) {
                    this.largeur = w;
                    this.hauteur = h;
                    this.grille = Element[this.largeur][this.hauteur];
                    for (int i = 0; i < this.largeur; i++) {
                        for (int j = 0; j < this.hauteur; j++) {
                            this.grille[i][j] = new CaseVide(i, j, this);
                        }
                    }
                    int s_x = (int) (Math.random() * this.largeur / 3) + (int) (this.largeur / 3);
                    int s_y = (int) (Math.random() * this.hauteur / 3) + (int) (this.hauteur / 3);
                    this.serpent = new Serpent(s_x, s_y, this);
                    this.grille[s_x][s_y] = this.serpent;
                }
            
            }

            La classe Serpent doit contenir la liste des cases sur lesquelles il se trouve (x, y). Lorsque le serpent mange, il faudra placer un nouvel élément Nourriture sur une case vide (une case comprise dans la grille mais différente de la liste de case du serpent).

            public class CaseVide implements Element { 
                
                protected int x, y;
                protected Grille grille;
            
                public CaseVide(int x, int y, Grille g) {
                    this.x = x;
                    this.y = y;
                    this.grille = g;
                }
            
                public int get_x() {
                    return this.x;
                }
            
                public int get_y() {
                    return this.y;
                }
            
                public TYPE_ELEM get_type() {
                    return TYPE_ELEM.VIDE;
                }
            }
            
            public class Serpent implements Element {
            
                protected Point tete;;
                protected Grille grille;
                protected Vector<Point> corps;
            
                public Serpent(int x, int y, Grille g) {
                    this.tete = new Point(x, y);
                    this.grille = g;
                    this.corps = new Vector<Point>();
                    this.corps.add(this.tete);
                }
            
                public boolean avancer(Point p) {
                    if (this.corps.contains(p)) {
                        return false; // PERDU
                    }
                    this.corps.remove(this.corps.size() - 1);
                    this.corps.add(p);
                    this.tete = p;
                    return true; // tout va bien
                }
            }
            



            -
            Edité par Benevolar 29 août 2016 à 10:21:58

            • Partager sur Facebook
            • Partager sur Twitter
              29 août 2016 à 10:35:37

              public class Grille{
                public void setSerpent(Serpent s){
                  //getCaseSerpent et set les case
                }
              }
              
              public class Serpent{
                List<Case> cases;
                int direction; // en général le serpent continu d'avancer dans la derniere direction indiqué
              }

              On a plus besoin d'utiliser Vector de nos jours.

              -
              Edité par dorz 29 août 2016 à 10:37:53

              • Partager sur Facebook
              • Partager sur Twitter
                30 août 2016 à 22:26:07

                J'ai pas très bien compris vos proposition. Mon constructeur sert à crée la grille, les parametres servent à définir une dimension de grille.

                 Ce que je souhaite, c'est savoir comment appeler le constructeur plus d'une fois, il s'affiche la première fois avec une grille rempli de 0 mais je souhaite le r'afficher une deuxième fois cette fois ci avec un 1

                -
                Edité par Linéaire 30 août 2016 à 22:27:11

                • Partager sur Facebook
                • Partager sur Twitter
                  31 août 2016 à 9:08:08

                  Tu fais une méthode qui affiche.

                  public void affiche(){

                   //je parcours les cases de mon tableau et j'affiche

                  }

                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 août 2016 à 9:08:21

                    Bonjour,

                    On ne peut pas appeler le constructeur plusieurs fois pour un même objet. Il sert uniquement à instancier ton objet et initialiser ses attributs. Si tu appelles à nouveau le constructeur, tu vas simplement créer un nouvel objet.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Projet Jeu

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown