diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ch/epfl/xblast/RunLengthEncoder.java | 2 | ||||
-rw-r--r-- | src/ch/epfl/xblast/server/GameStateSerializer.java | 50 | ||||
-rw-r--r-- | src/ch/epfl/xblast/server/Level.java | 8 | ||||
-rw-r--r-- | src/ch/epfl/xblast/server/painter/ExplosionPainter.java | 5 |
4 files changed, 49 insertions, 16 deletions
diff --git a/src/ch/epfl/xblast/RunLengthEncoder.java b/src/ch/epfl/xblast/RunLengthEncoder.java index ecb9f4e..d7ab106 100644 --- a/src/ch/epfl/xblast/RunLengthEncoder.java +++ b/src/ch/epfl/xblast/RunLengthEncoder.java | |||
@@ -189,4 +189,4 @@ public final class RunLengthEncoder { | |||
189 | .collect(Collectors.toList()); | 189 | .collect(Collectors.toList()); |
190 | } | 190 | } |
191 | 191 | ||
192 | } | 192 | } \ No newline at end of file |
diff --git a/src/ch/epfl/xblast/server/GameStateSerializer.java b/src/ch/epfl/xblast/server/GameStateSerializer.java index 998ff21..049e993 100644 --- a/src/ch/epfl/xblast/server/GameStateSerializer.java +++ b/src/ch/epfl/xblast/server/GameStateSerializer.java | |||
@@ -47,13 +47,17 @@ public final class GameStateSerializer { | |||
47 | * @param bombedCells cells containing a bomb | 47 | * @param bombedCells cells containing a bomb |
48 | * @param blastedCells cells containing a blast | 48 | * @param blastedCells cells containing a blast |
49 | * @param cell cell hosting the explosion | 49 | * @param cell cell hosting the explosion |
50 | * @param board actual Board | ||
50 | * @return the serialized explosion | 51 | * @return the serialized explosion |
51 | */ | 52 | */ |
52 | private static byte serializeExplosion(Map<Cell, Bomb> bombedCells, Set<Cell> blastedCells, Cell cell) { | 53 | private static byte serializeExplosion(Map<Cell, Bomb> bombedCells, Set<Cell> blastedCells, Cell cell, Board board) { |
53 | if (bombedCells.containsKey(cell)) | 54 | if (bombedCells.containsKey(cell)) |
54 | return ExplosionPainter.byteForBomb(bombedCells.get(cell)); | 55 | return ExplosionPainter.byteForBomb(bombedCells.get(cell)); |
55 | else | 56 | |
57 | if (blastedCells.contains(cell) && board.blockAt(cell).isFree()) | ||
56 | return serializeBlast(blastedCells, cell); | 58 | return serializeBlast(blastedCells, cell); |
59 | |||
60 | return ExplosionPainter.INVALID_EXPLOSION_IMAGE_ID; | ||
57 | } | 61 | } |
58 | 62 | ||
59 | /** | 63 | /** |
@@ -61,15 +65,29 @@ public final class GameStateSerializer { | |||
61 | * | 65 | * |
62 | * @param bombedCells cells containing a bomb | 66 | * @param bombedCells cells containing a bomb |
63 | * @param blastedCells cells containing a blast | 67 | * @param blastedCells cells containing a blast |
68 | * @param board actual Board | ||
64 | * @return the serialized explosions | 69 | * @return the serialized explosions |
65 | */ | 70 | */ |
66 | private static List<Byte> serializeExplosions(Map<Cell, Bomb> bombedCells, Set<Cell> blastedCells) { | 71 | private static List<Byte> serializeExplosions(Map<Cell, Bomb> bombedCells, Set<Cell> blastedCells, Board board) { |
67 | return RunLengthEncoder.encode(Cell.ROW_MAJOR_ORDER.stream() | 72 | return RunLengthEncoder.encode(Cell.ROW_MAJOR_ORDER.stream() |
68 | .map(c -> serializeExplosion(bombedCells, blastedCells, c)) | 73 | .map(c -> serializeExplosion(bombedCells, blastedCells, c, board)) |
69 | .collect(Collectors.toList())); | 74 | .collect(Collectors.toList())); |
70 | } | 75 | } |
71 | 76 | ||
72 | /** | 77 | /** |
78 | * Prepend its size to a Byte List. | ||
79 | * | ||
80 | * @param list Byte List to be prefixed | ||
81 | * @return the Byte List prefixed with its size | ||
82 | */ | ||
83 | private static List<Byte> prefixByteListWithSize(List<Byte> list) { | ||
84 | List<Byte> prefixedList = new ArrayList<>(); | ||
85 | prefixedList.add((byte) list.size()); | ||
86 | prefixedList.addAll(list); | ||
87 | return prefixedList; | ||
88 | } | ||
89 | |||
90 | /** | ||
73 | * Serialize a Player. | 91 | * Serialize a Player. |
74 | * | 92 | * |
75 | * @param player player to be serialized | 93 | * @param player player to be serialized |
@@ -96,17 +114,27 @@ public final class GameStateSerializer { | |||
96 | */ | 114 | */ |
97 | public static List<Byte> serialize(BoardPainter boardPainter, GameState gameState) { | 115 | public static List<Byte> serialize(BoardPainter boardPainter, GameState gameState) { |
98 | List<Byte> output = new ArrayList<>(); | 116 | List<Byte> output = new ArrayList<>(); |
99 | List<Byte> data = new ArrayList<>(); | ||
100 | 117 | ||
101 | data.addAll(serializeBoard(boardPainter, gameState.board())); // Serialize the Board | 118 | // Add the serialized Board to the output |
102 | data.addAll(serializeExplosions(gameState.bombedCells(), gameState.blastedCells())); // Serialize Explosions | 119 | output.addAll( |
120 | prefixByteListWithSize( | ||
121 | serializeBoard(boardPainter, gameState.board()) | ||
122 | ) | ||
123 | ); | ||
124 | |||
125 | // Add the serialized Explosions to the output | ||
126 | output.addAll( | ||
127 | prefixByteListWithSize( | ||
128 | serializeExplosions(gameState.bombedCells(), gameState.blastedCells(), gameState.board()) | ||
129 | ) | ||
130 | ); | ||
131 | |||
132 | // Add the serialized Players to the output | ||
103 | for (Player player : gameState.players()) { | 133 | for (Player player : gameState.players()) { |
104 | data.addAll(serializePlayer(player, gameState.ticks())); // Serialize each Player | 134 | output.addAll(serializePlayer(player, gameState.ticks())); // Serialize each Player |
105 | } | 135 | } |
106 | 136 | ||
107 | data.add((byte) (gameState.remainingTime() / 2)); // Add the state Tick to the data | 137 | output.add((byte) (gameState.remainingTime() / 2)); // Add the state Tick to the output |
108 | output.add((byte) data.size()); // Get the size of the whole data chunk and add it as first element of the output | ||
109 | output.addAll(data); // Add all the data to the output | ||
110 | 138 | ||
111 | return output; | 139 | return output; |
112 | } | 140 | } |
diff --git a/src/ch/epfl/xblast/server/Level.java b/src/ch/epfl/xblast/server/Level.java index 81bc85b..155b99a 100644 --- a/src/ch/epfl/xblast/server/Level.java +++ b/src/ch/epfl/xblast/server/Level.java | |||
@@ -13,15 +13,15 @@ import java.util.HashMap; | |||
13 | public final class Level { | 13 | public final class Level { |
14 | 14 | ||
15 | /** Players' initial parameters **/ | 15 | /** Players' initial parameters **/ |
16 | private static final int PLAYER_INITIAL_LIVES = 5; | 16 | private static final int PLAYER_INITIAL_LIVES = 3; |
17 | private static final int PLAYER_INITIAL_BOMB_MAXIMUM = 5; | 17 | private static final int PLAYER_INITIAL_BOMB_MAXIMUM = 5; |
18 | private static final int PLAYER_INITIAL_BOMB_RANGE = 5; | 18 | private static final int PLAYER_INITIAL_BOMB_RANGE = 5; |
19 | 19 | ||
20 | /** Players' initial positions (Ugly!) **/ | 20 | /** Players' initial positions (Ugly!) **/ |
21 | private static final Cell PLAYER_1_INITIAL_POSITION = new Cell(1,1); | 21 | private static final Cell PLAYER_1_INITIAL_POSITION = new Cell(1,1); |
22 | private static final Cell PLAYER_2_INITIAL_POSITION = new Cell(16,1); | 22 | private static final Cell PLAYER_2_INITIAL_POSITION = new Cell(13,1); |
23 | private static final Cell PLAYER_3_INITIAL_POSITION = new Cell(16,14); | 23 | private static final Cell PLAYER_3_INITIAL_POSITION = new Cell(13,11); |
24 | private static final Cell PLAYER_4_INITIAL_POSITION = new Cell(1,14); | 24 | private static final Cell PLAYER_4_INITIAL_POSITION = new Cell(1,11); |
25 | 25 | ||
26 | /** Level values **/ | 26 | /** Level values **/ |
27 | private final BoardPainter painter; | 27 | private final BoardPainter painter; |
diff --git a/src/ch/epfl/xblast/server/painter/ExplosionPainter.java b/src/ch/epfl/xblast/server/painter/ExplosionPainter.java index 63181e9..83c6176 100644 --- a/src/ch/epfl/xblast/server/painter/ExplosionPainter.java +++ b/src/ch/epfl/xblast/server/painter/ExplosionPainter.java | |||
@@ -15,6 +15,11 @@ public final class ExplosionPainter { | |||
15 | private static final byte WEST_EXPLOSION = 0b0001; | 15 | private static final byte WEST_EXPLOSION = 0b0001; |
16 | 16 | ||
17 | /** | 17 | /** |
18 | * Image ID corresponding to an explosion-free (and bomb-free) cell. | ||
19 | */ | ||
20 | public static final byte INVALID_EXPLOSION_IMAGE_ID = (byte) 16; | ||
21 | |||
22 | /** | ||
18 | * Return the image corresponding to a bomb depending on its fuse length. | 23 | * Return the image corresponding to a bomb depending on its fuse length. |
19 | * | 24 | * |
20 | * @param bomb given bomb | 25 | * @param bomb given bomb |