Мне пришлось программировать небольшую игру на Java для проекта для школы. Игра RushHour, и вы можете увидеть ее пример: http://www.thinkfun.com/play-online/rush-hour/.Как использовать вывод JSON-файла в Java для создания объекта с ним?
Мои преподаватели спрашивают меня, разрешите ли мой код читать внешний файл, чтобы исходное состояние игры больше не было жестко закодировано в моей основной части и чтобы параметры игры можно было настроить (размер доска, количество машин в игре ...)
Вот мой первый JSON-файл, который устанавливает классическую игру.
{
"ClassicBoard" :
{
"height" : "6",
"width" : "6",
"exit":
{
"row" : "2",
"column" : "5"
}
},
"ListOfCars" :
{
"car2" :
{
"char" : "2",
"size" : "3",
"orientation" : "vertical",
"currentPosition":
{
"row" : "2",
"column": "2"
}
},
"car3" :
{
"char" : "3",
"size" : "3",
"orientation" : "vertical",
"currentPosition":
{
"row" : "2",
"column": "4"
}
}
},
"redCar":
{
"char" : "1",
"size" : "2",
"orientation" : "horizontal",
"currentPosition":
{
"row" : "2",
"column": "0"
}
}
}
Я пытаюсь найти, как прочитать файл и повторно использовать это выход для создания объекта RushHourGame. Вот конструктор.
public RushHourGame(Board board, List <Car> cars, Car redCar) throws RushHourException
{
this.board = board;
this.redCar = redCar;
if(((redCar.getOrientation() == Orientation.HORIZONTAL)
&& (board.getExit().getRow() != redCar.getCurrentPosition().getRow()))
|| (((redCar.getOrientation() == Orientation.VERTICAL)
&& (board.getExit().getColumn() != redCar.getCurrentPosition().getColumn()))))
{
throw new RushHourException("Car must be aligned with the exit, "
+ "a default game has been created");
}
board.put(redCar);
for (Car putCars : cars)
{
board.put(putCars);
}
}
Я попытался использовать BufferedReader, как это.
public static String readFile(String filename)
{
String result ="";
try
{
BufferedReader br = new BufferedReader (new FileReader(filename));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null)
{
sb.append(line);
line = br.readLine();
}
result = sb.toString();
}
catch (Exception e)
{
e.printStackTrace();
}
return result;
}
Но я не знаю, как использовать его для разбора моего файла JSON. Кто-нибудь может мне помочь?
Спасибо за ответ. Ваш ответ выглядит очень интересным, я проверю это подробно, как только смогу, и я вернусь, чтобы связаться с вами, если это сработает! –
Ну, я думаю, что код не очень полезен, потому что я уже сделал свои занятия для автомобиля, борта, должности ... И то, что вы сделали, не подходит. Плюс, я думаю, что использование сеттеров не является решением, потому что я не хочу, чтобы у пользователя была возможность изменить эти значения. Конструктор класса RushHourGame вызывает cnstructor всех других классов, поэтому мне нужен конструктор RushHourGame для извлечения данных и значений в файле JSON и создания с ним нового объекта RushHourGame. Но спасибо за решение Джексона. –