edited SeaSynchronizer , EditorState, ServerGameLogic
added JavaDocs for the new and adapted functions added a new invalid map for testing purposes fixed implemented the logic to check for invalid maps in the method received in ServerGameLogic
This commit is contained in:
66
Projekte/battleship/client/maps/map3.json
Normal file
66
Projekte/battleship/client/maps/map3.json
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"width": 10,
|
||||||
|
"height": 10,
|
||||||
|
"ships": [
|
||||||
|
{
|
||||||
|
"length": 4,
|
||||||
|
"x": 2,
|
||||||
|
"y": 8,
|
||||||
|
"rot": "RIGHT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"length": 3,
|
||||||
|
"x": 2,
|
||||||
|
"y": 5,
|
||||||
|
"rot": "DOWN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"length": 3,
|
||||||
|
"x": 5,
|
||||||
|
"y": 6,
|
||||||
|
"rot": "RIGHT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"length": 2,
|
||||||
|
"x": 4,
|
||||||
|
"y": 4,
|
||||||
|
"rot": "RIGHT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"length": 2,
|
||||||
|
"x": 7,
|
||||||
|
"y": 4,
|
||||||
|
"rot": "RIGHT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"length": 2,
|
||||||
|
"x": 7,
|
||||||
|
"y": 4,
|
||||||
|
"rot": "RIGHT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"length": 1,
|
||||||
|
"x": 6,
|
||||||
|
"y": 2,
|
||||||
|
"rot": "RIGHT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"length": 1,
|
||||||
|
"x": 8,
|
||||||
|
"y": 2,
|
||||||
|
"rot": "RIGHT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"length": 1,
|
||||||
|
"x": 6,
|
||||||
|
"y": 0,
|
||||||
|
"rot": "RIGHT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"length": 1,
|
||||||
|
"x": 8,
|
||||||
|
"y": 0,
|
||||||
|
"rot": "RIGHT"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -138,7 +138,7 @@ public Spatial visit(Battleship ship) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the appropriate graphical representation of the specified battleship.
|
* Creates the appropriate graphical representation of the specified battleship.
|
||||||
* The representation is either a detailed model or a simple box based on the length of the ship.
|
* The representation is a detailed model based on the length of the ship.
|
||||||
*
|
*
|
||||||
* @param ship the battleship to be represented
|
* @param ship the battleship to be represented
|
||||||
* @return the spatial representing the battleship
|
* @return the spatial representing the battleship
|
||||||
@@ -208,6 +208,12 @@ private Spatial createBattleship(Battleship ship) {
|
|||||||
|
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a detailed 3D model to represent a "Big Ship"
|
||||||
|
* @param ship
|
||||||
|
* @return the spatial representing the "Big Ship" battleship
|
||||||
|
*/
|
||||||
private Spatial createBigShip(Battleship ship) {
|
private Spatial createBigShip(Battleship ship) {
|
||||||
final Spatial model = app.getAssetManager().loadModel(DESTROYER);
|
final Spatial model = app.getAssetManager().loadModel(DESTROYER);
|
||||||
|
|
||||||
@@ -219,6 +225,11 @@ private Spatial createBigShip(Battleship ship) {
|
|||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a detailed 3D model to represent a "Medium Ship"
|
||||||
|
* @param ship
|
||||||
|
* @return the spatial representing the "Medium Ship" battleship
|
||||||
|
*/
|
||||||
private Spatial createMediumShip(Battleship ship) {
|
private Spatial createMediumShip(Battleship ship) {
|
||||||
final Spatial model = app.getAssetManager().loadModel(FERRY);
|
final Spatial model = app.getAssetManager().loadModel(FERRY);
|
||||||
|
|
||||||
@@ -230,6 +241,11 @@ private Spatial createMediumShip(Battleship ship) {
|
|||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a detailed 3D model to represent a "Small Ship"
|
||||||
|
* @param ship
|
||||||
|
* @return the spatial representing the "Small Ship" battleship
|
||||||
|
*/
|
||||||
private Spatial createSmallShip(Battleship ship) {
|
private Spatial createSmallShip(Battleship ship) {
|
||||||
final Spatial model = app.getAssetManager().loadModel(SMALL);
|
final Spatial model = app.getAssetManager().loadModel(SMALL);
|
||||||
|
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ private ShipMap harbor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads a map from the specified file.
|
* Loads a map from the specified file. Also Checks if the map is valid
|
||||||
*
|
*
|
||||||
* @param file the file to load the map from
|
* @param file the file to load the map from
|
||||||
* @throws IOException if the map cannot be loaded
|
* @throws IOException if the map cannot be loaded
|
||||||
@@ -267,10 +267,20 @@ public boolean maySaveMap() {
|
|||||||
return harbor().getItems().isEmpty();
|
return harbor().getItems().isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the map is valid in terms of overlapping and if the ship is within the boundries of the map
|
||||||
|
* @param dto DataTransferObject is the loaded json file
|
||||||
|
* @return returns true if the map is valid, false otherwhise
|
||||||
|
*/
|
||||||
private boolean validMap(ShipMapDTO dto) {
|
private boolean validMap(ShipMapDTO dto) {
|
||||||
return inBoundsClient(dto) && overLapClient(dto);
|
return inBoundsClient(dto) && overLapClient(dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the Ships overlap on the map
|
||||||
|
* @param dto DataTransferObject is the loaded json file
|
||||||
|
* @return returns true if the ships arent overlapping, false otherwhise
|
||||||
|
*/
|
||||||
private boolean overLapClient(ShipMapDTO dto) {
|
private boolean overLapClient(ShipMapDTO dto) {
|
||||||
List<Battleship> battleshipList = dto.getShips();
|
List<Battleship> battleshipList = dto.getShips();
|
||||||
|
|
||||||
@@ -286,6 +296,11 @@ private boolean overLapClient(ShipMapDTO dto) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the Ship is in the map Boundries
|
||||||
|
* @param dto DataTransferObject is the loaded json file
|
||||||
|
* @return true if the ship is in the maps boundriess, false otherwhise
|
||||||
|
*/
|
||||||
private boolean inBoundsClient(ShipMapDTO dto) {
|
private boolean inBoundsClient(ShipMapDTO dto) {
|
||||||
int widht = dto.getWidth();
|
int widht = dto.getWidth();
|
||||||
int height = dto.getHeight();
|
int height = dto.getHeight();
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ public Player addPlayer(int id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles the reception of a MapMessage.
|
* Handles the reception of a MapMessage. Also Checks if the given map is valid or invalid
|
||||||
*
|
*
|
||||||
* @param msg the received MapMessage
|
* @param msg the received MapMessage
|
||||||
* @param from the ID of the sender client
|
* @param from the ID of the sender client
|
||||||
@@ -143,16 +143,19 @@ public Player addPlayer(int id) {
|
|||||||
public void received(MapMessage msg, int from) {
|
public void received(MapMessage msg, int from) {
|
||||||
if (state != ServerState.SET_UP)
|
if (state != ServerState.SET_UP)
|
||||||
LOGGER.log(Level.ERROR, "playerReady not allowed in {0}", state); //NON-NLS
|
LOGGER.log(Level.ERROR, "playerReady not allowed in {0}", state); //NON-NLS
|
||||||
|
else if(!validMap(msg,from)){
|
||||||
|
LOGGER.log(Level.ERROR, "Map message not valid",state);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
playerReady(getPlayerById(from), msg.getShips());
|
playerReady(getPlayerById(from), msg.getShips());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the map is Valid in terms of boundries and overlaps
|
* Checks if the map is Valid in terms of boundries and overlaps
|
||||||
*
|
* *
|
||||||
* @param msg the received MapMessage
|
* @param msg the received MapMessage
|
||||||
* @param id the ID of the sender client
|
* @param id the ID of the sender client
|
||||||
* @return
|
* @return returns true if the map is valid, false otherwhise
|
||||||
*/
|
*/
|
||||||
private boolean validMap(MapMessage msg, int id) {
|
private boolean validMap(MapMessage msg, int id) {
|
||||||
return inBounds(msg, id) && overLap(msg);
|
return inBounds(msg, id) && overLap(msg);
|
||||||
@@ -162,7 +165,7 @@ private boolean validMap(MapMessage msg, int id) {
|
|||||||
* Checks if the Ships overLap
|
* Checks if the Ships overLap
|
||||||
*
|
*
|
||||||
* @param msg the received MapMessage
|
* @param msg the received MapMessage
|
||||||
* @return
|
* @return returns true if the ships arent overlapping, false otherwhise
|
||||||
*/
|
*/
|
||||||
private boolean overLap(MapMessage msg) {
|
private boolean overLap(MapMessage msg) {
|
||||||
List<Battleship> battleshipList = msg.getShips();
|
List<Battleship> battleshipList = msg.getShips();
|
||||||
@@ -184,7 +187,7 @@ private boolean overLap(MapMessage msg) {
|
|||||||
*
|
*
|
||||||
* @param msg the received MapMessage
|
* @param msg the received MapMessage
|
||||||
* @param id the ID of the sender client
|
* @param id the ID of the sender client
|
||||||
* @return
|
* @return returns true if the ship is within the maps boundries, false otherwhise
|
||||||
*/
|
*/
|
||||||
private boolean inBounds(MapMessage msg, int id) {
|
private boolean inBounds(MapMessage msg, int id) {
|
||||||
int widht = getPlayerById(id).getMap().getWidth();
|
int widht = getPlayerById(id).getMap().getWidth();
|
||||||
|
|||||||
Reference in New Issue
Block a user