Annonce

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


#1 2017-04-13 13:56:11 ISN projet bac snake sur processing

Léa54
nouveau membre
Date d'inscription: 2017-04-13
Messages: 3

ISN projet bac snake sur processing



Bonjour,
Pour le projet bac en ISN mon amie et moi avons commencé un Snake sur Processing, seulement nous ne sommes vraiment pas très douées, et nous avons beaucoup de mal à avancer...
Voilà tout d'abord nos variables :

//Définition des variables

Case monSerpent = new Case(300, 300);

void setup() {
  size (600, 600);
  background(255);
}

void draw () {
  background(255);
  monSerpent.Dessiner();
}

//Mouvement Clavier
void keyPressed ()
{
  if (keyCode == LEFT) monSerpent.deplacement(-20, 0, 4);
  if (keyCode == RIGHT) monSerpent.deplacement(20, 0, 2);
  if (keyCode == UP) monSerpent.deplacement(0, -20, 1);
  if (keyCode == DOWN) monSerpent.deplacement(0, 20, 3);
}

et nous avons fais une classe case (pour les cases qui constituent le corps du serpent ):

class Case
{
  //Déclaration des paramètres des cases du serpent

  int SposX;
  int SposY;
  int largeurcase;
  int hauteurcase;
  int nbrCase=2;
  int Direction;
  int OldDirection;

  Case (int posX, int posY)
  {
    largeurcase = 20;
    hauteurcase = 20;
    SposX = posX;
    SposY = posY;
    nbrCase++;
    OldDirection = 0;
  }

  void Dessiner () {
    rect (SposX, SposY, largeurcase, hauteurcase);
    fill (150, 220, 60);
  }

  //Bords
  void deplacement(int depX, int depY, int Direction ) {
    boolean bAutoriserMouvement = false; // flag opermettant de savoir si le mouvement est possible


    println("Direction : " + Direction  + '\t' + "OldDirection : " + OldDirection);
    if (Direction%2 != OldDirection%2) {  //si direction pas sur le meme axe : OK
      bAutoriserMouvement = true;
      println("autoriser deplacement...");
    } else {  //Sinon
      if (Direction == OldDirection) {  //si direction dans le meme sens : OK
        bAutoriserMouvement = true;
        println("autoriser deplacement...");
      } else {  //sinon
        //on "recule" : inverse de l'ancienne direction : IM-PO-SSIBLEEEEE
        bAutoriserMouvement = false;
        println("NIET !!!!!...");
      }
    } 


    if (bAutoriserMouvement == true) {  //je suis autorisé à me déplacer
      println("Modification deplacement...");
      if (Direction == 4) SposX = SposX+depX;     //dep vers gauche
      if (Direction == 2) SposX= SposX+depX;     //dep vers droite
      if (Direction == 1) SposY=SposY+depY;     //dep vers le haut
      if (Direction == 3) SposY=SposY+depY;    //dep vers le bas
     
      //Limites Bords
       if (SposX<0) SposX=0;             //Bord gauche
       if (SposY>600-20) SposY=600-20;   //Bord Bas
       if (SposX>600-20) SposX=600-20;   //Bord droite
       if (SposY<0)  SposY=0;            //Bord Haut
       
      OldDirection = Direction;    //sauvegarde ma nouvelle direction
    }
  }
}

Pour augmenter la taille du serpent, notre prof nous a dit de faire un tableau, seulement on ne comprend pas vraiment comment faire avec ça...
S'il-vous plaît, quelqu'un pourrait nous aider ce serai très gentil...

Hors ligne

 

#2 2017-04-13 21:43:32 Re : ISN projet bac snake sur processing

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

Re: ISN projet bac snake sur processing



Bonsoir,

Beau projet. C'est bien de vouloir utiliser les classes, mais il me semble que ce n'est pas à bon escient. Un serpent est une suite de carré, caractérisés par leur position. Comme la taille du serpent est amenée à s'agrandir, il est préférable d'utiliser les ArrayList pour stocker l'information.
Un outil très puissant pour les positions est la classe PVector. Nous pouvons soustraire des vecteurs pour trouver des directions.
J'ai simulé l'ajout d'anneau du serpent avec la barre espace. Je suis certain que des questions se présenteront. N'hésitez à me les poser.

ArrayList<PVector> serpent;

int tailleCase = 20;
PVector direction;
int vitesse = 1;

void setup() {
  size(800, 800);
  frameRate(10);
  serpent = new ArrayList<PVector>();
  serpent.add(new PVector(10, 10));
  direction = new PVector(1, 0);
}

void draw() {
  background(255);
  for (PVector p : serpent) {
    fill(255, 0, 0);
    rect(p.x * tailleCase, p.y * tailleCase, tailleCase, tailleCase);
  }
  for (int i = serpent.size() - 1; i > 0; i--) {
    serpent.get(i).set(serpent.get(i - 1));
  }
  serpent.get(0).add(direction);
}

void keyPressed () {
  if (keyCode == LEFT) direction.set(-1, 0);
  if (keyCode == RIGHT) direction.set(1, 0);
  if (keyCode == UP) direction.set(0, -1);
  if (keyCode == DOWN) direction.set(0, 1);
  if (key == ' ') {
    grandirSerpent();
  }
}

void grandirSerpent() {
  PVector dir;
  if (serpent.size() > 2) {
    dir = PVector.sub(serpent.get(serpent.size() - 1), serpent.get(serpent.size() - 2));
  } else {
    dir = direction;
  }
  PVector p = serpent.get(serpent.size() - 1);
  serpent.add(PVector.sub(p, dir));
}

Hors ligne

 

#3 2017-04-14 12:55:10 Re : ISN projet bac snake sur processing

Léa54
nouveau membre
Date d'inscription: 2017-04-13
Messages: 3

Re: ISN projet bac snake sur processing



Bonjour,
Merci beaucoup, mais j'ai une question je ne comprends pas très bien le fonctionnement d'ArrayList... Pouvez-vous m'expliquez s'il-vous-plaît ?

Hors ligne

 

#4 2017-04-14 14:22:23 Re : ISN projet bac snake sur processing

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

Re: ISN projet bac snake sur processing



L'ArrayList est un tableau dynamique, c'est-à-dire que l'on peut facilement lui ajouter des éléments et les manipuler.

ArrayList<PVector>  serpent = new ArrayList<PVector>();

Créer une liste vide d'objet PVector.
Ensuite dans le programme, j'utilise la méthode add() qui permet d'ajouter un élément à cette liste.
J'utilise aussi la méthode get() qui permet d'aller chercher un élément de la liste en fonction de son indice et enfin la méthode size() qui permet de connaître le nombre d'élément contenus dans cette liste.

Vous avez sans doute appris la boucle for. Nous pouvons utiliser d'une autre manière :

for (PVector p : serpent)

C'est une boucle sans indice, cette boucle va parcourir tout les éléments de la liste. La variable p ainsi figurera chacun des éléments de la liste.

for (int i = serpent.size() - 1; i > 0; i--) {
    serpent.get(i).set(serpent.get(i - 1));
  }

C'est une boucle qui part du dernier élément de la liste pour aller jusqu'au deuxième, ainsi chaque élément prend les coordonnées de son prédécesseur dans la liste.

Hors ligne

 

#5 2017-04-14 21:36:22 Re : ISN projet bac snake sur processing

Léa54
nouveau membre
Date d'inscription: 2017-04-13
Messages: 3

Re: ISN projet bac snake sur processing



Merci beaucoup cela m'aide bien, c'est très gentil.

Hors ligne

 

#6 2017-05-04 23:54:05 Re : ISN projet bac snake sur processing

Pilou
membre
Date d'inscription: 2014-07-15
Messages: 73

Re: ISN projet bac snake sur processing



C'est pas en Processing mais cela donne des idées! wink





lien vers la page de la vidéo sur youtube

Dernière modification par Pilou (2017-05-04 23:54:24)


Est beau ce qui plaît sans concept
Petit site

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2017