Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2015-05-02 12:48:23 Besoin d'aide projet ISN

muse
membre
Date d'inscription: 2015-05-02
Messages: 15

Besoin d'aide projet ISN



Bonjour à tous, je suis nouvelle sur ce forum et viens de commencer la programmation cette année.
Ayant choisi la spécialité ISN au bac, je dois réaliser un jeu sur processing, mais voilà, je suis bloquée et fais donc appel à votre aide. Il s'agit d'un jeu où l'on doit réaliser un hamburger mais mon probléme est que les aliments ne s'empile pas tous correctement, de plus  j'ai du mal a faire tomber mes objets de façon répétitive. sad
Voici mon programme:

int fond;// variable globale qui permettra d'empiler les aliments.
float x;
float y;
float vitesse;
PImage painporteur;
PImage salade;
PImage cornichon;
PImage fromage;
PImage oignon;
PImage pain;
PImage steak;
PImage tomate;
Painporteur monPainporteur = new Painporteur();
Salade maSalade= new Salade(5);
Cornichon monCornichon = new Cornichon(5);
Fromage monFromage = new Fromage(5);
Oignon monOignon = new Oignon(5);
Pain monPain = new Pain(5);
Steak monSteak = new Steak(5);
Tomate maTomate = new Tomate(5);

void setup(){
  size(1300,675);
  smooth();
  painporteur=loadImage("painporteur.png");
  salade=loadImage("salade.png");
  cornichon=loadImage("cornichon.png");
  fromage=loadImage("fromage.png");
  oignon=loadImage("oignon.png");
  pain=loadImage("pain.png");
  steak=loadImage("steak.png");
  tomate=loadImage("tomate.png");
 
}


void draw(){
  background(0);
  cursor(HAND);
  monPainporteur.display();
 
  maSalade.contact();
  maSalade.display();

  monCornichon.display();
  monCornichon.contact();
 
  monFromage.display();
  monFromage.contact();
 
  monOignon.display();
  monOignon.contact();
 
  monPain.display();
  monPain.contact();
 
  monSteak.display();
  monSteak.contact();
 
  maTomate.display();
  maTomate.contact();
 
 
}

class Painporteur{
float x;
float y;

Painporteur(){
   x=0;
   y=665;
}
 
  void display() {
    stroke(0);
    fill(175);
    if (mouseX<width-130) x = mouseX;
    else x=width-130;
    image(painporteur,x,600);
  }   
}

class Salade{
  float x;
  float y;
  float vitesse;
  int fond=580;
  int touche;//il a atterri sur le sandwich
Salade( float nouvY){
  x=random(30,1160);
  y=nouvY;
  vitesse=random(1,1.5);
  touche=0;
  }
void display(){
  image(salade,x,y,175,300);
  y+=vitesse;
}
  void contact(){
     if(((y<fond)&&( y>fond-10))&&((x>monPainporteur.x-15)&&(x<monPainporteur.x+15))){
        vitesse = 0; fond=fond-40;
        touche =1;}
     if (touche==1) x=monPainporteur.x;
                         
}}

class Cornichon{
  float x;
  float y;
  float vitesse;
  int fond=500;
  int touche;//il a atterri sur le sandwitch
Cornichon(float nouvY){
  x=random(30,1160);
  y=nouvY;
  vitesse=random(1,1.5);
  touche=0;
  }
 
void display(){
  image(cornichon,x,y);
  y+=vitesse;
}
void contact(){
     if(((y<fond)&&( y>fond-10))&&((x>monPainporteur.x-15)&&(x<monPainporteur.x+15))){
        vitesse = 0; fond=fond-40;
        touche =1;}
     if (touche==1) x=monPainporteur.x;
                         
}}

class Fromage{
  float x;
  float y;
  float vitesse;
  int fond=600;
  int touche;//il a atterri sur le sandwitch
Fromage(float nouvY){
  x=random(30,1105);
  y=nouvY;
  vitesse=random(1,1.5);
  touche=0;
  }
 
void display(){
image(fromage,x,y);
  y+=vitesse;
}
void contact(){
     if(((y<fond)&&( y>fond-10))&&((x>monPainporteur.x-15)&&(x<monPainporteur.x+15))){
        vitesse = 0; fond=fond-40;
        touche =1;}
     if (touche==1) x=monPainporteur.x;
                         
}}

class Oignon{
  float x;
  float y;
  float vitesse;
  int fond=500;
  int touche;//il a atterri sur le sandwitch
Oignon(float nouvY){
  x=random(30,1145);
  y=nouvY;
  vitesse=random(1,1.5);
  touche=0;
  }
 
void display(){
  image(oignon,x,y);
  y+=vitesse;
}
void contact(){
     if(((y<fond)&&( y>fond-30))&&((x>monPainporteur.x-30)&&(x<monPainporteur.x+30))){
        vitesse = 0; fond=fond-40;
        touche =1;}
     if (touche==1) x=monPainporteur.x;
                         
}}

class Steak{
  float x;
  float y;
  float vitesse;
  int fond=555;
  int touche;//il a atterri sur le sandwitch
Steak(float nouvY){
  x=random(30,1100);
  y=nouvY;
  vitesse=random(1,1.5);
  touche=0;
  }
 
void display(){
  image(steak,x,y);
  y+=vitesse;
}
void contact(){
     if(((y<fond)&&( y>fond-30))&&((x>monPainporteur.x-30)&&(x<monPainporteur.x+30))){
        vitesse = 0; fond=fond-40;
        touche =1;}
     if (touche==1) x=monPainporteur.x+25;
                         
}}

class Tomate{
  float x;
  float y;
  float vitesse;
  int fond=625;
  int touche;//il a atterri sur le sandwitch
Tomate(float nouvY){
  x=random(30,1125);
  y=nouvY;
  vitesse=random(1,1.5);
  touche=0;
  }
 
void display(){
  image(tomate,x,y);
  y+=vitesse;
}
void contact(){
     if(((y<fond)&&( y>fond-30))&&((x>monPainporteur.x-30)&&(x<monPainporteur.x+30))){
        vitesse = 0; fond=fond-40;
        touche =1;}
     if (touche==1) x=monPainporteur.x;
                         
}}

class Pain{
  float x;
  float y;
  float vitesse;
  int touche;//il a atterri sur le sandwitch
Pain(float nouvY){
  x=random(30,1110);
  y=nouvY;
  vitesse=random(1,1.5);
  touche=0;
  }
 
void display(){
image(pain,x,y);
  y+=vitesse;
}
void contact(){
     if(((y<fond)&&( y>fond-30))&&((x>monPainporteur.x-30)&&(x<monPainporteur.x+30))){
        vitesse = 0; fond=fond-40;
        touche =1;}
     if (touche==1) x=monPainporteur.x;
                         
}}

Je vous remercie par avance, en espérant recevoir des réponses car c'est urgent. smile

Dernière modification par muse (2015-05-02 13:53:45)

Hors ligne

 

#2 2015-05-02 16:12:28 Re : Besoin d'aide projet ISN

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Besoin d'aide projet ISN



Ton projet est rigolo.
Pour commencer, j'ai du retailler toutes tes images pour qu'elles soient de la même taille (125 x 88).
Pour moi, il vaut mieux créer une classe aliment générique.
Ensuite, il faut deux liste une des aliments à mettre qui diminue à chaque fois qu'un aliment est dans le hamburger et une autre qui est le hamburger qui grandit à chaque aliment.

ArrayList<Aliment> aliments;
ArrayList<Aliment> hamburger;

La classe Aliment devrait contenir comme variable la position de l'aliment, sa vitesse et une image à afficher.

class Aliment {  
  float x, y, vitesse;
  PImage img;

  Aliment(String s) {
    x = random(30, 1160);
    y = 0;
    vitesse = random(5, 10);
    img = loadImage(s);
  }
}

Il faut ensuite initialiser les listes et les éléments de la liste d'aliments et l'unique élément de la liste hamburger qui est composé du pain porteur.

J'ai surcharger le constructeur avec un constructeur qui a comme paramètre supplémentaire s'il fait partie du hamburger. et donc sa position y est fixe.
Voici les éléments pour commencer.

Hors ligne

 

#3 2015-05-02 16:39:50 Re : Besoin d'aide projet ISN

muse
membre
Date d'inscription: 2015-05-02
Messages: 15

Re: Besoin d'aide projet ISN



Je te remercie énormément! C'est vrai que l'idée de créer une classe aliment m'a l'air très bien, je vais tester ça et je te remercie encore une fois.

Hors ligne

 

#4 2015-05-02 18:18:43 Re : Besoin d'aide projet ISN

muse
membre
Date d'inscription: 2015-05-02
Messages: 15

Re: Besoin d'aide projet ISN



Par contre avec quoi as tu retaillé les images? Car avec Gimp je n'arrive qu'à redimensionner la fenêtre, mais pas l'image en elle même car il y a un canal alpha.

Hors ligne

 

#5 2015-05-02 18:57:45 Re : Besoin d'aide projet ISN

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Besoin d'aide projet ISN



Je l'ai fait avec Gimp, tu fais une sélection de 125 x 88 que tu places autour de l'image puis tu vas dans Image / Rogner sur la sélection. Et hop !
Sinon, voici les images retaillées :

Hors ligne

 

#6 2015-05-02 19:48:10 Re : Besoin d'aide projet ISN

muse
membre
Date d'inscription: 2015-05-02
Messages: 15

Re: Besoin d'aide projet ISN



Ah d'accord, je ne savais pas, merci beaucoup c'est vraiment gentil!

Hors ligne

 

#7 2015-05-02 23:45:27 Re : Besoin d'aide projet ISN

muse
membre
Date d'inscription: 2015-05-02
Messages: 15

Re: Besoin d'aide projet ISN



Donc la classe Aliment devra comporter toutes les autres classes (tomates, salade...), c'est bien ça? Parce que je sais pas exactement comment m'y prendre, s'il ne faut mettre qu'une image dans la classe Aliment hmm

Hors ligne

 

#8 2015-05-02 23:56:01 Re : Besoin d'aide projet ISN

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Besoin d'aide projet ISN



Tu oublies les autres classes. Il n'y a que la classe Aliment, ce sont les instances de la classe qui représentent les différents aliments. Tu peux les instancier comme cela :

La variable img de la classe s'initialise pour chaque instance de la classe Aliment avec un chemin vers une image différent (cornichon.png …)

Hors ligne

 

#9 2015-05-03 00:00:30 Re : Besoin d'aide projet ISN

muse
membre
Date d'inscription: 2015-05-02
Messages: 15

Re: Besoin d'aide projet ISN



Ah d'accord j'vais tester ça, merci beaucoup de ton aide

Hors ligne

 

#10 2015-05-03 14:51:06 Re : Besoin d'aide projet ISN

muse
membre
Date d'inscription: 2015-05-02
Messages: 15

Re: Besoin d'aide projet ISN



Voilà à quoi ressemble mon programme pour l'instant, je n'ai pas encore fait l'empilement avec les listes car je ne sais pas comment m'y prendre, je dois utiliser une boucle?



ArrayList<Aliment> aliments;
ArrayList<Aliment> hamburger;


void setup(){
 
  size(1300,675);
  smooth();
 
  aliments = new ArrayList<Aliment>();
     aliments.add(new Aliment("salade.png"));
     aliments.add(new Aliment("cornichon.png"));
     aliments.add(new Aliment("fromage.png"));
     aliments.add(new Aliment("oignon.png"));
     aliments.add(new Aliment("steak.png"));
     aliments.add(new Aliment("tomate.png"));
     aliments.add(new Aliment("pain.png"));
     
  hamburger = new ArrayList<Aliment>();


}

void draw(){
 
  background(0);
  cursor(HAND);
 
   for (Aliment a : aliments) {
     a.display();
   }
   
   for (Aliment a : hamburger){
     a.display();
    }
}

class Aliment {
 
  float x, y, vitesse;
  PImage img; PImage painporteur;

  Aliment(String s) {
    x = random(30, 1160);
    y = 0;
    vitesse = random(5, 10);
    img = loadImage(s);
    painporteur = loadImage("painporteur.png");
  }

  void display(){
  imageMode(CENTER);
  image(img,x,y);
  image(painporteur,mouseX,645);
  y+=vitesse;
  }
}

Hors ligne

 

#11 2015-05-03 15:53:48 Re : Besoin d'aide projet ISN

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Besoin d'aide projet ISN



Bonjour,

Le pain porteur est aussi un aliment donc il n'a rien à faire dans la classe. C'est un aliment et c'est le premier étage de ton hamburger, donc il faut l'inclure dans ta liste de hamburger.
Dans tes classes, n'hésite pas à séparer les méthodes. La fonction affichage est différente de la méthode de mise à jour des paramètres.
Voilà ce que je te propose de faire :

ArrayList<Aliment> aliments;
ArrayList<Aliment> hamburger;


void setup() {

  size(1300, 675);
  smooth();

  aliments = new ArrayList<Aliment>();
  aliments.add(new Aliment("salade.png"));
  aliments.add(new Aliment("cornichon.png"));
  aliments.add(new Aliment("fromage.png"));
  aliments.add(new Aliment("oignon.png"));
  aliments.add(new Aliment("steak.png"));
  aliments.add(new Aliment("tomate.png"));
  aliments.add(new Aliment("pain.png"));

  hamburger = new ArrayList<Aliment>();
  hamburger.add(new Aliment("painporteur.png", true));
  imageMode(CENTER);
}

void draw() {

  background(0);
  cursor(HAND);

  for (Aliment a : hamburger) {
    a.miseAjourEmpilement();
    a.display();
  }
  for (Aliment a : aliments) { 
    a.miseAjour();
    a.display();
  }
}

class Aliment { 
  float x, y, vitesse;
  PImage img;

  Aliment(String s) {
    x = random(30, 1160);
    y = 0;
    vitesse = random(5, 10);
    img = loadImage(s);
  }

  Aliment(String s, boolean e) {
    this(s);
    if (e) {
      y = height - 100;
    }
  }
  
  void miseAjourEmpilement() {
    x = mouseX;
  }
  
  void miseAjour() {
    y+=vitesse;
  }

  void display() {
    image(img, x, y);
  }
}

Ensuite, il faut que tu vérifies dans la méthode miseAJour si l'aliment qui choie est dans la zone de contact du hamburger. Comme toutes les images ont la même hauteur, il est simple de calculer la hauteur actuelle du hamburger.
S'il est dans la zone alors la méthode doute renvoyer true et ainsi tu pourras ajouter cette instance à la liste hamburger et la retirer de la liste aliments.

Hors ligne

 

#12 2015-05-06 14:28:03 Re : Besoin d'aide projet ISN

muse
membre
Date d'inscription: 2015-05-02
Messages: 15

Re: Besoin d'aide projet ISN



Bonjour, j'ai essayé de faire ce que tu m'as proposé pour l'empilement mais le problème est que le joueur doit empiler le maximum d'aliments jusqu'à ce que le pain du haut arrive, il ne doit donc en avoir qu'un seul et la hauteur du hamburger sera aléatoire.

Hors ligne

 

#13 2015-05-06 16:00:58 Re : Besoin d'aide projet ISN

muse
membre
Date d'inscription: 2015-05-02
Messages: 15

Re: Besoin d'aide projet ISN



J'ai eu un problème pour changer les aliments de listes, voici mon programme:

ArrayList<Aliment> aliments;
ArrayList<Aliment> hamburger;

PImage burger;

void setup() {

  size(1300, 675);
  smooth();
  burger=loadImage("Burger.png");
  image(burger,0,0);
 
  aliments = new ArrayList<Aliment>();
   aliments.add(new Aliment("salade.png"));
   aliments.add(new Aliment("cornichon.png"));
   aliments.add(new Aliment("fromage.png"));
   aliments.add(new Aliment("oignon.png"));
   aliments.add(new Aliment("steak.png"));
   aliments.add(new Aliment("tomate.png"));
   aliments.add(new Aliment("pain.png"));

  hamburger = new ArrayList<Aliment>();
   hamburger.add(new Aliment("painporteur.png", true));
  imageMode(CENTER);
}

void draw() {

  cursor(HAND);
 
   background(burger);

  for (Aliment a : hamburger) {
    a.miseAjourEmpilement();
    a.display();
  }
  for (Aliment a : aliments) {
    a.miseAjour();
    a.display();
  }
}

class Aliment {
  float x, y, vitesse;
  PImage img;

  Aliment(String s) {
    x = random(30, 1160);
    y = 0;
    vitesse = random(4, 6);
    img = loadImage(s);
  }

  Aliment(String s, boolean e) {
    this(s);
    if (e) {
      y = height - 100;
    }
  }

 
  void miseAjourEmpilement() {
     x = mouseX;
     

    aliments.add(new Aliment("salade.png"));
    aliments.add(new Aliment("cornichon.png"));
    aliments.add(new Aliment("fromage.png"));
    aliments.add(new Aliment("oignon.png"));
    aliments.add(new Aliment("steak.png"));
    aliments.add(new Aliment("tomate.png"));
    aliments.add(new Aliment("pain.png"));
   
}

  void miseAjour() {
    int touche=0;
    int largeur=mouseX;
    int hauteur=88;
    int fond= height - 90;
    y+=vitesse;
   
     if(((y<fond)&&(y>fond-50))&&((x>largeur-40)&&(x<largeur+40))){
        touche = 1;
        fond = fond - hauteur;
        vitesse = 0;}
       
     if (touche==1){
       
        x = mouseX; 
   
        aliments.remove(new Aliment("salade.png"));
        aliments.remove(new Aliment("cornichon.png"));
        aliments.remove(new Aliment("fromage.png"));
        aliments.remove(new Aliment("oignon.png"));
        aliments.remove(new Aliment("steak.png"));
        aliments.remove(new Aliment("tomate.png"));
        aliments.remove(new Aliment("pain.png"));
 
   }
}
 

  void display() {
    image(img, x, y);
   
  }}

Hors ligne

 

#14 2015-05-06 23:31:32 Re : Besoin d'aide projet ISN

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Besoin d'aide projet ISN



Il faut bien que tu comprennes ce qui est dans la classe et hors de la classe.
Regarde des tutoriels sur les classes , la notion d'instance, tu mélanges un peu tout. Voici, ce que j'ai fait :

ArrayList<Aliment> aliments;
ArrayList<Aliment> hamburger;

void setup() {
  size(1300, 675);
  smooth();
  noCursor();
  aliments = new ArrayList<Aliment>();
  aliments.add(new Aliment("salade.png"));
  aliments.add(new Aliment("cornichon.png"));
  aliments.add(new Aliment("fromage.png"));
  aliments.add(new Aliment("oignon.png"));
  aliments.add(new Aliment("pain.png"));
  aliments.add(new Aliment("steak.png"));
  aliments.add(new Aliment("tomate.png"));
  hamburger = new ArrayList<Aliment>();
  hamburger.add(new Aliment("painporteur.png", true));
  imageMode(CENTER);
  cursor(HAND);
}

void draw() {
  background(0);
  for (Aliment a : hamburger) {
    a.miseAJour();
    a.affichage();
  }

  for (int i = 0; i < aliments.size (); i++) {
    Aliment a = aliments.get(i);
    boolean empilement = a.miseAJour(hamburger.size());
    if (empilement) {
      hamburger.add(a);
      aliments.remove(a);
    }
    a.affichage();
  }
}

class Aliment {  
  float x, y, vitesse;
  float decalage;
  PImage img;

  Aliment(String s) {
    x = random(30, 1160);
    y = 0;
    vitesse = random(5, 10);
    img = loadImage(s);
    decalage = 0;
  }

  Aliment(String s, boolean e) {
    this(s);
    if (e) {
      y = height - 100;
    }
  }

  void miseAJour() {
    x = mouseX - decalage;
  }

  boolean miseAJour(int empilement) {
    if ((x > mouseX - 40) && (x < mouseX + 40) && (y > height - 110 - empilement * img.height / 4) && (y < height - 100 - empilement * img.height / 4)) {
      y = height - 100 - empilement * img.height / 4;
      decalage = mouseX - x;
      return true;
    } else {
      y += vitesse;
      if (y > height) {
        x = random(30, 1160);
        y = 0;
      }
      return false;
    }
  }

  void affichage() {
    image(img, x, y);
  }
}

Hors ligne

 

#15 2015-05-11 18:53:31 Re : Besoin d'aide projet ISN

muse
membre
Date d'inscription: 2015-05-02
Messages: 15

Re: Besoin d'aide projet ISN



Bonjour,
Ah d'accord, oui en effet, j'ai un peu tout mélangé ce qui a crée un gros bug. Merci beaucoup, j'ai regardé des tutos notamment ceux de Shiffman qui sont trés bien
Juste une derniere chose, par quel moyen je pourrais arrêter le jeu ("Game over" ou "You win") lorsque le pain final est posé? (si le pain est posé avant que tous les autres aliments soient déjà attraper alors on a perdu, mais s'il estposé en dernier alors on a gagné)

Dernière modification par muse (2015-05-12 20:10:48)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024