Сопоставление символов с элементами или рисование блоков с помощью анализа текстового файла - PullRequest
0 голосов
/ 21 июня 2020

Я хочу сопоставить заданные строки из текстового файла с блоками, я имею в виду фактически рисовать блоки. У меня уже есть класс 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?

Большое спасибо.

...