TP2: Fix the Image compare method.
[TP_POO.git] / TP2 / Image.java
CommitLineData
36a82657 1import java.util.Comparator;
a988a46e 2
600e6ac6
JB
3public class Image extends Forme implements Compactable,
4 Comparable<Image>,
5 Comparator<Image> {
a988a46e 6 final int IMAGE_MAX_SIZE = 100;
a988a46e
JB
7 Forme[] formeCollection;
8 int formeNumber;
9
10 Image() {
009c5b1e 11 super();
a988a46e
JB
12 formeCollection = new Forme[IMAGE_MAX_SIZE];
13 formeNumber = 0;
14 }
15
16 Image(Point p) {
009c5b1e 17 super(p);
a988a46e
JB
18 formeCollection = new Forme[IMAGE_MAX_SIZE];
19 formeNumber = 0;
20 }
21
1ace8736
JB
22 public int getSize() {
23 return formeNumber;
24 }
25
a988a46e
JB
26 private boolean isEmpty() {
27 return (formeNumber == 0);
28 }
29
30 private boolean isFull() {
31 return (formeNumber >= formeCollection.length);
32 }
33
34 public void dessiner(Piletransformations pile) {
35 for (int i = 0; i < formeNumber; i++) {
36 formeCollection[i].dessiner(pile);
37 }
38 }
39
40 public void deplacer(Point p) {
41 for (int i = 0; i < formeNumber; i++) {
42 formeCollection[i].deplacer(p);
43 }
44 }
45
46 public boolean ajouter(Forme forme) {
145c683d
JB
47 boolean rtVal = false;
48 if (!isFull()) {
49 formeCollection[formeNumber] = forme;
f8ac3cd5 50 formeNumber++;
145c683d
JB
51 rtVal = true;
52 }
53 return rtVal;
a988a46e
JB
54 }
55
5731ae5f
JB
56 public boolean supprimer(int index) {
57 boolean rtVal = false;
58 if (!isEmpty()) {
59 for (int j = index; (j < formeNumber - 1 && index < formeNumber); j++) {
60 formeCollection[j] = formeCollection[j + 1];
61 }
62 rtVal = true;
63 formeNumber--;
64 }
65 return rtVal;
66 }
67
54d3f5b3 68 public void afficher() {
0f1b2018
JB
69 String className = this.getClass().getSimpleName();
70 System.out.println("---- " + className + " ----");
54d3f5b3
JB
71 for (int i = 0; i < formeNumber; i++) {
72 formeCollection[i].afficher();
73 }
74 }
75
97929775 76 public void compacter(int nElements) {
38098a56
JB
77 // Heavy solution
78 /* int minIndex = formeNumber - nElements - 1;
0f1b2018 79 for (int i = formeNumber - 1; (i > minIndex && !isEmpty()); i--) {
5731ae5f 80 supprimer(i);
38098a56
JB
81 } */
82 // Lightweight solution
83 if (formeNumber - nElements > 0) {
84 formeNumber -= nElements;
85 } else {
86 formeNumber = 0;
5731ae5f 87 }
97929775
JB
88 }
89
1ace8736
JB
90 public int compareTo(Image image) {
91 return formeNumber - image.getSize();
92 }
93
36a82657 94 public int compare(Image image1, Image image2) {
878508f5 95 return image1.getpOri().getY() - image2.getpOri().getY();
36a82657
JB
96 }
97
a988a46e 98}