Giter Site home page Giter Site logo

2d_painter's Introduction

Задание

Общая информация

Требуется реализовать консольный интерпретатор команд для Абстрактного Исполнителя (АИ) на прямоугольном поле. Устройство интерпретатора

  1. Команды:
    a. INIT инициализирует игровое поле заданных размеров, помещая АИ в указанную позиицю на поле. Любая “программа” должна начинаться с этой команды (при этом, не запрещается неоднократное использование команды в программе). Параметры команды должны осмысленно валидироваться.

    b. MOVE [L|R|U|D] - перемещат АИ по направлению влево|вправо|вверх|вниз (должно быть задано ровно одно направление из L, R, U, D) на заданное количество шагов. Поле считается торообразным, т.е. при переходе через границу, движение “закольцовывается”

    c. DRAW - АИ переходит в состояние рисования. В этом состоянии, при перемещении по полю командой MOVE, АИ оставляет след.

    d. WARD - АИ выходит из состояния рисования.

    e. TELEPORT - АИ перемещается в указанную координату (не оставляя следов).

  2. После старта программы и получения команды INIT, программа рисует в консоли заданное поле, любым красивым спобосом, на поле изображается АИ. При получении дальнейших команд, действия АИ или изменения поля соответствующим образом интерпретируются.

  3. Необязательное интересное расширение: позволить в программе ветвления и циклы, для этого добавить команду условного перехода IF_JMP и считать, что все команды нумеруются. В аргументах IF_JMP можно позволить использовать текущие координаты АИ, его состояние, размеры поля - они могут обозначаться какими-то ключевыми словами.

Технические требования

  1. При сдаче продемонстрировать исполнение 2-3 нетривиальных программ.

  2. Для создания команд использовать фабрику объектов.

  3. Фабрика объектов использует механизм Java Reflection для создания объектов. Фабрика конфигурируется в момент своего создания файлом, в котором указано соответствие между именами команд и полными квалифицированными именами классов, которые соответствуют каждой команде (например, TELEPORT=ru.nsu.ivanov.LogoWorld.commands.Teleport). После этого, при получении первого запроса на создание объекта по имени TELEPORT, фабрика пытается загрузить указанный класс при помощи метода Class.forName() и в случае успешной загрузки, инстанцирует экземпляр этого класса при помощи Class.newInstance().
    Класс каждой команды должен не должен загружаться более одного раза, т.е. загруженные экземпляры java.lang.Class требуется кэшировать. Фабрика не должна зависеть от конкретных классов команд.

    Конфигурационный файл для фабрики загружать с помощью ClassLoader.getResourceAsStream(). Для разбора файла удобно использовать класс java.util.Properties.

  4. Классы программы должны быть протестированы с помощью JUnit (либо другого удобного инструмента).

  5. Ход выполнения программы должен быть журналирован с помощью библиотеки log4j (либо другой удобной).

  6. Основные классы и методы должны быть тщательно документированы в формате javadoc. Сборка, запаковывание в jar-файл и запуск должны быть реализованы с помощью технологии Apache Ant.

2d_painter's People

Contributors

sofyacheboltasova avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.