Annonce

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


#1 2015-01-13 11:24:39 PacMan

ClaireT
nouveau membre
Date d'inscription: 2015-01-12
Messages: 2

PacMan



Bonjour à tous !
Je suis pas très douée dans tout ce qui est programmation et pour le coup je galère un peu (ou beaucoup !) à réaliser un jeu type PacMan, j'ai plein d'erreurs que je ne comprend pas, est ce que quelqu'un aurait l'amabilité de jeter un coup d'œil et m'expliquer un peu pourquoi rien ne marche ? big_smile

class Creature {                    //ma class creature
  color c;
  int x;
  int y;
 
  Creature (int X,int Y, color C){  //Mon constructeur
     X = x;
     Y = y;
     C = c;
   
  }
    void Dessiner () {              //Dessine PacMan
      fill (255,200,0);
      ellipse(x,y,30,30);
      fill (0);
      ellipse (x+5,y-10,5,5);
    }
 
  void Position () {              //Prend les positions du PacMan
    int xX;
    int yY;
   int Positions [] [] = new int [10] [10];
  for (int i=0; i<10;i++) {
  for (int j = 0; j <10;j++) {
    xX = x;
    yY = y;
        Positions [i][j] = Positions [xX] [yY];
  }}
 
     }
     
    void Bouge() {                  //Mouvements du Pac Man
      if (keyPressed){
      if (keyCode == RIGHT ){ x = x+2;}
      if (keyCode == LEFT ) { x = x-2;}
      if (keyCode == UP)    { y = y-2;}
      if (keyCode == DOWN)  { y = y+2;}
    }}
  }
 

     class checkpoint {
    int x =int (random(300));
    int y=int (random(300));

   //void Atout () {
   // }   En fonction de la couleur; 5 neutral= ; 80% -> rien; 15% -> vitt PacM augmente pdt 100 pas; 5% -> bouclier pdt 50 pas;

    void check() {
      fill(255);
      ellipse (x, y, 5, 5);
    }
     void Poscheck () {              //Prend les positions du PacMan
    int xX;
    int yY;
   int Poscheck [] [] = new int [10] [10];
  for (int i=0; i<10;i++) {
  for (int j = 0; j <10;j++) {
    xX = x;
    yY = y;
        Poscheck [i][j] = Poscheck [xX] [yY];
  }}}}
   

 
  class Fantome {
   
  int x;
  int y;
  int incx=5;
  int incy=5;
  color c;
int a = int (random (2));

  Fantome (int x_, int y_, int inc_, int inc__, color c_) {
    x=x_;
    y=y_;
    incx=inc_;
    incy=inc__;
    c=c_;
  }

  void Fantom () {
    fill(c);
    rect (x, y, 20, 20);
  }
 
  void PositionFant () {

     int Pos2 [][] = new int [10][10];
     for (int i=0; i<10;i++){
       for (int j=0;j<10;j++) {
       Pos2[i][j] = Pos2 [x][y];   
     }}}
     
  void bouger () {   
   
    if (a==1) {
      incy =0;
    } else {
      incx = 0;
    }
   
      x = x +incx;
      if ((x > height) || (x< 0 )) incx = incx * (-1);
      y = y +incy;
      if ((y > height) || (y< 0 )) incy = incy * (-1);
    }
  }
  int nbFant = int(random(10)+1);
  Creature PacMan = new Creature (int(random(width)),int(random(height)),color(255,200,0));
  Fantome [] Ghost = new Fantome [nbFant];
   int nbcheck = 10;//Entry.getInt("nombre de checkpoint ?");
  checkpoint[] cp = new checkpoint [nbcheck];
  int Grid [][] = new int [width][height];

  void setup () {
    size (500,500);
    background(0);
      for (int i = 0; i<nbFant; i++) {   
      Ghost [i]= new Fantome (int (random(width)), int (random (height)), int (1), int (1), color(int (random(255)), int (random(255)), int (random(255))));
    }
      for (int i=0; i<nbcheck; i++) {
      cp[i] = new checkpoint();
    }
   
   PImage GO;
int y;

//PacMan[i][j].Position();
//Ghost[i][j].PositionFant();
//cp[i][j].Pos();

for (int i = 0; i <width; i++) {    // determiner les coordonnées de pacman, fantome...
  for (int j = 0; j<height; j++) {
    //Grid [i][j] =
    //Si les coordonnées de pac man sont les mêmes qu'une piece, celle ci est retirée (tableau de nombre - 1 ?)
     if (PacMan [i][j] = cp[i][j]) {
       nbcheck = nbcheck - 1;
     }
     //Si les coordonnées de pacMan sont les mêmes que ceux d'un fantome ==> fin img Game Over press entree pour reommencer esc pour quitter
     if (pacman [i][j] = Fant[i][j]) {
       GO = loadImage("game-over.jpg");
       background(GO);
       stroke(226, 204, 0);
       line(0, y, width, y); 
       y++;
       if (y > height) {
          y = 0;
  } Println ("Appuyer sur 'B' pour quitter");
  if(keyPressed) {
    if (keyCode == 'B') {
      exit();
    }
    }}}}}
   

 
  void draw() {
    background(0);
    PacMan.Dessiner();
    PacMan.Bouge();
   
    for (int i = 0; i< nbFant; i++) {
    Ghost[i].Fantom();
    Ghost[i].bouger();
    }
    for (int i=0; i<nbcheck; i++) {
      cp[i].check();
    }
   
   
}

Merci !! big_smile

Hors ligne

 

#2 2015-01-13 13:28:53 Re : PacMan

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

Re: PacMan



Bonjour,

C'est chouette de se lancer dans un projet.
Il y a des passages que je ne comprends pas. Je vais essayer de débroussailler cela.
Ce passage n'a rien à faire dans le setup().

La méthode setup() sert à initialiser les valeurs.
Pour vérifier les collisions entre les protagonistes, il faut que cette vérification se passe dan,s la boucle draw().
Comme par exemple ceci :

  for (int i = 0; i< nbFant; i++) {
    Ghost[i].Fantom();
    Ghost[i].bouger();
    if (dist(Ghost[i].x, Ghost[i].y, PacMan.x, PacMan.y) < 15) {
      println("Fin de la partie");
      noLoop();
    }
  }

Ton code est difficile à lire, tu jongles entre des variables en tançais en anglais, il faut faire un choix. Je te recommande le français.
D'autre part, il y a des conventions typographiques en Processing le nom des variable. Elle commence par une minuscule et tout les mots suivants l'initiale est en majuscule. Ex : maVariableAdoree
Pour le nom des classes, même la première lettre est en majuscule (Ex : MonNomDeClasse).
Les noms de tes méthodes doivent être cohérents. bouger(), dessiner() pour chaque classe.

Que veux-tu faire avec les méthodes PositionFant (), Poscheck () et Position () ?

Hors ligne

 

#3 2015-01-15 11:43:35 Re : PacMan

ClaireT
nouveau membre
Date d'inscription: 2015-01-12
Messages: 2

Re: PacMan



Merci !!! Oui oui j'suis un peu dans la mouise avec ce projet ! ^^ Les méthodes positions, c'était pour enregistrer les position de chaque objet et les comparer par la suite ( c'est là que je me suis carrément noyée ;-)), du coup ce que tu as marqué me parait presque évident ! ^^ Merci encore !

Hors ligne

 

#4 2015-01-15 20:55:43 Re : PacMan

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

Re: PacMan



Bonsoir, tu peux utiliser les PVector pour faciliter l'organisation de ton programme. Voilà ce que j'ai fait à partir de timon idée :

int nbFant = int(random(10)+1);
Creature pacMan;
Fantome [] ghost = new Fantome [nbFant];
int nbcheck = 10;//Entry.getInt("nombre de checkpoint ?"); 
Checkpoint[] cp = new Checkpoint [nbcheck];
int grille [][] = new int [width][height];

void setup () {
  size (500, 500);
  pacMan = new Creature (int(random(width)), int(random(height)), color(255, 200, 0));
  for (int i = 0; i<nbFant; i++) {   
    ghost [i]= new Fantome (int (random(width)), int (random (height)), int (1), int (1), color(int (random(255)), int (random(255)), int (random(255))));
  }
  for (int i=0; i<nbcheck; i++) {
    cp[i] = new Checkpoint();
  }
  rectMode(CENTER);
}

void draw() {
  background(0);
  if (keyPressed) {
    if (keyCode == RIGHT ) { 
      pacMan.modifierX(2);
    }
    if (keyCode == LEFT ) { 
      pacMan.modifierX(-2);
    }
    if (keyCode == UP) { 
      pacMan.modifierY(-2);
    }
    if (keyCode == DOWN) { 
      pacMan.modifierY(2);
    }
  }
  pacMan.Dessiner();
  for (int i = 0; i< nbFant; i++) {
    ghost[i].dessiner();
    ghost[i].bouger();
    if (PVector.dist(ghost[i].position, pacMan.position) < 15) {
      println("Fin de la partie");
      noLoop();
    }
  }
  for (int i=0; i<nbcheck; i++) {
    cp[i].check();
  }
}

class Creature {                    //ma class creature
  color couleur;
  PVector position;

  Creature (int x, int y, color c) {  //Mon constructeur
    position = new PVector(x, y);
    couleur = c;
  }

  void Dessiner () {              //Dessine pacMan
    fill (couleur);
    ellipse(position.x, position.y, 30, 30);
    fill (0);
    ellipse (position.x + 5, position.y - 10, 5, 5);
  }

  PVector position() {              //Prend les positions du pacMan
    return position;
  }

  void modifierX(int x) {
    position.x += x;
  }

  void modifierY(int y) {
    position.y += y;
  }
}


class Checkpoint {
  PVector position;

  Checkpoint() {
    position = new PVector(int(random(300)), int(random(300)));
  }
  //void Atout () {
  // }   En fonction de la couleur; 5 neutral= ; 80% -> rien; 15% -> vitt PacM augmente pdt 100 pas; 5% -> bouclier pdt 50 pas;

  void check() {
    fill(255);
    ellipse(position.x, position.y, 5, 5);
  }
}

class Fantome {
  PVector position, vitesse;
  color couleur;
  int a = int (random (2));

  Fantome (int x, int y, int vx, int vy, color c) {
    position = new PVector(x, y);
    vitesse = new PVector(vx, vy);
    couleur = c;
  }

  void dessiner () {
    fill(couleur);
    rect(position.x, position.y, 20, 20);
  }

  PVector position() {
    return position;
  } 

  void bouger () {   
    position.add(vitesse);
    if ((position. x > width) || (position.x < 0)) {
      vitesse.x *= -1;
    }
    if ((position. y > height) || (position.y < 0)) {
      vitesse.y *= -1;
    }
  }
}

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2025