Свои структуры (structure), классы (class), интерфейсы (interface) и перечисления (enum)
Арифметические операторы в виде блоков и текстовых выражений
Условия if else в виде ветвления, а также логические операторы
Циклы while foreach в виде ветвления
Объявление и вызов своих процедур и функций
Различные структуры данных (массивы, множества и словари)
Принцип работы непоследовательных команд:
По сути у нас есть граф блоков, по которому нам нужно пройти
Задача состоит в том, чтобы просто обойти наше дерево по определенном правилам
Если нам нужен какой-то параметр в функции, то мы просто уходим в глубину
Преимущества:
Хорошо смотрится как вертикальной, так и горизонтальной ориентации телефона
Есть организация потоковых данных (черный конверт)
Мало человек сделает этот вариант (ну или доделает до конца), так как он сложнее, чем Scratch. Потенциальный шанс набрать очень много баллов.
Недостатки:
Переменные глобальные. Можно добавить область видимости, но это ещё больше сделает код нечитабельным, а дизайн хуже.
Проблема с последовательностью выполнения команд. В этом нет ничего страшного, но непонятно, как быть с петлями.
Если допускать существование функций с парой выводов, то непонятно, как сделать, чтобы функция вызывался только ОДИН раз, но при этом возвращала все результаты. Если опираться на принцип работы, то функция вызывается столько же раз, сколько и выводов.
На вход строка мат. выражения и мапа с переменными. Тебе надо еë распарсить (в польскую запись, например) и посчитать результат мат. выражения. Мини интерпретатор для мат. выражений, короче
Тута делай как угодно, для меня лишь сделай интерфейс с функцией
Это касается жизненного цикла android приложения и ООП. Разобраться, как писать код НЕЛЬЗЯ и как НУЖНО его писать, чтобы Лидия была в восторге от нас.
По фичам:
В нашем приложении будет несколько окон (или же страничек/менюшек):
файловый менеджер,
менюшка с визуальными блоками (элементами)
сам графический редактор
ввод/вывод (консоль)
Разобраться, как сделать, чтобы можно было листать окна в телефоне (вправо/влево ну и вверх/вниз):
Понять, как сделать так, чтобы при повороте телефона экран переворачивался, а наше приложение подстраивалось (т.е. в вертикальной ориентации приложение будет показывать нам графические элементы иначе, нежели в горизонтальной ориентации)
Разобраться, как сделать несколько тем (темную и светлую)
У нас в графическом редакторе может быть много блоков. Ооочень. Надо понять, как сделать увеличение пальчиками на телефоне.
Добавить к PinView (pin_item.xml) поле для ввода.
Это поле может иметь 1 из 4 типов данных. Разрешаю определения типа сделать через when
Boolean - выглядит как галочка, сделать прослушку на изменение галочки с TODO, по умолчанию false
Int - поле ввода для целых чисел, сделать прослушку на изменение галочки с TODO, по умолчанию 0
Float - поле ввода для дробных чисел, сделать прослушку на изменение галочки с TODO, по умолчанию 0.0
Для остальных (else) - поле ввода строки, сделать прослушку на изменение галочки с TODO, по умолчанию пустая строка
Это поле должно становиться невидимым, если пин соединен! Сделаете это через visiable (или как там), не через removeView(). ЧТОБЫ РАЗМЕР БЛОКА НЕ УМЕНЬШАЛСЯ!
Плюсы - нет ООП и проше
Минусы - сложнее кликнуть по полю ввода
Сделать отдельный блок, но вы НЕ делаете его! Вы делаете только PinView.
Конкретно: PinView должен быть abstract, оставляете там общую логику (методы, свойства). Не забудьте удалить из PinView PinItemBinding.
Далее создаете 2 новых вью, которые наследуют PinView (соответственно и два новых xml) и там будет различие только в том, что в обычных вьюшках будет их название (пинов), а в константных вьюшках будет поле для ввода (и его аналогично как в первом пункте).
Плюсы - это выглядит более правильным
Минус - тогда у нас несоединенные пины ввода (например в print string пин text) будет ломаться во время выполнения нашей программе (будут ошибки, и приложение падает)