October 30, 2025

📘 CraftCode v0.1 — Полная документация


CraftCode — это упрощённый скриптовый язык, созданный специально для CraftOS.
Он был разработан для того, чтобы пользователи CraftOS могли самостоятельно создавать свои приложения, интерфейсы и небольшие программы прямо внутри системы.

Главная цель CraftCode:
- простота
- лёгкость в обучении
- понятный и логичный синтаксис
- возможность начать программировать без опыта

CraftCode специально сделан таким, чтобы каждый новичок мог понять,
как он работает и сразу начать использовать его в своих проектах.

Версии:
v0.2 — Редактируемый код, обновляемые объекты, улучшенная архитектура
v0.1 — первая стабильная документация

Дальше будет больше:
- новые функции
- оптимизация и мини-инструменты

Если ты видишь этот текст — проект жив и развивается.


Полная официальная документация:

🔧 Переменные

Локальные переменные (видны везде, включая функции)
var score = 0 // Число
var name = "Player" // Строка
var isActive = true // Булево значение

Глобальные переменные (просто присваивание)
myVariable = 42 // Глобальная переменная
score = 100 // Глобальная переменная

В чём разница:
- var создаёт переменную, которая видна во всём коде (рекомендуется)
- без var переменная глобальная и может конфликтовать

🎨 Создание UI элементов

Прямоугольник (Box)
createBox(x, y, width, height, "color")

// Пример:
createBox(100, 100, 80, 80, "red")

// С переменной:
var myBox = createBox(100, 100, 80, 80, "blue")


Круг (Circle)
createCircle(x, y, radius, "color")

// Пример:
createCircle(200, 200, 50, "green")

// С переменной:
var myCircle = createCircle(150, 150, 40, "yellow")


Текст (Text)
createText("текст", x, y, "color", size, id?) // id — опционально

// Простой текст:
createText("Hello CraftOS!", 150, 100, "white", 24)

// Обновляемый текст с ID:
createText("Score: 0", 150, 150, "white", 20, "scoreText")

// В функции обновляем:
function updateScore() {
// Создаёт новый или обновляет существующий объект с этим ID
createText("Score: 100", 150, 150, "white", 20, "scoreText")
}

// Новые возможности v0.2:
// - Идентификаторы для текстовых объектов
// - Автоматическое обновление существующего текста
// - Возможность обновлять текст без создания новых объектов


Кнопка (Button)
createButton("текст", x, y, "color", callback)

// Пример:
createButton("Click me", 150, 200, "green", onClick)

function onClick() {
createText("Clicked!", 150, 250, "white", 18)
}


Иконка (Icon)
createIcon("путь/к/иконке.jpg", x, y, size)

// Пример:
createIcon("icons/settings_icon.jpg", 100, 300, 60)


🖱️ События (Touch & Tap)

onTouch - Касание
var box = createBox(100, 100, 80, 80, "red")
onTouch(box, handleTouch)

function handleTouch() {
createText("Touched!", 100, 200, "white", 18)
}

onTap - Тап (клик)
var circle = createCircle(200, 200, 50, "blue")
onTap(circle, handleTap)

function handleTap() {
createText("Tapped!", 200, 300, "green", 18)
}


❌ Удаление объектов
var box = createBox(100, 100, 80, 80, "red")
remove(box) // Удаляет объект с экрана


🔀 Условия (If/Else)
if (score > 10) {
createText("High score!", 150, 300, "green", 20)
} else if (score > 5) {
createText("Good!", 150, 300, "yellow", 18)
} else {
createText("Keep going", 150, 300, "white", 16)
}

// Операторы сравнения:
> больше
< меньше
== равно
!= не равно
>= больше или равно
<= меньше или равно


🎨 Цвета

Предустановленные цвета
"red" // Красный
"green" // Зелёный
"blue" // Синий
"yellow" // Жёлтый
"white" // Белый
"black" // Чёрный
"purple" // Фиолетовый
"orange" // Оранжевый
"pink" // Розовый
"gray" // Серый

Кастомные RGB цвета

// Создание своего цвета:
createBox(100, 100, 80, 80, rgb(255, 100, 50))

// RGB цвет в переменной:
var myColor = rgb(100, 200, 255)
var box = createBox(150, 150, 80, 80, myColor)

// Примеры RGB цветов:
rgb(255, 0, 0) // Ярко-красный
rgb(0, 255, 0) // Ярко-зелёный
rgb(0, 0, 255) // Ярко-синий
rgb(255, 255, 0) // Жёлтый
rgb(255, 128, 0) // Оранжевый
rgb(128, 0, 255) // Фиолетовый
rgb(0, 255, 255) // Голубой
rgb(255, 192, 203) // Розовый
rgb(64, 64, 64) // Тёмно-серый
rgb(200, 200, 200) // Светло-серый

// Комбинированное использование:
// Строковый цвет
createBox(100, 100, 80, 80, "red")

// RGB цвет
createBox(200, 100, 80, 80, rgb(255, 0, 0))

// Цвет из переменной
var neonGreen = rgb(57, 255, 20)
createButton("Click", 150, 300, neonGreen, onClick)


📝 Комментарии
// Это комментарий - игнорируется при выполнении


🎮 Полные примеры приложений

Пример 1: Счётчик кликов (v0.2 с обновляемым текстом)
var score = 0

createText("Click Counter", 150, 50, "white", 28)

var button = createBox(150, 150, 100, 100, "green")
createText("Click!", 150, 150, "white", 20)

// Обновляемый текст с ID - текст не дублируется!
createText("Score: 0", 150, 250, "white", 20, "scoreText")

onTap(button, addScore)

function addScore() {
score = score + 1
// v0.2: создаёт новый или обновляет существующий текст с ID "scoreText"
createText("Score: " + score, 150, 250, "white", 20, "scoreText")

if (score > 10) {
createText("Amazing! Score: " + score, 150, 300, "yellow", 24)
}
}

Пример 2: Интерактивные фигуры
var score = 0

var redBox = createBox(100, 100, 80, 80, rgb(255, 50, 50))
var blueCircle = createCircle(250, 100, 40, rgb(50, 150, 255))

createText("Touch the shapes!", 150, 50, "white", 24)

onTouch(redBox, touchBox)
onTap(blueCircle, tapCircle)

function touchBox() {
score = score + 1
createText("Box +1", 100, 200, "red", 18)
}

function tapCircle() {
score = score + 5
createText("Circle +5", 250, 200, "blue", 18)
if (score > 20) {
createText("HIGH SCORE!", 150, 300, rgb(255, 215, 0), 28)
}
}


Пример 3: Калькулятор цветов
var red = 255
var green = 100
var blue = 50

// v0.2: Обновляемый предпросмотр цвета
var preview = createBox(150, 100, 150, 150, rgb(red, green, blue), "colorPreview")

createText("Color Mixer", 150, 30, "white", 24)

var btnRed = createButton("More Red", 150, 280, "red", addRed)
var btnGreen = createButton("More Green", 150, 330, "green", addGreen)

function addRed() {
red = red + 10
if (red > 255) {
red = 0
}
// v0.2: обновляем предпросмотр без создания нового объекта
preview = createBox(150, 100, 150, 150, rgb(red, green, blue), "colorPreview")
}

function addGreen() {
green = green + 10
if (green > 255) {
green = 0
}
preview = createBox(150, 100, 150, 150, rgb(red, green, blue), "colorPreview")
}

Пример 4: Локальные vs Глобальные переменные (v0.2)
// Локальные переменные (рекомендуется) - видны везде
var playerName = "Alex"
var health = 100
var level = 1

// Глобальные переменные (просто присваивание)
xp = 50 // Глобальная переменная
gold = 100 // Глобальная переменная

function levelUp() {
// Локальные переменные видны в функциях
level = level + 1
health = health + 10

// Глобальные тоже видны
xp = xp + level * 10

createText("Level: " + level, 150, 200, "yellow", 24, "levelText")
}


📌 Важные правила v0.2
✅ Каждая команда на новой строке
✅ Функции должны быть объявлены ДО использования
✅ Цвета-строки в кавычках: "red", а не red
✅ RGB без кавычек: rgb(255, 0, 0)
✅ Фигурные скобки {} обязательны для функций и условий
✅ Значения RGB от 0 до 255 (автоматически конвертируются)
✅ v0.2: Используй var для переменных (локальные)
✅ v0.2: Используй ID для текста, если нужно обновлять его
✅ v0.2: Теперь можно редактировать код прямо в редакторе!
✅ v0.2: Автоматическая очистка при переходе между сценами


🚀 Доступные иконки(Будут добавляться с обновлениями):
icons/settings_icon.jpg // Настройки

code_editor_icon.png // Редактор кода
// Больше иконок скоро...