diff --git a/src/main/java/DrawingObjectArmoredCar.java b/src/main/java/DrawingObjectArmoredCar.java index b3330ea..e566211 100644 --- a/src/main/java/DrawingObjectArmoredCar.java +++ b/src/main/java/DrawingObjectArmoredCar.java @@ -41,4 +41,15 @@ public class DrawingObjectArmoredCar implements IDrawingObject{ public HashMap GetCurrentPosition() { return armoredCar.GetCurrentPosition(); } + + @Override + public String GetInfo() { + if (armoredCar != null) + return ExtensionArmoredClass.GetDataForSave(armoredCar); + return null; + } + + public static IDrawingObject Create(String data) { + return new DrawingObjectArmoredCar(ExtensionArmoredClass.CreateDrawingArmoredCar(data)); + } } diff --git a/src/main/java/ExtensionArmoredClass.java b/src/main/java/ExtensionArmoredClass.java new file mode 100644 index 0000000..5918a96 --- /dev/null +++ b/src/main/java/ExtensionArmoredClass.java @@ -0,0 +1,56 @@ +import java.awt.*; + +public class ExtensionArmoredClass { + private static final String _separatorForObject = ":"; + + public static DrawingArmoredCar CreateDrawingArmoredCar(String info) { + String[] strs = info.split(_separatorForObject); + if (strs.length == 3) + { + return new DrawingArmoredCar(Integer.parseInt(strs[0]), Integer.parseInt(strs[1]), Color.decode(strs[2])); + } + if (strs.length == 6) + { + return new DrawingTank(Integer.parseInt(strs[0]), + Integer.parseInt(strs[1]), Color.decode(strs[2]), + Color.decode(strs[3]), Boolean.parseBoolean((strs[4])), + Boolean.parseBoolean(strs[5])); + } + return null; + } + +// public static IDrawingCaterpillar CreateIDrawingCaterpillar(String info) { +// String[] strs = info.split(_separatorForObject); +// switch (strs[0]) { +// case "": { +// break; +// } +// case "": { +// break; +// } +// case "": { +// break; +// } +// } +// } + + public static String GetDataForSave(DrawingArmoredCar drawingArmoredCar) + { + var armoredCar = drawingArmoredCar.armoredCar; + var str = String.format("%d%s%d%s%d", armoredCar.getSpeed(), _separatorForObject, + (int)armoredCar.getWeight(), _separatorForObject, armoredCar.getBodyColor().getRGB()); + if (!(armoredCar instanceof EntityTank tank)) + { + return str; + } + return String.format("%s%s%d%s%s%s%s", str, _separatorForObject, + tank.getDopColor().getRGB(), _separatorForObject, tank.isTowerWeapon(), _separatorForObject, tank.isAMachineGun()); + } + + public static String GetDataForSave(IDrawingCaterpillar drawingCaterpillar) { + return String.format("%s%s%d%s%d", drawingCaterpillar.getClass().getName(), _separatorForObject, + drawingCaterpillar.getColor().getRGB(), _separatorForObject, drawingCaterpillar.getNumRinks().val()); + } + + +} diff --git a/src/main/java/IDrawingObject.java b/src/main/java/IDrawingObject.java index cf65865..d9d45f2 100644 --- a/src/main/java/IDrawingObject.java +++ b/src/main/java/IDrawingObject.java @@ -11,4 +11,6 @@ public interface IDrawingObject { void DrawingObject(Graphics2D g); HashMap GetCurrentPosition(); + + String GetInfo(); } diff --git a/src/main/java/MapWithSetArmoredCarsGeneric.java b/src/main/java/MapWithSetArmoredCarsGeneric.java index 25596e7..cb7be80 100644 --- a/src/main/java/MapWithSetArmoredCarsGeneric.java +++ b/src/main/java/MapWithSetArmoredCarsGeneric.java @@ -143,4 +143,24 @@ public class MapWithSetArmoredCarsGeneric get_setCars() { return _setCars; } + + public String GetData(char separatorType, char separatorData) + { + String data = String.format("%s%s", _map.getClass().getName(), separatorType); + for (var armoredCar : _setCars.GetArmoredCars()) + { + data += String.format("%s%s", armoredCar.GetInfo(), separatorData); + } + return data; + } + + public void LoadData(String[] records) + { + for(var rec : records) + { + _setCars.Insert((T)DrawingObjectArmoredCar.Create(rec)); + } + } + + } diff --git a/src/main/java/MapsCollection.java b/src/main/java/MapsCollection.java index 3efab5a..137df14 100644 --- a/src/main/java/MapsCollection.java +++ b/src/main/java/MapsCollection.java @@ -1,3 +1,5 @@ +import java.io.*; +import java.nio.file.Files; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -8,6 +10,9 @@ public class MapsCollection { private int _pictureWidth; private int _pictureHeight; + private final char separatorDict = '#'; + private final char separatorData = ';'; + public MapsCollection(int pictureWidth, int pictureHeight) { _mapStorages = new HashMap<>(); @@ -43,4 +48,59 @@ public class MapsCollection { return _mapStorages.get(ind1).get_setCars().Get(pos); return null; } + + public boolean SaveData(String filename) + { + File f = new File(filename); + if (f.exists()) + { + f.delete(); + } + try (BufferedWriter writter = new BufferedWriter(new FileWriter(filename))) { + writter.write("MapsCollection"); + writter.newLine(); + for (var key : _mapStorages.keySet()) + { + writter.write(String.format("%s%s%s", key, separatorDict, _mapStorages.get(key).GetData(separatorDict, separatorData))); + } + } + catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public boolean LoadData(String filename) { + File f = new File(filename); + if (!f.exists()) { + return false; + } + try (BufferedReader reader = new BufferedReader(new FileReader(filename))) { + if (!reader.readLine().contains("MapsCollection")) + return false; + String line; + while ((line = reader.readLine()) != null) { + var elem = line.split(String.valueOf(separatorDict)); + AbstractMap map = null; + switch (elem[1]) { + case "SimpleMap": + map = new SimpleMap(); + break; + case "MyMapLabirinth": + map = new MyMapLabyrinth(); + break; + case "MyMapWooden": + map = new MyMapWooden(); + break; + } + _mapStorages.put(elem[0], new MapWithSetArmoredCarsGeneric<>(_pictureWidth, _pictureHeight, map)); + _mapStorages.get(elem[0]).LoadData(elem[2].split(String.valueOf(separatorData))); + } + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } }