aboutsummaryrefslogtreecommitdiff
path: root/src/ch/epfl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ch/epfl')
-rw-r--r--src/ch/epfl/xblast/server/Board.java60
1 files changed, 32 insertions, 28 deletions
diff --git a/src/ch/epfl/xblast/server/Board.java b/src/ch/epfl/xblast/server/Board.java
index 2cbf380..d47bdd3 100644
--- a/src/ch/epfl/xblast/server/Board.java
+++ b/src/ch/epfl/xblast/server/Board.java
@@ -14,6 +14,33 @@ import java.util.List;
14 * @author Timothée FLOURE (257420) 14 * @author Timothée FLOURE (257420)
15 */ 15 */
16public final class Board { 16public final class Board {
17 private static final int BLOCKS_LIST_SIZE = 195;
18 private static final int BOARD_ROWS = 13;
19 private static final int BOARD_COLUMNS = 15;
20 private static final int INNER_BOARD_ROWS = BOARD_ROWS - 2;
21 private static final int INNER_BOARD_COLUMNS = BOARD_COLUMNS - 2;
22 private static final int QUADRANT_ROWS = 6;
23 private static final int QUADRANT_COLUMNS = 7;
24
25 /**
26 * Throw an exeption if the matrix does not have the given number of rows/columns.
27 *
28 * @param matrix the tested matrix
29 * @param rows the expected number of rows
30 * @param columns the expected number of columns
31 * @throws IllegalArgumentException if the matrix does not comply with the given sizes.
32 */
33 private static void checkBlockMatrix(List<List<Block>> matrix, int rows, int columns) {
34 if (matrix.size() != rows) {
35 throw new IllegalArgumentException();
36 } else {
37 for (int i = 0; i < rows; i++) {
38 if (matrix.get(i).size() != columns) {
39 throw new IllegalArgumentException();
40 }
41 }
42 }
43 }
17 44
18 /** 45 /**
19 * List containing all the blocks of the board. 46 * List containing all the blocks of the board.
@@ -27,7 +54,7 @@ public final class Board {
27 * @throws IllegalArgumentException if the blocks is not composed of 195 elements 54 * @throws IllegalArgumentException if the blocks is not composed of 195 elements
28 */ 55 */
29 public Board(List<Sq<Block>> blocks) { 56 public Board(List<Sq<Block>> blocks) {
30 if (blocks.size() != 195) { 57 if (blocks.size() != BLOCKS_LIST_SIZE) {
31 throw new IllegalArgumentException(); 58 throw new IllegalArgumentException();
32 } 59 }
33 this.blocks = blocks; 60 this.blocks = blocks;
@@ -41,18 +68,10 @@ public final class Board {
41 * @throws IllegalArgumentException if rows is not 13*15 68 * @throws IllegalArgumentException if rows is not 13*15
42 */ 69 */
43 public static Board ofRows(List<List<Block>> rows) { 70 public static Board ofRows(List<List<Block>> rows) {
44 if (rows.size() != 13) { 71 checkBlockMatrix(rows, BOARD_ROWS, BOARD_COLUMNS);
45 throw new IllegalArgumentException();
46 }
47
48 List<Sq<Block>> blocksSequence = new ArrayList<>(); 72 List<Sq<Block>> blocksSequence = new ArrayList<>();
49 73
50 for (int i = 0; i < rows.size(); i++) { 74 for (int i = 0; i < rows.size(); i++) {
51
52 if (rows.get(i).size() != 15) {
53 throw new IllegalArgumentException();
54 }
55
56 for (int j = 0; j < rows.get(i).size(); j++) { 75 for (int j = 0; j < rows.get(i).size(); j++) {
57 blocksSequence.add(Sq.constant(rows.get(i).get(j))); 76 blocksSequence.add(Sq.constant(rows.get(i).get(j)));
58 } 77 }
@@ -69,22 +88,15 @@ public final class Board {
69 * @throws IllegalArgumentException if innerbLocks is not 11*13 88 * @throws IllegalArgumentException if innerbLocks is not 11*13
70 */ 89 */
71 public static Board ofInnerBlocksWalled(List<List<Block>> innerBlocks) { 90 public static Board ofInnerBlocksWalled(List<List<Block>> innerBlocks) {
72 if (innerBlocks.size() != 11) { 91 checkBlockMatrix(innerBlocks, INNER_BOARD_ROWS, INNER_BOARD_COLUMNS);
73 throw new IllegalArgumentException();
74 }
75
76 List<List<Block>> rowsList = new ArrayList<>(); 92 List<List<Block>> rowsList = new ArrayList<>();
77 List<Block> wallLine = new ArrayList<>(); 93 List<Block> wallLine = new ArrayList<>();
78 94
79 for (int i = 0; i < 15; i++) { 95 for (int i = 0; i < BOARD_COLUMNS; i++) {
80 wallLine.add(Block.INDESTRUCTIBLE_WALL); 96 wallLine.add(Block.INDESTRUCTIBLE_WALL);
81 } 97 }
82 98
83 for (int i = 0; i < innerBlocks.size(); i++) { 99 for (int i = 0; i < innerBlocks.size(); i++) {
84 if (innerBlocks.get(i).size() != 13) {
85 throw new IllegalArgumentException();
86 }
87
88 List<Block> row = innerBlocks.get(i); 100 List<Block> row = innerBlocks.get(i);
89 row.add(0, Block.INDESTRUCTIBLE_WALL); 101 row.add(0, Block.INDESTRUCTIBLE_WALL);
90 row.add(Block.INDESTRUCTIBLE_WALL); 102 row.add(Block.INDESTRUCTIBLE_WALL);
@@ -106,19 +118,11 @@ public final class Board {
106 * @throws IllegalArgumentException if quadrantNWBlocks is not 6*7 118 * @throws IllegalArgumentException if quadrantNWBlocks is not 6*7
107 */ 119 */
108 public static Board ofQuadrantNWBlocksWalled(List<List<Block>> quadrantNWBlocks) { 120 public static Board ofQuadrantNWBlocksWalled(List<List<Block>> quadrantNWBlocks) {
109 if (quadrantNWBlocks.size() != 6) { 121 checkBlockMatrix(quadrantNWBlocks, QUADRANT_ROWS, QUADRANT_COLUMNS);
110 throw new IllegalArgumentException();
111 }
112
113 List<List<Block>> rowsList = new ArrayList<>(); 122 List<List<Block>> rowsList = new ArrayList<>();
114
115 List<List<Block>> halfInnerBoard = Lists.mirrored(quadrantNWBlocks); 123 List<List<Block>> halfInnerBoard = Lists.mirrored(quadrantNWBlocks);
116 124
117 for (int i = 0; i < halfInnerBoard.size(); i++) { 125 for (int i = 0; i < halfInnerBoard.size(); i++) {
118 if (halfInnerBoard.get(i).size() != 7) {
119 throw new IllegalArgumentException();
120 }
121
122 rowsList.add(Lists.mirrored(halfInnerBoard.get(i))); 126 rowsList.add(Lists.mirrored(halfInnerBoard.get(i)));
123 } 127 }
124 return ofInnerBlocksWalled(rowsList); 128 return ofInnerBlocksWalled(rowsList);