1. Добавлены: метод получения данных из объекта и метод получения объекта из данных (без гусениц)

This commit is contained in:
prodigygirl 2022-11-20 15:40:07 +04:00
parent 37f392d98e
commit e0cb8ba7b4
5 changed files with 149 additions and 0 deletions

View File

@ -41,4 +41,15 @@ public class DrawingObjectArmoredCar implements IDrawingObject{
public HashMap<String, Float> 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));
}
}

View File

@ -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());
}
}

View File

@ -11,4 +11,6 @@ public interface IDrawingObject {
void DrawingObject(Graphics2D g);
HashMap<String, Float> GetCurrentPosition();
String GetInfo();
}

View File

@ -143,4 +143,24 @@ public class MapWithSetArmoredCarsGeneric<T extends IDrawingObject, U extends Ab
public SetArmoredCarsGeneric<T> 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));
}
}
}

View File

@ -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;
}
}