Я хочу сопоставить заданные строки из текстового файла с блоками, я имею в виду фактически рисовать блоки. У меня уже есть класс BLOCK, который работает со следующим конструктором:
public class Block implements Collidable, Sprite, HitNotifier {
private List<HitListener> hitListeners;
private Color color;
private Rectangle rectangle;
/**
* Instantiates a new collidable Block.
*
* @param rectangle a given rectangle
* @param color the color of the block
*/
public Block(Rectangle rectangle, Color color) {
this.color = color;
this.rectangle = rectangle;
hitListeners = new ArrayList<>();
}
Теперь моя цель - узнать, как читать и анализировать текстовый файл и создавать блоки на основе данной информации в этом текстовом файле. Файл определений блоков отображает символы в элементы интервалов или информацию о блоке.
Пример файла определений блоков приведен ниже. Далее следует объяснение.
# default values for blocks
default height:20
# block definitions
bdef symbol:a width:20 fill:color(RGB(10,10,10)) stroke:color(black)
bdef symbol:b width:20 fill:color(RGB(10,10,10))
bdef symbol:c width:20 fill:color(red) stroke:color(blue)
bdef symbol:n width:20 fill:image(filename.png) stroke:color(black)
# spacers definitions
sdef symbol:* width:20
sdef symbol:^ width:10
У нас есть четыре типа строк в файле:
строки комментариев или пробелов игнорируются.
строки определений блоков начинаются с токена bdef, за которым следует список свойств, разделенных пробелами. Каждое свойство имеет форму ключ: значение.
значения по умолчанию - одна строка, начинающаяся с токена по умолчанию, за которой следует список свойств, разделенных пробелами. Каждое свойство имеет форму ключ: значение. Вы можете предположить, что если он существует, он будет над строками bdef.
строки определений разделителей начинаются с токена sdef, за которым следует список свойств, разделенных пробелами. Каждое свойство имеет вид ключ: значение
Каждое определение блока имеет следующие свойства:
- символ: символ, который используется для представления типа блока в файле информации об уровнях . Должен быть одним символом.
- height: высота блока в пикселях. Должно быть положительное целое число.
- width: ширина блока в пикселях. Должно быть положительное целое число.
- fill: блок должен быть заполнен с использованием одного из следующих форматов значений: цвет (название цвета), цвет (rgb (x, y, z)), изображение (filename.png) , stroke
Строка определения разделителя имеет два свойства (не наследует определения по умолчанию):
- symbol: символ, который используется для представления типа пробела в файле информации об уровнях. Должен быть одним символом.
- width: ширина элемента интервала в пикселях.
Я хочу использовать этот класс для преобразования информации в разделах BLOCKS файлов спецификации уровней в список блоков.
У меня также есть класс BlocksDefinitionReader, который будет отвечать за чтение блока -definitions и возвращая объект BlocksFromSymbolsFactory (я не знаю, как его записать).
Моя конечная цель состоит в том, чтобы при чтении файла код в BlocksDefinitionReader создавал соответствующие реализации BlockCreator в соответствии с определениями в строках bdef и заполните BlocksFromSymbolsFactory с помощью BlockCreators и связанных с ними символов.
BlockCreator - это интерфейс фабрики-объекта, который используется для создания блоков:
public interface BlockCreator {
// Create a block at the specified location.
Block create(int xpos, int ypos);
}
Итак, Как видите, моя текущая проблема - записать BlocksDefinitionReader и, возможно, улучшить BlocksFromSymbolsFactory?
Большое спасибо.