Bonjour, je cherche une fonction java pour faire déplacer un objet dans un tableau 2D d'objets en java.Est-ce possible?
Version imprimable
Bonjour, je cherche une fonction java pour faire déplacer un objet dans un tableau 2D d'objets en java.Est-ce possible?
bonsoir,
faut 2 boucles for pour pouvoir parcourir chaque élément
D'accord merci.Autre chose si tu pouvais me renseigner. J'ai envoyé en fichier joint l'intitulé de mon projet.Si tu as le temps de regarder merci.
Ce que je voulais savoir en fait c'est lors de mon projet, je dois créer plusieurs classes(hopital,medecin) etc. Avec ces classes je crée des objets que je dois insérer aléatoirement dans mon tableau 2D pour l'initialiser.
Comment faire cela?
A part faire tableau2D[0][0]=new Medecin(parametres) par exemple, je ne vois pas trop comment faire. Je nvois pas ou faire l'initialisation en fait, dans quelle classe je dois la faire ?
J'ai pas tout compris mais peut-être que ça peut ressembler à ça :
et à chaque appel de createRandomObject(), tu crées un objet au hasard.Code:
1
2
3
4
5
6 for(...) { for(...) { tableau2D[i][j] = createRandomObject(); } }
En fait, le tableau ne doit pas obligatoirement être remplit totalement. Il faut que je dispose un certain nombre d'objets aléatoirement dans le tableau 2D.
Voici le lien ou j'ai joint mon projet. Si tu as le temps.
http://www.developpez.net/forums/d84...ition-classes/
Citation:
Il faut que je dispose un certain nombre d'objets aléatoirment dans le tableau 2D.
Code:
1
2
3
4
5
6
7
8
9
10 n = 0; while(n < à un certain nombre) { n++; x = randomX(); y = randomY(); if(tableau2D[x][y] == null) { tableau2D[x][y] = createRandomObject(); } }
Merci.Mais je vais être plus clair.
Je veux disposer un nombre aléatoire d'objets dans le tableau. Cependant je connais la nature de mes objets. Ce sont soit un hopital, soit un medecin, soit un non medecin. Je connais les objets. Comment faire pour tirer aléatoirement au sort parmi ces 3 objets ?
Si tu as seulement 3 types d'objets dans ton tableau, dans createRandomObject il suffit de generer un nombre compris entre 0,2 et selon la valeur generee tu vas creer l'objet correspondant.
Par exemple
Citation:
Valeur Objet
0 Hopital
1 Medecin
2 Non medecin
Comment générer ce nombre aléatoire de int compris entre 1 et 3 par exemple.Comme ceci ?
private int minimum=1;
private int maximum=3
nombre=Math.round(minimum+Math.random()*(maximum-minimum));
En faisant comme ceci je n'aurais jamais la valeur 2 tiré aléatoirment.
Si c'est bon ce code marche !
Dans la fonction CreateRandomObject je vérifie les valeurs du nombre aléatoire et selon le résultat je retourne 3 objets différents. Je dois créer mes objets dans la fonction CreateRandomObject donc avec un new et l'appel au constructeur de la classe correspondante ..etc
Au lieu de
avecCitation:
Dans la fonction CreateRandomObject je vérifie les valeurs du nombre aléatoire et selon le résultat je retourne 3 objets différents. Je dois créer mes objets dans la fonction CreateRandomObject donc avec un new et l'appel au constructeur de la classe correspondante ..etc
Tu peux faire ceciCode:
1
2
3
4
5 private int minimum=1; private int maximum=3 nombre=Math.round(minimum+Math.random()*(maximum-minimum));
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int r = generator.nextInt(); // Generation d'un nombre aleatoire entre 1 et 3 int value = generator.nextInt(3) + 1; switch (value) { case 1: return Hopital; // Objet Hopital case 2: return Medecin; case 3: return NonMedecin; default: throw new RunTimeException("Objet inconnu"); }
A quoi sert ton r =generator.nextInt()?
Et ceci throw new RunTimeException("Objet inconnu");
J'aimerai aussi savoir et c'est surtout ça le truc principal,c'est comment je vais pouvoir déplacer mes objets dans le tableau. L'énoncé me dit que c'est en appuyant sur une touche que les objets doivent se déplacer.Ils peuvent se déplacer sur une des 8 cases qui entourent la case ou est l'objet à l'état initial. Je ne vois pas comment faire.
Métons à plus tard le problème deLimitons le problème àCitation:
c'est en appuyant sur une touche que les objets doivent se déplacer
Cela dépend beaucoup de ta modélisation mais par exemple la signature de la méthode peut ressembler à ça :Citation:
comment je vais pouvoir déplacer mes objets dans le tableau ?
Code:déplacerElement(Tableau tab, Element element, int nombreCasesVertical, int nombreCasesHhorizontal)
D'accord et en remplaçant Element element par Objet objet par exemple.
Si tu préfères, ça ne change rien sur le principe, c'est juste un peu moins fin.
BOn je commence^^. Avant tout (avant de faire la fonction déplacer), je voudrais créer mon tableau d'objets et insérer les objets dedans.
Ce que j'ai fait : J'ai créé la fonction Object CreateRandomObject qui choisit un nombre entre 1 et 3 et qui selon ce nombre retourne 3 objets différents.Cependant est-ce que je dois créer mes objets dans cette fontion en faisant appel aux constructeurs des classes?
En faisant case 1: return Hopital hop=new Hopital()?
Est ce que ma déclaration du tableau est bonne? ==> protected Object carte= new Object[20][20];
Merci de m'aider !
Code:
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 while(i<nombre_objets) { x=generator.nextInt(20)+1; y=generator.nextInt(20)+1; if(carte[x][y]=null) { carte[x][y]=CreateRandomObject(); } } Object CreateRandomObject() { value=generator.nextInt(3)+1; switch(value) { case 1: return Hopital; break; case 2: return Medecin; break; case 3: return Non_medecin; break; } }
Desole j'etais trop vite: il faut remplacer cette ligneCitation:
A quoi sert ton r =generator.nextInt()?
Par celle-ciCode:
1
2 int r = generator.nextInt();
Code:
1
2 Random generator = new Random();
sert dans le cas ou le nombre genere n'est pas conforme (dans 1-3 intervalle).Citation:
Et ceci throw new RunTimeException("Objet inconnu");
Donne-nous ton programme ou tes classes toutes entieres. En attendant, a mon avis, tu dois:
- declarer les 3 classes pour tes 3 objets Hopital, Medecin et NonMedecin
- ecrire une fonction retournant un objet aleatoire (CreateRandomObject)
- ecrire une fonction generant ton tableau 20x20 remplis des objets crees d'une maniere aleatoire (faire attention aux indices commencant a 0)
- C'est un algo a faire: En resume: pour le deplacement d'un objet de 8 cases autour, tu dois verifier certaines choses:
a) combien de possibilites (de cases) que cet objet peut se deplacer
b) est-ce-que la case destination choisie est libre ou non (elle est occupee si un autre objet y est)
c) si ces conditions sont verifiees alors tu fais le deplacement de cet objet vers la case finale en affectant l'objet dans cette case et mettant la case originale a nulle
Voici ma classe Objet, c'est la classe mère, toutes mes autres classes héritent d'elle car c'est là ou je définis le tableau2D et certaines méthodes utilisées par les autres classes(mourrir par exemple).Elle est déclarée abstract puisque une de mes sous classes(hopital) n'utilisent pas la méthode Déplacer.
Voici la classe MedecinCode:
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
53
54 import java.util*; abstract public class Objet { protected Object carte= new Object[20][20]; private int x; private int y; private int nombre_objets; private int value; private int ligne; private int colonne; private char representation; abstract Deplacer(Object carte,Object o,int ligne,int colonne) { } Mourrir() {} /*************Initialisation***************************/ Random generator = new Random(); Object CreateRandomObject() { value=generator.nextInt(3)+1; switch(value) { case 1: return Hopital; break; case 2: return Medecin; break; case 3: return Non_medecin; break; } } public static void main (String args[]) { while(i<nombre_objets) { x=generator.nextInt(20)+1; y=generator.nextInt(20)+1; if(carte[x][y]=null) { carte[x][y]=CreateRandomObject(); } } System.out.println(carte); } }
La classe HopitalCode:
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 public class Medecin { private int stock_medecin; private int nombre_medecins; public int getStock() { return stock_medecin; } public void setStock(int stock) { stock_medecin=stock; } public int getNombre_medecins() { return nombre_medecins; } public void setNombre_medecins(int nb_medecins) { nombre_medecins=nb_medecins; } public void Soigner(Object o) {} public Medecin(int stock,int row,int column, char represent) { this.stock_medecin=stock; this.row_medecin=row; this.column_medecin=column; //this.representation=represent; } public static void main (String args[]) { } }
La classe Non_medecinCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 abstract public class Hopital { private int nombre_hopitaux; public int getNombre_hopitaux() { return nombre_hopitaux; } public void Soigner(Object o) {} public void approvisionnement_medecin(Object o) {} public Hopital(int row,int column, char represent) { this.row_hopital=row; this.column_hopital=column; //this.representation=represent; } public static void main (String args[]) { } }
Code:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 public class Non_medecin extends Objet { private int nombre_malade; private int nombre_sains; private int nombre_malade_difficile; private String etat; private int resistance; private int debut_contamination; public int getNombre_malade() { return nombre_malade; } public void setNombre_malade(int nb_malade) { nombre_malade=nb_malade; } public int getNombre_sains() { return nombre_sains; } public void setNombre_malade(int nb_sains) { nombre_sains=nb_sains; } public int getNombre_malade_difficile() { return nombre_malade_difficile; } public void setNombre_malade(int nb_malade_difficile) { nombre_malade_difficile=nb_malade_difficile; } public String getETat() { return etat; } public void setEtat(String et) { etat=et; } public int getDate_contamination() { return debut_contamination; } public void setDate_contamination(int date) { debut_contamination=date; } public int getResistance() { return resistance_maladie; } public void setResistance(int resist) { resistance_maladie=resist; } public void Contaminer(Object o) {} public Non_medecin(String et,int row,int column,int resist,int contamination, char represent) { this.etat=et; this.row_non_medecin=row; this.column_non_medecin=column; this.resistance_maladie=resist, this.debut_contamination=contamination, //this.representation=represent; } public static void main (String args[]) { } }
La méthode main y en a partout, c'est pas bon, crée une classe Main avec une méthode main ça sera le point d'entrée de ton appli bien distinct du reste.
Je ne comprends pas les héritages de ta modélisation :
Objet -> Non_medecin et le reste qui n'hérite de rien...
Le principe de base des objets en programmation c'est généralement de créer une métaphore pour simplifier (rendre plus intuitif) l'utilisation des structures de données.
Concrètement dans ton cas voici un début de truc (à toi de voir si ça colle avec ton exo)
Code:
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 public class Carte { /* * le tableau n'est pas visible à l'extérieur de l'objet. * C'est plus sûr, on y accéde que via des méthodes. */ private Element[][] elements; public Carte() { elements = ...; /* plus tout le reste de l'initalisation de la carte */ } public int getWidth() { } public int getHeight() { } ... }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public abstract class Element { private Carte owner; private int x, y; public Element(Carte owner, int x, int y) { if(x < 0 || >= owner.getWidth()) throw new IllegalArgumentException("x: "+ x); if(y ...) ... ... } public Position getX() { } public Position getY() { } ... }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public class Person extends Element { public Person(Carte owner, int x, int y) { super(owner, x, y); } public void setPosition(int x, int y) { } ... }
Oui j'ai fait une erreur, les autres classes héritent aussi de Objet !
Qu'espères-tu ajouter ici ? La liste des éléments qui peuvent etre présents dans le tableau(hopital,medecin,non_medecin)?? je ne dois pas faire ça dans les constructeurs des différentes classes. Pour ce qui est de l'initialisation du tableau et de la dispersion aléatoire de mes objets dans le tableau, je dois le faire dans le main ou dans la classe Carte?
Enfin, au départ je dois saisir le nombre d'hopitaux, de médecins(qui ne peuvent pas etre malades) ainsi que le nombre de non_medecin(malade et non_malade). Ca je dois le faire dans le main.
Code:
1
2 public Carte() { elements = ...;