Annonce

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


#1 2014-05-10 14:50:02 Stopper un void pour un autre.

Tagada
nouveau membre
Date d'inscription: 2014-05-10
Messages: 3

Stopper un void pour un autre.



Bonjour, bonsoir !
Je suis actuellement en Terminale S et j'ai un projet ISN à rendre pour bientôt. Malheureusement, il nous reste quelque chose qui bloque et nous ne trouvons pas la solution. Nous avions comme projet de créer un petit jeu où le personnage se déplace sur une carte, est bloqué par les rochers et autres obstacles. Cela est fait. Puis comme nous trouvions ça un peu léger, nous avons ajouté un second niveau. Malheureusement, lorsque le personnage passe à la seconde carte, les obstacles de la première sont toujours actifs. Enfin je vous montre le code actuel, ce sera sans doute plus clair que toutes mes explications.

Les obstacles des deux cartes sont chacun définis dans des void différentes en bas du programme (la seconde carte n'ayant qu'un obstacle - ou buisson - fictif en attendant de régler le problème). Est-il possible de « désactiver » une void quand une seconde est appelée ?

Merci d'avance !

Tagada -

Hors ligne

 

#2 2014-05-10 16:46:53 Re : Stopper un void pour un autre.

Miaou
membre
Date d'inscription: 2014-04-20
Messages: 30

Re: Stopper un void pour un autre.



Je ne sais pas trop si tu veux conserver tes images, mais tu peux jouer sur le "isVisible" true, false. C'est long et tu dois le faire pour chacune des images.

Tu peux jouer avec les boolean. Tu lances une condition, if(niveau1==true) tu lances le niveau 1, puis tu dis niveau1=false et tu lances le niveau 2 de la même façon (ou avec un else si tu en n'as que 2)

Je ne suis pas un expert mais je fais comme ça.

Hors ligne

 

#3 2014-05-10 17:38:32 Re : Stopper un void pour un autre.

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

Re: Stopper un void pour un autre.



Dans la classe Buisson, j'introduirais un autre paramètre celui du niveau :

class Buisson { //buissons
  int x;
  int y;
  int l;
  int h;
  int niveau;

  Buisson(int _niveau, int nouvx, int nouvy, int nouvl, int nouvh) {
    niveau = _niveau;
    x=nouvx;
    y=nouvy;
    l=nouvl;
    h=nouvh;
  }
} //fin class buisson

de même dans la classe de ton personnage, lors des collisions, je j'ajouterais une condition pour savoir si

balle.niveau == b[i].niveau

Petite remarque, quand tu as des sketchs avec des images ou des sons, il est préférable de faire une compression de l'ensemble du répertoire afin de pouvoir tester en condition réelle le sketch.

Hors ligne

 

#4 2014-05-10 19:36:26 Re : Stopper un void pour un autre.

Tagada
nouveau membre
Date d'inscription: 2014-05-10
Messages: 3

Re: Stopper un void pour un autre.



Ouh, merci pour vos réponses rapides ! big_smile

Miaou » Alors oui, pour les boolean, on a testé mais la void du niveau 1 reste toujours active. La void du niveau 2 se « rajoute » simplement par dessus.

Mushussu » J'avoue ne pas avoir trop compris la façon dont « balle.niveau == b[i].niveau » se plaçait. ö

Merci tout de même de votre aide vraiment rapide, et en espérant avoir des éclaircissement !

Hors ligne

 

#5 2014-05-10 23:28:27 Re : Stopper un void pour un autre.

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

Re: Stopper un void pour un autre.



Voilà un exemple de gestion de niveau comme je le disait précédemment :

Personnage perso;
Buisson[][] buissons;

int nombreElement, nombreNiveau;

void setup() {
  size(600, 600);
  nombreNiveau = 5;
  nombreElement = 40;
  buissons = new Buisson[nombreNiveau][nombreElement];
  perso = new Personnage(width / 2, height / 2);
  for (int j = 0; j < nombreNiveau; j++) {
    for (int i = 0; i < nombreElement; i++) {
      buissons[j][i] = new Buisson(j, (int)random(width), (int)random(height));
    }
  }
  noStroke();
}

void draw() {
  background(255);
  for (int i = 0; i < nombreElement; i++) {
    buissons[perso.niveau][i].affichage();
  }
  perso.affichage();
}

class Personnage {
  int x, y, r;
  int niveau;

  Personnage(int _x, int _y) {
    x = _x;
    y = _y;
    niveau = 0;
    r = 10;
  }

  void affichage() {
    fill(255, 0, 0);
    ellipse(x, y, 2 * r, 2 * r);
  }
}

class Buisson {
  int x, y, r;
  int niveau;

  Buisson(int _niveau, int _x, int _y) {
    niveau = _niveau;
    x = _x;
    y = _y;
    r = 20;
  }

  void affichage() {
    fill(0, 255, 0);
    ellipse(x, y, 2 * r, 2 * r);
  }
}

void keyPressed() {
  int dx = 0;
  int dy = 0;
  if (key == ' ') {
    perso.niveau++;
    if (perso.niveau == nombreNiveau) {
      perso.niveau = 0;
    }
  }
  if (keyCode == UP) {
    dx = 0;
    dy = -4;
  }
  if (keyCode == DOWN) {
    dx = 0;
    dy = 4;
  }
  if (keyCode == LEFT) {
    dx = -4;
    dy = 0;
  }
  if (keyCode == RIGHT) {
    dx = 4;
    dy = 0;
  }
  boolean test = false;
  for (int i = 0; i < nombreElement; i++) {
    if (dist(perso.x + dx, perso.y + dy, buissons[perso.niveau][i].x, buissons[perso.niveau][i].y) < (perso.r + buissons[perso.niveau][i].r)) {
      test = true;
      break;
    }
  }
  if (!test) {
    perso.x += dx;
    perso.y += dy;
  }
}

La simulation du changement de niveau se fait par la touche espace.

Je te recommande la lecture de ce post pour générer les niveaux :
http://codelab.fr/4974

Dernière modification par Mushussu (2014-05-11 00:52:05)

Hors ligne

 

#6 2014-05-12 20:45:26 Re : Stopper un void pour un autre.

Tagada
nouveau membre
Date d'inscription: 2014-05-10
Messages: 3

Re: Stopper un void pour un autre.



Re-bonjour !
Alors merci pour ces plus amples explications, nous sommes en train d'essayer de le mettre en pratique. Nous repasserons sans doute pour de nouvelles questions, toutefois. big_smile
Merci encore pour l'aide apportée !

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024