Написал admin 07 29, 2009


Часть 1 - числа, множества чисел

Я знаю, что самое трудное для новичка - начать программировать. Мне хочется вам помочь, облегчить начинание, чтобы потом было проще освоить программы для создания плагинов. Введение нужно читать, чтобы усвоить азы программирования перед началом работ с 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] &lt; 0)
 {
 anyColor[0] = 0
 }

if(anyColor[1] &lt; 0)
 {
 anyColor[1] = 0
 }

if(anyColor[2] &lt; 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] &lt; 0)
 {
 anyColor[0] = 0
 }

if(anyColor[1] &lt; 0)
 {
 anyColor[1] = 0
 }

if(anyColor[2] &lt; 0)
 {
 anyColor[2] = 0    
 }

if(anyColor[0] &gt; 255)
 {
 anyColor[0] = 255
 }

if(anyColor[1] &gt; 255)
 {
 anyColor[1] = 0
 }

if(anyColor[2] &gt; 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] &lt; 0)
 {
 anyColor[0] = 0
 }
 else if (anyColor[0] &gt; 255)
 {
 anyColor[0] = 255
 }

if(anyColor[1] &lt; 0)
 {
 anyColor[1] = 0
 }
 else if (anyColor[1] &gt; 255)
 {
 anyColor[1] = 255
 }

if(anyColor[2] &lt; 0)
 {
 anyColor[2] = 0
 }
 else if (anyColor[2] &gt; 255)
 {
 anyColor[2] = 255
 }
 }

ЭТО

1
2
3
4
5
6
7
8
if(anyColor[x] &lt; 0)
 {
 anyColor[x] = 0
 }
 else if (anyColor[x] &gt; 255)
 {
 anyColor[x] = 255
 }

Читайте как:
Если цветная часть - негатив, создается пустой указатель. Если она не негатив, и больше чем 255 - выставляется значение 255.

Перевод: Michael B. - cs.proamd.net

Похожие темы:

    Не найдено

Оставить комментарий


1 комментарий »

Оставить комментарий

:mrgreen: :| :twisted: 8O :) :? 8) :evil: :D :idea: :P :roll: ;-) :cry: :o :x :( :arrow: :!: :?:


  1. Аноним Says:

    mnogestva a peresekaetsa s mnogestvom b v kakix sluchayax

    comment-bottom

RSS лента комментариев к этой записи. TrackBack URL