

Я знаю, что самое трудное для новичка - начать программировать. Мне хочется вам помочь, облегчить начинание, чтобы потом было проще освоить программы для создания плагинов. Введение нужно читать, чтобы усвоить азы программирования перед началом работ с amxmodx. Я испробовал более простой подход, таким образом получился весьма не плохой обучающий текст. И так - первая часть.
В программировании все представлено числами. Буква - число, слово - группа чисел, цвет - группа трех чисел (одно - представление количества Красных, другое - Зеленых, третьи - Синих)
В программе будте готовы иметь дело с числами. Никаких программ не нужно скачивать, хотя одну можно и заиметь - Pawn. В ней пишутся все скрипты.
Часть 1 - числа, множества чисел
Нам нужно место для хранения числа (его мы будем называть “variable”-”Переменная”) Мы делаем:
1 | new numberHolder |
“new” - пояснение, что мы создаем переменную.
“numberHolder” - своя метка. Её нужно называть в зависимости от данных, которые она будет хранить.
Это называется, “объявлять переменную”.
Чтобы хранить число в нашей переменной, мы делаем:
1 | numberHolder = 5 |
Пятерка является примером числа.
Чтобы создать место для группы чисел (иначе говоря “array”-”массив”), мы сделаем:
1 | new numberGroupHolder[x] |
Где “x” - число чисел (:D), которые может хранить переменная. (Размер группы)
У этой группы будет “х” позиций. Одна для каждого числа. Чтобы обратиться к каждой позиции, мы делаем:
1 | numberGroupHolder[0] |
Запомните, “0″ первая позиция. Последняя - “x-1″. И так, чтобы разместить цвет, мы сделаем:
1 2 3 4 5 | new color[3] color[0] = 0 color[1] = 100 color[2] = 255 |
Или
1 2 3 | new color[3] color = {0,100,255} |
Или по другому
1 | new color[3] = {0,100,255} |
Pawn дает нам арифметические операторы так, что после создания нашего цвета, мы можем сделать его более темным:
1 2 3 | color[0] = color[0] - 10 color[1] = color[1] - 10 color[2] = color[2] - 10 |
Если мы хотим затемнить больше чем один цвет, нам не надо изменять каждую часть цвета вручную.
Мы можем, вместо этого, хранить процедуру в части кода, называемой “function”-”функцией”:
1 2 3 4 5 6 | darkenColor(anyColor[3]) { anyColor[0] = anyColor[0] - 10 anyColor[1] = anyColor[1] - 10 anyColor[2] = anyColor[2] - 10 } |
Где:
“darkenColor” - метка для функции, которую мы должны называть в зависимости от того, что она делает.
“anyColor” - метка для переменной,(несвязанной с исходной меткой).
В функции:
Между круглой скобкой у нас есть ее параметры (переменные, которые мы хотим, заставить делать свою работу). Одна в нашем случае.
Между квадратными скобками у нас есть его тело (основная часть).
Так, чтобы затемнить немного цвета, мы сделаем:
1 2 3 4 5 6 7 | new someColor[3] = {100,100,100} new otherColor[3] = {50,100,150} new anotherColor[3] = {255,30,233} darkenColor(someColor) darkenColor(otherColor) darkenColor(anotherColor) |
Это называется “вызов функции, в нашем случае, darkenColor”. Сначала мы определили его цвет, а после использовали его функции.
Затем:
someColor будет хранить значения 90,90,90.
otherColor будет хранить значения 40 90 140.
anotherColor будет хранить значения 245 20 223.
Но, у нашей функции есть проблема. Если часть цвета будет ниже чем 10, то он станет негативом. Это плохо, так как цветная часть должна быть между 0 и 255.
Чтобы решить проблему, мы должны обработать условие. С “условным оператором”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | darkenColor(anyColor[3]) { anyColor[0] = anyColor[0] - 10 anyColor[1] = anyColor[1] - 10 anyColor[2] = anyColor[2] - 10 if(anyColor[0] < 0) { anyColor[0] = 0 } if(anyColor[1] < 0) { anyColor[1] = 0 } if(anyColor[2] < 0) { anyColor[2] = 0 } } |
Если выражение:
Между круглой скобкой - у нас есть условие.
Между квадратными скобками - у нас есть тело. Если есть только тело, тогда условие будет сохраняться.
(”anyColor [x] = 0″ получается, когда “anyColor [x] <0″)
Наша функция немного непрактична. Мы не можем сказать ей - “измени яркость”. Она, как предполагается, только темнеет.
Так давайте сделаем её более практичной!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | changeColorLuminosity(anyColor[3],factor) { anyColor[0] = anyColor[0] + factor anyColor[1] = anyColor[1] + factor anyColor[2] = anyColor[2] + factor if(anyColor[0] < 0) { anyColor[0] = 0 } if(anyColor[1] < 0) { anyColor[1] = 0 } if(anyColor[2] < 0) { anyColor[2] = 0 } } |
Теперь мы можем дать ей “ColorLuminosity”, и она, как мы и хотели, светлеет либо темнеет. (написание положительного коэффициента будет равно яркости, устанавливая отрицательный коэффициент, будет темнеть).
Но у нас есть проблема, ведь она может сделать цветную часть больше чем 255! Таким образом мы должны обработать её:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | changeColorLuminosity(anyColor[3],factor) { anyColor[0] = anyColor[0] + factor anyColor[1] = anyColor[1] + factor anyColor[2] = anyColor[2] + factor if(anyColor[0] < 0) { anyColor[0] = 0 } if(anyColor[1] < 0) { anyColor[1] = 0 } if(anyColor[2] < 0) { anyColor[2] = 0 } if(anyColor[0] > 255) { anyColor[0] = 255 } if(anyColor[1] > 255) { anyColor[1] = 0 } if(anyColor[2] > 255) { anyColor[2] = 0 } } |
Эта функция будет работать. Но и она может быть улучшена. Нет никакой надобности проверять, есть ли у цветной части значение большее чем 255, когда мы знаем, что оно точно негатив.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | changeColorLuminosity(anyColor[3],factor) { anyColor[0] = anyColor[0] + factor anyColor[1] = anyColor[1] + factor anyColor[2] = anyColor[2] + factor if(anyColor[0] < 0) { anyColor[0] = 0 } else if (anyColor[0] > 255) { anyColor[0] = 255 } if(anyColor[1] < 0) { anyColor[1] = 0 } else if (anyColor[1] > 255) { anyColor[1] = 255 } if(anyColor[2] < 0) { anyColor[2] = 0 } else if (anyColor[2] > 255) { anyColor[2] = 255 } } |
ЭТО
1 2 3 4 5 6 7 8 | if(anyColor[x] < 0) { anyColor[x] = 0 } else if (anyColor[x] > 255) { anyColor[x] = 255 } |
Читайте как:
Если цветная часть - негатив, создается пустой указатель. Если она не негатив, и больше чем 255 - выставляется значение 255.
Перевод: Michael B. - cs.proamd.net
mnogestva a peresekaetsa s mnogestvom b v kakix sluchayax