Доброго времени, друзья!
Перед вами первая часть гайда по языку програмирования kOS.
В этом гайде вы узнаете:
А. Базовые знания о синтаксисе
Б. О базовых и математических командах
В. Основных ошибки начинающих
Возможно некоторым этот гайд покажется сухим, не слишком интересным, и даже возможно скучным но он подготовит вас к пониманию последующих гайдов и языка kOS в целом,
так что даже если вы уже с ним работали,
не стоит пренебрегать этой частью гайда, вы всё равно узнаете что-то новое.
Большая просьба, все вопросы по материалу писать в тему на форуме
kOS тема на форуме.. В комментариях к гайду оставлять лишь отзывы.
Я ставлю в гайде символ "->" дабы читатель видел и понимал как точно выглядит команда и соблюдал все знаки после стрелочки, будь то ковычки или точка.
В программе писать "->" не нужно. Символ // означает что я комментирую строку и все что стоит после двух слешей писать так же не нужно.
Чтобы начать работу с модом в игре, установите мод, установите модуль с kOS на ваш крафт, запустите игру и кликните на этот модуль правой кнопкой мыши, выберите Open Terminal.
ЧАСТЬ А. Синтаксис.
Что нужно знать о языке kOS:
1. Абсолютно любая команда заканчивается точкой
(!). Т.е. в строке программы пишеться
КОМАНДА(УСЛОВИЕ КОМАНДЫ)(.) к примеру -> Print "Ничего не заработает если не поставить точку вон там->".
2. kOS показательный язык т.е. команды на английском языке отображают суть команды. Пример: строчка -> print GroundSpeed. - (перевод - печатай поверхностную скорость)
напечатает на экране консоли скорость вашего крафта относительно поверхности по горизонтали.
3. Язык не зависит от регистра. Т.е. написав SET X TO 1. или set x TO 1. или даже sEt X To 1. kOS вас поймет, и не выдав ошибку, во всех трех случаях сделат Х равным единице.
4. В строке может быть сколько угодно команд, главное чтобы после каждой команды стояла точка(см. пункт 1.).
5. Программы можно писать и редактировать как в Windows-се через блокнот, так и в игре.
6. В Windows программы хранятся в разрешение *.ks и могут открываться и редактироваться обычным блокнотом.
7. Внутри игры не поддерживает кирилицу.
8. Все команды (кроме циклов) что можно писать в коде скриптов можно писать и в терминале. Т.е. не обязательно писать ради одной команды программу и её запускать, можно
просто взять и запустить одну команду в консоле.
ЧАСТЬ Б.Базовые и математические команды.
Оговорюсь, во всех частях гайда я не буду полностью разбирать ту или иную команду, т.к. они имеют достаточно большое количество вариаций(в большинстве), а разберу лишь
необходимые для текущей части\частей гайда составляющие. Полный список возможностей той или иной команды вы можете найти в Оригинальной английской инструкции, переве-
денной мною
ТЫК, а так же я советую пользоваться ей как справочником до создании нового Справочника к гайду(после завершение всех частей начну над ним работу).
В первую очередь мы разберем команды, которые позволят нам создавать и запускать программы внутри игры. Сама структура хранения программ в моде достаточно интересная.
Одновременно мы можем быть подключены к одной "библиотеке" (Volume). Т.е. когда запускается игра мы по умолчанию подключены к Volume #1, где нет ни одной программы и
если мы начнем писать программы в игре все они будут сохранены в библиотеке Volume #1, которая уничтожается после исчезновения крафта(разбился,Recover-нули и т.д.).
К тому же у каждого крафта своя библиотека Volume #1. Т.е. написав программу на одном крафте в Volume #1 и перейдя на другой, мы в этой библиотеке не увидем ничего.
Так же в библиотеке #1 есть ограничение в 10 тысяч символом, программу или программ в сумме состоящих из большего количества символов хранить мы там не сможем.
Размер памяти можно изменить при постройке крафта в ангаре(щелкнув правой кнопкой на модуле мы можем менять размер библиотеки).
По вышеописаным недостаткам я предлагаю всем использовать Архив. Архив это библиотека (Volume #0) в которой хранятся программы прямо у нас на компьютере
в папке \Kerbal Space Program\Ships\Script .Т.е. создавая в игре в библиотеке Volume #0 программы, они все будут сохранятся в вышеописанной папке(в windows) и никогда
ни при каких условиях не пропадут(если вы сами их не удалите в ручную). Размер этой библиотеки бесконечен. К тому же через эту библиотеку вы сможете работать с программами написаными не в игре, а через блокнотик в Windows. Достаточно создать в вышесказанной папке файлик НАЗВАНИЕПРОГРАММЫ.ks и открыть блокнотом. Вуаля вы можете писать
программы прямо в Windows-е. Сделать что бы по умолчанию после запуска крафта вы были в Volume #0 можно в ангаре выбрав в правом нижнем углу значок kOS и включив там
пункт ARCH.
Команда "LIST."
Составляет список. По умолчанию команда -> List. выводит список программ доступных в нашей библиотеке и номер библиотеки в которой мы находимся.
Так же может составлять список деталей из которых состоит крафт, двигателей, целей и дистанции до них и т.д. (Подробнее в справочнике)
Команда "SWITCH TO"
Позволяет "Гулять между библиотеками". К примеру -> SWITCH TO 0. Переключит нас на Volume #0 т.е. Архив; -> SWITCH TO 1. Соотвественно переключит нас на Volume #1.
Так же на архив можно переключиться командой -> SWITCH TO ARCHIVE.
Что очень важно переключиться на Архив мы можем только около КСЦ(Возможно не актуально), поэтому делайте это сразу.
Команда "COPY TO"
Позволяет копировать программы из одной библиотеки в другую. Приведу пример. Мы находимся в Volume #1(где находимся имеет значение).
COPY file1 FROM 0. // Копируй файл под названием "file1" из тома 0 в том 1 (FROM - перевод "ИЗ")
COPY file2 TO 0. // Копируй файл под названием "file1" из тома 1 в том 0 (TO - перевод "В")
С помощью этих команд к примеру можно извлекать нужные программы из архива в память своего крафта (из Volume #0 в Volume #1).И лететь спокойненько на легке быз кучи остальных скриптов.
Команда "DELETE"
Позволяет в игре удалять программы из текущей библиотеки например -> DELETE file1. Удалит программу с именем file1 из текущей библиотеки.
================================
На работе с архивами закончим и приступим к основным двумя командам что вы будете по началу использовать больше всего. Это команды RUN и EDIT.
Команда "EDIT"
Редактирует или создает программу(если программы с таким именнем нет) в активном томе. -> EDIT VZLET. создает программу Vzlet в текущей активной библиотеке.
Пустые программы не сохраняются(Возможно не актуально). Если вы создали программу, то вы можете увидеть её в своей библиотеке с помощью команды -> List. (полезно когда
вы забыли название своей программы или перешли в архив и хотите посмотреть что у вас там есть). Команда list выдает список программ и добавляет их разрешение .ks
При редактировании уже созданных програм писать -> EDIT VZLET.ks. НЕ НУЖНО. Пишем абсолютно так же как и для несозданной программы -> EDIT VZLET.
После написания -> EDIT НАЗВАНИЕПРОГРАММЫ. У нас откроется окошко в котором мы и можем писать программу. В последних обновлениях была добавлена возможность копировать\вырезать
и форматировать текст, как в любом текстовом редакторе, а так же забивать текст прям из игры в буфер компьютера и наоборот(комбинации клавиш Ctrl+C(копировать) Ctrl+X(вырезать)
Ctrl + V (вставить) и другие команды работают). Т.е. мы можем что либо скопировать из интернета\блокнота и вставить прям в программу или наоборот извлечь участок кода из игры.
После написания кода необходимо нажать кнопку сверху окна SAVE. Она сохранит изменения в вашей программе и тогда вы сможете её запустить. Кнопка RELOAD возвращает код к
предыдущему сохранению, т.е. если вы что-то случайно удалили или сделали не так то кнопка RELOAD вернет все как было при прошлом нажатии кнопки SAVE.
Команда "RUN"
Как ни странно - запускает программу. Может запускать программу только из текущей библиотеки. Пишеться так -> Run VZLET. Запускает программу VZlet.ks
=================================
Наконец-то мы приступаем к самому коду программ. Ура-ура. Вы только что осилили самую скучную, но в то же время необходимую часть гайда.
На очереди у нас математические функции. В этой части я постараюсь как можно меньше разглагольствовать и как можно больше приводить примеров.
kOS поддерживает большое кол-во математических фун-ций. Округления, логарифмы, тригонометрия и т.д. Полный список команд можно будет посмотреть в справочнике.
Ну а мы начнем с простого. С команды SET, которая с англ. переводится как ЗАДАТЬ.
В некоторых случаях перед тем как давать некоторым функциям и командам переменные их необходимо обозначить. Например как здесь
SET X TO 1. Делает X равным единице. И в то же время говорит что у меня в программе теперь существует переменная Х
(просто если вы не обозначили Х программа с некоторыми сложными командами может сказать что ты мне задал что-то равным Х, а я не знаю что такое Х об этом
в следующих гайдах, а пока не берите в голову)
SET X TO 1 + 6. \\ Сделает X равным 1 + 6 тобишь 7
Print X. \\ Выведет 7 на экран консоли
SET X TO 5. \\ сделает Х равным 5
SET Y TO X+5. \\ Сделает Y равным Х+5 тоесть 10
PRINT Y. \\ Напечатает 10
Соотвественно так же можно ставить знак "-" (минус),"*" (умножить), "/" (делить (!)
не перепутайте слеш и бекслеш, деление только на символ "/").
В то же время можно и вот так.
SET X TO 5.
SET Y TO 20.
PRINT X+Y. \\Напечатает 25
И
не забываем точки(!) после команд.
Если вы пишите не целое число, то как разделительную запятую вы ставите точку и опять же не забываете про точку после команды.
SET X TO 2.5. // делаем Х равным 2.5
PRINT X+1.4. // Печатаем Х + 1.4 -> напечатает 3.9
К слову у нас так же есть удобная
команда LOCK -(с англ. Зафиксировать, закрепить) она много где применяется и об основной её роли мы поговорим в следующих гайдах,
а пока применение этой команды для мат. функций:
SET X TO 1. //Назначаем Х хранить значение 1
LOCK Y TO X + 2. // Закрепляем в Y значение Х+2
PRINT Y. // Выводим Y на экран. Выведет 3
SET X TO 4. // Назначаем X = 4.
PRINT Y. // Выводим Y на экран. Выведет 6. Поскольку в значении Y закрепилось значение X+2, что мы сделали командой LOCk.
Команду LOCK снять с переменной можно командой UNLOCK, например -> Unlock Y. разблокирует(уберет) условие что мы закрепили командой Lock.
Некоторые полезные мат. функции(Остальные в справочнике):
Не забываем что вместо чисел в скобках может стоять X,Y или любая другая переменная, или характеристика (например высота или скорость и т.п.) почти все что угодно.
CEILING(1.887). // (Ceiling - потолок) Возвращает ближайшее целое число выше данного, в данном случае 2.
FLOOR(1.887). // (Floor - пол) Возвращает ближайшее цело число ниже данного в данном случае 1.
MOD(21,6). // Возвращает остаток от деления. В данном случае 3 (Тобишь 21 делит на 6 = 18 и остаток = 3)
MIN(0,100). // Возвращает минимальное число из 2-х переменных. В данном случае 0. То же самое с командой MAX.
ROUND(1.887). // Округляет до ближайшего целого числа, в данном случае до 2.
ROUND(1.887, 2). // Округляет до указанного количества знаков. В данном случае до второго знака за запятой тобишь = 1.89
SQRT(7.89). // Возвращает квадратный корень, в данном случае 2.80891438103763
С базовыми мат. функциями разобрались. Теперь немного о базовых командах, которые вам наверняка пригодятся.
Команда "STAGE."
Крайне проста достаточно написать -> STAGE. и вуаля, сработает ступень(то же самое что нажать пробел).
Команда "PRINT"
C ней вы уже познакомились на примерах. Выводит что либо на экран терминала. Можно выводить как текст, так и цифры, так и текст и цифры.
К примеру:
Print "Я сижу в подвале и пишу гайд пожалуйста помогите". // напишет строчные данные что стоят в ковычках. Не забываем что кирилицу использовать нельзя.
Знак + можно использовать дабы объединять текст даже разных типов к примеру:
SET X TO 5.
Print "X = "+ X. // Напишет строчные данные что указаны в скобках т.е. "X = " и напишет значение X. Т.е. на экране вы увидите -> X = 5
Можно подставлять абсолютно любые характеристики, команда Print позволит вывести на экран практически что угодно
Например:
Print Altitude. // Напишет вашу высоту (та что по середине сверху)
Print BODY. // Напишет под контролем гравитации какого тела вы находитесь. На старте соответственно будет кербин.
Print Longitude. // Напишет долготу на которой вы находитесь.
И так далее печатать и подставлять куда угодно можно что угодно. Достаточно это понять и в глупых математических функциях появиться смысл:)
Команда "Clearscreen."
Как вы наверное заметили, после любых действий и ваших записей в консоли онные никуда не исчезают. Поэтому достаточно написать -> Clearscreen.
И все что написано на экране вашего терминало исчезнет. Да и переводится команда как "чистый экран" или "очистить экран".
Команда "Wait"
Переводится как Ждать и делает то же что и означает. Исполнение программы приостанавливается пока не выполнится условия команды.
Wait 1. \\ Ждёт 1 секунду и продолжает программу.
Wait 5.3. \\ Ждёт 5.3 секунд и продолжает программу
Wait X. \\ Ждёт X секунд. Т.е. ждет 10 секунд если Х=10.
Посложнее пример:
Wait until GroundSpeed > 5. \\ Ждёт пока скорость относительно земли не станет больше пяти (в m\s)! Очень важно не перепутать!
Wait until Altitude > 2000 \\ Ждёт пока высота от уровня моря не станет больше 2000 метров.
На этом с командами в данном гайде хватит. Прикладные команды, мы будем рассматривать во 2-ом или 3-ем гайде.
Команд дано достаточно. Постарайтесь переварить все что-тут усвоили. Создайте крафт с модулем кОС, батарями и кокпитом и посидите поиграйтесь с командами дабы
полностью усвоить как они работают и что можно с ними делать.
ЧАСТЬ В.Основные ошибки наичнающих.
Здесь мы рассмотрим основные ошибки, что мешают или замедляют новичков в процессе изучения kOS.
1.
ЗАБЫЛ ТОЧКУ. Это самая основная и распространенная ошибка. Несмотря на то что кОС сообщает игроку при ошибке что он ошибься, игрок в упор не замечает где и почему,
в большинстве случаев потому что, забыв точку программа нам выдаёт то что написано в следующей строке после той команды где забыли точку и игрок ищет ошибку там.
ЕСЛИ У ВАС ЧТО-ТО НЕ РАБОТАЕТ, ВОЗЬМИТЕ И ПРОВЕРЬТЕ ВСЕ КОМАНДЫ НА НАЛИЧЕЕ ТОЧЕК В КОНЦЕ, ЭТО КРАЙНЕ ВАЖНО.
2. Не работает команда, на наличие точки проверил. Если у вас не работает какая либо команда или вы не поймете как она работает, проведите серию тестов. Попридавайте
разные значения, разные типы значений(число, вектор, строка), запустите тестовый крафт и тп. Например для понимания как работает система ориентирования в этом языке - просто необходимо на орбите иметь один
тестовый агрегат, который в условиях вакуума вам все покажет. Не получается все равно? Пиши коректный вопрос в теме на форуме (не в комментах к гайду,а в тему на форуме)
Тебе обязательно помогут и вместе найдут решение.
3. Несовместимые типы. Такие ошибки встречаются реже но все же встречаются. В игре всего 3 типа переменных - Числа, строки(текст) и вектора. Если вы пытаетесь запихнуть
что-то в не ту переменную или сложить число с вектором, ясно дело у вас ничего не получится. Внимательней читайте справочник и ознакамлевайтесь с командами.
4. Даже не знаю какую программу написать. Так напиши в тему на форуме! Форумчане быстренько набросают тучу идей. Как ни странно идеи редко заканчиваются:)
Очень важно общаться с людьми которые занимаются схожей деятельностью так как это вызывает возникновение новых необычных идей.
Ну и небольшая программа без комментариев для самоусвоения. Напишите их в игре, или продумайте что они будут делать и как их можно модифицировать.
infoScreen.ks
SET EXIT TO 0.SET CH TO 1.
Print "InfoScreen v.0.1".
Until EXIT=1{
clearscreen
ON ABORT SET EXIT TO 1.
Print "Time Is " + Time:HOUR +":"+Time:Minute+":"+round(Time:Second,0).
Print "Altitude is " + round(Altitude,2).
Print "Ground speed is " + round(GroundSpeed,2).
Print "Vertical speed is " + round(Verticalspeed,2).
When MOD(CH,2)=0 THEN PRINT "IT WORKS!".
SET CH TO CH+1.
Wait 1.}
Print "InfoScreen v.0.1. END".
Что получилось под спойлером.
Возможно некоторые команды вам были непонятны, команда -> ON ABORT УСЛОВИЕ делает условие при нажатии на кнопку ABORT что у нас в верху экрана. В данной программе она выводит программу из бесконечного цикла. Команда Until Exit=1 задавала цикл и делала его пока EXIT не становился равным 1. Команда WHEN THEN делает что-то когда соблюдается какое-то условие. В данном случае я смотрю остаток от деления счётчика CH который изменяю на 1 за каждый цикл. За счет этого команда WHEN THEN и её условия выполняется один раз в 2 цикла, что визуально выглядит как мигающая надпись IT WORKS!.
Всем спасибо за уделенное время. Теперь вы знаете основы kOS и можете изучать более сложные и интересные вещи.До встречи в следующих гайдах. Все свои вопросы оставляйте в теме на форуме, а не в комментариях под постом.
С вами был Finn, увидимся!