Bonjour je viens de commencer le java, et pour m'entrainer je veux faire une IA qui joue au morpion.
Mais je cale sur un point:
J'ai une classe "Board" que je veux cloner, elle est bien cloné sauf que celle-ci possède un tableau à 2 dimension d'objets "ElementBoard" qui eux, ne son pas cloné...
Bon bah je vous passe le code (enfaite il y aussi 2 classe "MorpionSquareBoard" qui hérite de "SquareBord" qui hérite de "Board" et une classe "MorpionElementBoard" qui hérite de "ElementBoard"):
BoardSquareBoard
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 package jmorpion; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author root */ public class Board implements Cloneable { protected ElementBoard[][] board; protected int weight; protected int height; public Board(int _weight, int _height) { board = (ElementBoard[][]) new ElementBoard[_weight][_height]; weight = _weight; height = _height; } public ElementBoard get(int x, int y) { return board[x][y]; } public void showBoard() { for (ElementBoard[] line : board) { for (ElementBoard element : line) { System.out.print(" " + element.toString() + " "); } System.out.println(); } System.out.println(); } protected void put(ElementBoard element, int x, int y) { board[x][y] = element; } protected void putAll(ElementBoard element) { for (int x = 0; x < weight; x++) { for (int y = 0; y < height; y++) { put(element, x, y); } } } public int getHeight() { return height; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } @Override public Board clone() { Board boardClone = null; try { boardClone = (Board) super.clone(); } catch (CloneNotSupportedException ex) { Logger.getLogger(MorpionSquareBoard.class.getName()).log(Level.SEVERE, null, ex); } for (int x = 0; x < weight; x++) { for (int y = 0; y < height; y++) { boardClone.board[x][y] = (ElementBoard) board[x][y].clone(); } } return boardClone; } }MorpionSquareBoard
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 package jmorpion; /** * * @author root */ public class SquareBoard extends Board { public SquareBoard(int size) { super(size, size); } @Override public SquareBoard clone() { return (SquareBoard) super.clone(); } }ElementBoard
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 package jmorpion; import java.util.logging.Level; import java.util.logging.Logger; } /** * * @author root */ public final class MorpionSquareBoard extends SquareBoard { public MorpionSquareBoard(int size) { super(size); try { putAll(new MorpionElementBoard(0)); } catch (Exception ex) { Logger.getLogger(MorpionSquareBoard.class.getName()).log(Level.SEVERE, null, ex); } } @Override public MorpionSquareBoard clone() { return (MorpionSquareBoard) super.clone(); } }MorpionElementBoard
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 package jmorpion; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author root */ public class ElementBoard<ElementObject> implements Cloneable { protected ElementObject element; public ElementBoard(ElementObject _element) { element = _element; } public ElementObject getValue() { return element; } @Override public String toString() { return element.toString(); } @Override public ElementBoard clone() { ElementBoard elementBoard = null; try { elementBoard = (ElementBoard) super.clone(); } catch (CloneNotSupportedException ex) { Logger.getLogger(MorpionSquareBoard.class.getName()).log(Level.SEVERE, null, ex); } return elementBoard; } }(j'espère que c'est pas trops gros :p )
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 package jmorpion; /** * * @author root */ public class MorpionElementBoard extends ElementBoard<Integer> { public MorpionElementBoard(int value) throws Exception { super(value); if (value > 3 || value < 0) { throw new Exception("Valeur invalide: " + value); } } @Override public MorpionElementBoard clone() { return (MorpionElementBoard) super.clone(); } }
Pour tester tout ca je fait un:
Et j'obtiens:
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 package jmorpion; /** * * @author root */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) throws Exception { MorpionSquareBoard morpionSquareBoard = new MorpionSquareBoard(3); MorpionSquareBoard newMorpionSquareBoard = morpionSquareBoard.clone(); System.out.println("Plateau de l'objet avant le put() sur le nouvelle objet: "); morpionSquareBoard.showBoard(); newMorpionSquareBoard.put(new MorpionElementBoard(1), 1, 1); System.out.println("Plateau de l'objet après le put() sur le nouvelle objet: "); morpionSquareBoard.showBoard(); System.out.println("Weight du nouvelle objet avant le put sur l'ancien: " + newMorpionSquareBoard.getWeight()); morpionSquareBoard.setWeight(100); System.out.println("Weight du nouvelle objet près le put sur l'ancien: " + newMorpionSquareBoard.getWeight()); } }
Logiquement le tableau ne devrais pas changer mais la ce n'est pas le cas et pourtant la variable weight (je l'ai pris au hazart) ne change pas !run:
Plateau de l'ancien objet avant le put() sur le nouvelle objet:
0 0 0
0 0 0
0 0 0
Plateau de l'ancien objet après le put() sur le nouvelle objet:
0 0 0
0 1 0
0 0 0
Weight du nouvelle objet avant le put sur l'ancien: 3
Weight du nouvelle objet après le put sur l'ancien: 3
BUILD SUCCESSFUL (total time: 0 seconds)
Je suis complètement perdu ca fait un bon moment que je cherche mais j'ai rien trouvé ...
Merci d'avance pour ceux qui prendront la peine de lire tout le code ^^
Partager