IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

Tableau d'images et gestion d'un aller-retour


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 15
    Par défaut Tableau d'images et gestion d'un aller-retour
    Bonjour à tous,

    pour ma 2ème année de DUT, je dois réaliser un jeu 2D (puis 3D par la suite) en POO. J'ai donc commencé à développer une partie de ce jeu très simple, mais je bloque à pas mal d'endroits malheureusement, je ne suis pas un expert dans ce domaine, de ce fait je viens trouver un peu d'aides auprès de cette communauté pour essayer de me débloquer et avancer durant ces vacances !

    Voici mais soucis, pour placer le contexte, il s'agit donc d'un jeu 2D de plateforme qui se joue en scrolling horizontal, un simple Mr Cornichon qui doit esquiver des ennemis, sauter d'une plateforme à une autre et éviter les trous pour atteindre le bout du niveau (oui, si j'arrive à finir un niveau entier sans aucun bug ce sera un grand pas pour moi).

    J'ai 4 classes : Game, Personnage, Monstre et Level.

    Je suis désolé mais j'ai une tonne de question, je tente de chercher tous les jours jusqu'à pas d'heures, mais j'ai vraiment beaucoup de mal et peu de temps =/ ...

    * Dans Monstre, j'ai un soucis avec ma méthode allerretour, le monstre ne fonctionne que pour l'aller, mais une fois la limite de l'aller dépassée, il ne revient pas en arrière et pas moyen de trouver pourquoi... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    public class Monstre {
     
    	private int x=0;
    	private int y=0;
    	private int posx=250;
    	private int posy=200;
    	private int t=0;
    	private boolean gauche = false;
    	private int Vx=0;
    	Image imgD;
    	Image imgG;
     
    	public Monstre(int x, int y) {
    		super();
    		this.x = x;
    		this.y = y;
    		this.Vx = posx + Vx;
    		this.t=0;
    		try {
    			imgD = ImageIO.read(new File("ennemiD.png"));
    			imgG = ImageIO.read(new File("ennemiG.png"));
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
     
    	public void paint(Graphics g) {
    		if (gauche){
    			g.drawImage(imgG,posx,posy,null);
    		} else {
    			g.drawImage(imgD,posx,posy,null);
    		}
    	}
     
     
    	public void droite() { Vx = +5; gauche = false; }
    	public void gauche() { Vx = -5; gauche = true; }
     
    	public void allerretour(){
    		t=(t+1) % 100;
    		if (t<=200){
    			droite();
    		} else {
    			gauche();
    		}
    	}
     
    	public void act() {
    		allerretour();	
    		posx = posx+Vx;
    	}
    }

    * Je ne trouve pas aussi le comment afficher des images différentes dans un tableau, et afficher ces images aléatoirement pour tracer le level (des blocs d'images qui font toutes 50x50). Ma méthode actuelle n'est pas terrible car je vais utiliser une dizaine d'images :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public class Level {
    	int [][] t;
    	Image img;
    	Image one;
    	Image two;
    	Image three;
     
    	public Level() {
    		super();
    		int tab [][] = {{1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0},
    				{1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,0}};
    		t = tab;
     
    		try {
    			img = ImageIO.read(new File("Decor.png"));
    			one = ImageIO.read(new File("1.png"));
    			two = ImageIO.read(new File("2.png"));
    			three = ImageIO.read(new File("3.png"));
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    	}
     
    	public void paint(Graphics g) {
    		g.drawImage(img,0,0,null);
     
    		for(int i = 0 ; i<t.length ; ++i) {
    			for(int j = 0 ; j<t[i].length ; ++j) {
    				if(t[i][j] == 1){
    					//g.fillRect(j*50, i*50, 50, 50);
    					g.drawImage(one, j*50, i*50, 50, 50, null);
    				} else if(t[i][j] == 10){
    						g.drawImage(two, j*50, i*50, 50, 50, null);
    					} else if(t[i][j] == 11){
    						g.drawImage(three, j*50, i*50, 50, 50, null);
    					}
    				}
    			}
     
    		}
    }
    Voila, je vous serais vraiment reconnaissant si vous pouviez m'aider =) (et désolé pour la longueur du message, j'ai tenté de faire aussi court que possible)

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Le problème est la, me semble-t-il:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    t=(t+1) % 100;
    		if (t<=200){
    			droite();
    		} else {
    			gauche();
    		}
    t comme tu fait un modulo 100 ne sera du coup jamais supérieur à 200. Et donc tu ne passera jamais dans le else.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 15
    Par défaut
    Ah oui exact, mercii =) !, du coup j'ai mis ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    t++;
     
    if (t<=200){
    	droite();
    } else {
    	gauche();
    }
    Mais par contre pour définir une limite quand il part vers la gauche et qu'il reparte de nouveau vers la droite ?

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    bah modulo 200 parait
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    En imaginant que tu veuilles que :
    - le personnage aille "a gauche" quand t vaut 0 a 100
    et que
    - le personnage aille "a droite" quand t vaut 100 a 200.

    Alors tu auras un cycle qui dure 200. Donc ton modulo tu fais

    t%200 de telle manière a faire a avoir t qui va de 0 a 200 en bouclant.

    et dans ton if tu fais comme tu faisais avant.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 15
    Par défaut
    Ahh merci beaucoup wax78, ça marche nickel =) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void allerretour(){
    		t= (1 + t) % 200;
    		if (t<=100){
    			droite();
    		} else {
    			gauche();
    		}
    	}
    Juste par contre du coup le sprite qui fais l'allez-retour avance un peu à chaque fois qu'il fait un tour de boucle. Je me doute qu'il s'agisse du , mais si je met que ça ne fonctionne plus =/.

    Et sinon, tu n'aurais pas une petite idée pour mon autre petit soucis dans mon 1er message ?

  7. #7
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Pour ton second problème,

    Tu peux utiliser un tableau ou une liste d'image :
    Si tu as une matrice que représente ton niveau tu pourrai faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int[][] niveau = {{1,0},{2,3}};
    // Déclaration du tableau foireux, je déclare jamais de tableau
    Image[] imageNiveau= new Image[5];
    imageNiveau[0]= ImageIO.read(new File("Decor.png"));
    imageNiveau[1]= ImageIO.read(new File("1.png"));
    imageNiveau[2]= ImageIO.read(new File("2.png"));
    imageNiveau[3]= ImageIO.read(new File("3.png"));
     
    //utilisation :
    for(int i = 0 ; i<t.length ; ++i) {
         for(int j = 0 ; j<t[i].length ; ++j) {
              g.drawImage(imageNiveau(niveau [i][j]), j*50, i*50, 50, 50, null);
    Tu peux faire la même chose avec un liste clé/valeur que je te conseil.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

Discussions similaires

  1. Tableau d' images, est-ce que c'est possible ?
    Par awane dans le forum WinDev
    Réponses: 8
    Dernier message: 27/11/2006, 20h10
  2. Faire un tableau d'images
    Par Battosaiii dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 19/06/2006, 10h56
  3. tableau et image
    Par casafa dans le forum Langage
    Réponses: 2
    Dernier message: 27/04/2006, 20h52
  4. [HTML] [Débutant] Tableau et images
    Par skandas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 07/06/2005, 01h01
  5. Tableau et image
    Par jean78000 dans le forum C++Builder
    Réponses: 3
    Dernier message: 01/11/2004, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo