Partage
  • Partager sur Facebook
  • Partager sur Twitter

Déplacement à la space invader

Aide pour un algo

    18 mars 2010 à 20:02:53

    Salut tout le monde,

    Je suis en train de coder un petit jeu pour mobile en java (un "clone" de space invader) et je bloque actuellement sur l'algo de déplacement des ennemis.

    Je voudrais que le monstre fasse cela :
    - Descendre jusqu'à un point donné.
    - Se déplace sur la droite jusqu'à un point x maximal.
    - Descende de y pixels.
    - Se déplace sur la gauche jusqu'à un point x minimum qui sera aléatoire.
    - Descende jusqu'en bas de l'écran.

    J'ai testé plusieurs algos "fait maison" mais je n'ai vraiment rien trouvé de probant. Ma dernière version est surement la pire niveau logique de programmation mais c'est celle qui marche le mieux à vrai dire ... (sauf que le monstre bloque sur la dernière position aléatoire).

    Je vous poste la méthode en question et espère que vous saurez m'aider ! Merci d'avance pour vos conseils

    public void move()
        {
            // Trying to do some stupid movements in order to confuse the player
            // this.xLastScrollDown = xRandom.nextInt(200); -> Variable déclarée précédemment
            
            if (this.y >= 0 && this.y < 60)
            {
                this.y += 1;
            }
            if (this.y == 60)
            {
                this.x +=1;         
            }
            if (this.x == 220)
            {
                this.y += 1;
            }
            if (this.y == 120 && this.x != this.xLastScrollDown)
            {
                this.x -= 1;
            }
            if (this.x == this.xLastScrollDown && this.y == 120)
            {
                this.y += 1;
            }
                
        }
    
    • Partager sur Facebook
    • Partager sur Twitter
      19 mars 2010 à 12:46:01

      Proposition d'algo
      crée un classe position contenant x et y et une méthode next retournant la prochaine position.
      L'interet est des tester facilement les collisions.
      Ca ressemblerait à un truc du genre :

      public class Position {
      	private int x, y;
      	private int direction;
      
      	public Position() {
      		this.x = 0;
      		this.y = 0;
      		this.direction = 1;
      	}
      
      	public Position nextPosition() {
      		Position p = new Position();
      		// initialisation selon l'axe des y;
      		if (this.y >= 0 && this.y < 60) {
      			p.setY(60);
      			return p;
      		}
      		// le monstre se déplace entre 0 et 220
      		if (this.y <= 120) {
      			p.setY(this.y);
      			if (this.x==220){
      				p.setDirection(-1);
      			}
      			if (this.x==0){
      				p.setDirection(1);
      			} 
      			p.setX(this.x+p.getDirection()*1);
      			return p;
      		}
      		// le monstre a atteint le bas de l'écran, il n'existe pas de position
      		// suivante
      		return null;
      	}
      
      	public void setX(int x) {
      		this.x = x;
      	}
      
      	public int getX() {
      		return x;
      	}
      
      	public void setY(int y) {
      		this.y = y;
      	}
      
      	public int getY() {
      		return y;
      	}
      
      	public void setDirection(int direction) {
      		this.direction = direction;
      	}
      
      	public int getDirection() {
      		return direction;
      	}
      }
      


      Vu que tu précisais pas tes axes, j'ai imaginé que l'axe tu avais pris des axes classiques et que tu le y == 60 correspondait par exemple au point de départ de tes monstres.
      Je ne savais pas non plu ce qu'était ton xLastScrollDown du coup je l'ai ignoré ^^

      C'est du code non testé, fait à la volée, c'est plus pour l'idée :)
      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2010 à 12:31:37

        Salut !

        Désolé de pas avoir répondu avant, j'étais pas mal occupé ! J'ai tenté d'implémenter ta solution et ça marche plutôt pas mal donc je passe le sujet en résolu ! Merci pour le coup de pouce :)
        • Partager sur Facebook
        • Partager sur Twitter

        Déplacement à la space invader

        × 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